Cloud Custodian を使用してクラウド ガバナンスをコードとして実装する方法

Cloud Custodian を使用してクラウド ガバナンスをコードとして実装する方法

[51CTO.com クイック翻訳] Cloud Custodian を使用するユーザーは、シンプルな YAML ポリシーを記述して、適切に管理されたクラウド コンピューティング インフラストラクチャを作成できます。

今日の拡大し続けるクラウド コンピューティング インフラストラクチャでは、すべてのリソースをコンプライアンスに従って管理することは困難です。企業には、クラウド コンピューティング リソースの使用に関する違反を検出し、是正措置を講じるために従う必要がある一連のポリシーがあります。これは通常、いくつかのカスタム スクリプトを記述し、サードパーティのツールと統合を使用することによって行われます。多くの開発チームは、カスタム スクリプトを管理、記述し、追跡することがいかに難しいかを知っています。ただし、Cloud Custodian DSL ポリシーを使用すると、クラウド コンピューティング リソースを簡単に管理できます。

クラウドガバナンスとは何ですか?

クラウド ガバナンスは、開発者がコストを管理し、セキュリティ リスクを最小限に抑え、効率を高め、展開を加速するためのポリシーを作成する方法を定義するフレームワークです。

ガバナンスをコードとして提供するツールは何ですか?

(1)AWS設定

AWS Config は主に AWS リソースのすべての設定データを記録および監視し、コンプライアンスの強化に役立つルールを構築できます。たとえば、複数のアカウントと複数の地域のオプションを設定します。また、定義済みの AWS マネージドルールもいくつか提供されており、それらを使用することもできますし、ユーザーが独自のカスタムルールを作成することもできます。一致に基づいて是正措置を講じることもできます。カスタム戦略の場合、アクションを実行するために独自の Lambda 関数を記述する必要があります。

ただし、ユーザーは Cloud Custodian を使用して AWS Config ルールを設定し、c7n-org を使用して複数のアカウントとリージョンのカスタムルールをサポートできます。さらに、AWS Lambda 関数を自動的に構成することもできます。

(2)Azureポリシー

Azure Policy は、Azure リソース全体に組織の標準を適用します。環境全体の状態を評価するための集計ビューと、リソースごと、ポリシーごとの粒度にドリルダウンする機能 (たとえば、ユーザーは A シリーズと B シリーズの VM のみを作成できます) を提供します。ユーザーは、組み込みポリシーを有効にしたり、すべてのリソースに対してカスタム ポリシーを作成したりできます。また、非準拠のリソースに対して自動修復アクションを実行することもできます。

Azure Policy は、顧客定義のルールからの逸脱を防ぐために、デプロイメント上にカスタム検証レイヤーを構築する上で信頼性が高く効率的です。コンプライアンスの施行に関して、Cloud Custodian と Azure Policy が実現できるシナリオには多くの重複があります。要件を確認するときは、まず Azure Policy を通じて適用できる要件を特定することをお勧めします。その後、Custodian を使用して残りの要件を実装できます。 Custodian は、Azure Policy でカバーされる要件に 2 番目の保護または軽減層を追加するためにもよく使用されます。これにより、ポリシーが正しく構成されていることが保証されます。

これまで、クラウド ガバナンスとは何か、市場で入手可能なツールは何かを見てきました。クラウド ガバナンスに関して Cloud Custodian が何を提供できるかを見てみましょう。

Cloud Custodian とは何ですか?

Cloud Custodian は、パブリック クラウド リソースをリアルタイムで管理するための CNCF サンドボックス プロジェクトです。これは、インフラストラクチャをコードとして記述するのと同じように、ユーザーがガバナンスをコードとして記述するのに役立ちます。問題のないリソースを検出し、修正するためのアクションを実行します。 Cloud Custodian もクラウドネイティブ ツールです。複数のクラウド コンピューティング プロバイダー (AWS、Azure、GCP など) で使用できます。

ユーザーは Cloud Custodian を次のように使用できます。

  • コードとしてのコンプライアンスとセキュリティ: シンプルな YAML DSL ポリシーをコードとして記述できます。
  • コスト削減: 不要なリソースを削除し、オン/オフタイム ポリシーを実装すると、コストを節約できます。
  • 運用効率: ガバナンスをコードとして追加することで、クラウドにおける安全なイノベーションの摩擦が軽減され、開発者の効率が向上します。

どのように機能しますか?

Cloud Custodian コマンドを実行すると、リソース、フィルター、アクションが入力として取得され、クラウド プロバイダーに応じてクラウド プロバイダー API 呼び出し (AWS Boto3 API など) に変換されます。カスタムスクリプトや AWS CLI コマンドについて心配する必要はありません。ユーザーは、Cloud Custodian に組み込まれた多くの一般的なフィルターやアクションとともに、明確で読みやすいポリシーを利用できます。カスタム フィルターが必要な場合は、いつでも JMESPath を使用してフィルターを記述できます。

場合によっては、ポリシーを定期的に実行したり、特定のイベントに基づいて実行したりする必要があります。 Cloud Custodian は、この目的のために Lambda 関数と CloudWatch イベントルールを自動的にプロビジョニングします。 CloudWatch イベント ルールは、スケジュール設定 (10 分ごと) することも、CloudTrail からの API 呼び出し、EC2 インスタンス ステータス イベントなどに応じてトリガーすることもできます。

Cloud Custodian をインストールして設定するにはどうすればいいですか?

Cloud Custodian は、Python の pip コマンドを使用するだけで簡単にインストールできます。

  1. python3 -m venv カストディアン
  2. ソース custodian/bin/activate
  3. pip install c7n # これにはAWSサポートが含まれます
  4. pip install c7n_azure #Azure パッケージをインストール
  5. pip install c7n_gcp #GCP パッケージをインストール

Cloud Custodian Dockerイメージの使用

  1. docker run -it \
  2. -v $(pwd)/出力:/opt/custodian/出力\
  3. -v $(pwd)/policy.yml:/opt/custodian/policy.yml \
  4. --env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE|^KUBECONFIG") \  
  5. cloudcustodian/c7n 実行 -v --cache-period 0 -s /opt/custodian/output /opt/custodian/policy.yml  

注意: ACCESS および SECRET KEY、DEFAULT_REGION、KUBECONFIG は ENV 変数から取得され、ユーザーはポリシー YAML ファイルで定義されている必要な IAM ロールとポリシーにアクセスできる必要があります。別のオプションとしては、コンテナ内にファイル/ディレクトリをマウントすることです。

Cloud Custodian policy.yaml の説明

Cloud Custodian には、リソース、フィルター、アクションを含むシンプルな YAML ファイルがあります。

  • リソース: Custodian は、それぞれ独自のリソース タイプ (ec2、s3 バケットなど) を持つ複数のクラウド コンピューティング プロバイダー (AWS、GCP、Azure) をターゲットにすることができます。
  • フィルター: フィルターは、Custodian でリソースの特定のサブセットをターゲットにする方法です。特定の日付、タグなどに基づくことができます。カスタム フィルターは、JMESPath 式を使用して記述できます。
  • アクション: アクションは、フィルターに一致するリソースに対して実際に行われる決定です。このアクションは、リソースがクラウド ガバナンス ルールに一致しないというレポートを所有者に送信したり、リソースを削除したりするのと同じくらい簡単です。

アクションとフィルターは、ニーズを最適に表現するために、任意の数のルールと組み合わせることができます。

  1. -名前:- ポリシー
  2. リソース:クラウドリソース名前
  3. 説明:ポリシー説明
  4. フィルター:
  5. - (リソースサブセットを選択するフィルター)
  6. - (その他のフィルター)
  7. アクション:
  8. - (アクション  トリガー フィルタリングされたリソース)
  9. - (その他のアクション)

クラウド管理者向けポリシーの例

公式ドキュメントには AWS ポリシーの例がほとんど記載されていますが、ここではコストを節約し、規制に準拠するためにユーザーが使用できるポリシーをいくつか選択しました。

(1)ebs-snapshots-month-old.yml

組織が直面する最も一般的な問題の 1 つは、環境に 1 年以上存在する古い AMI、スナップショット、ボリュームを削除する複雑さと、さらに費用がかかることです。最終的に、この状況に対処するために複数のカスタム スクリプトを作成する必要がありました。

30 日以上経過したスナップショットを削除する簡単な戦略は次のとおりです。

  1. ポリシー:
  2. -名前: ebs-snapshots - 月- 古い
  3. リソース: ebs-snapshot
  4. フィルター:
  5. - タイプ: 年齢
  6. 日数: 30
  7. op:ge
  8. アクション:
  9. -消去 

以下は、Cloud Custodian ポリシーを実行する方法の例です。

  1. 管理者は-v -s /tmpを実行し出力は/tmp/ebs-snapshots-month-old.yml になります。

Custodian コマンドを実行するたびに、-s オプションを使用して実行されます (例:

/tmp/output/ebs-snapshot-month-old/custodian-run.log) は、policies.name に渡された出力ディレクトリにファイルを作成/追加します。

  • custodian-run.log: すべてのコンソール ログがここに保存されます。
  • resources.json: フィルタリングされたリソース リスト。
  • metadata.json: フィルタリング リソースに関するメタデータ。
  • action-*: アクションが実行されたリソースのリスト。
  • $HOME/.cache/cloud-custodian.cache: すべてのクラウド API 呼び出しの結果がここにキャッシュされます。デフォルト値は 15 分です。

フィルタリングされたリソース レポートを取得するには、次のコマンドを実行します。デフォルトでは CSV 形式でレポートが提供されますが、--format json を渡すことで変更できます。

  1. 管理者レポート -s /tmp/出力/ --format csv ebs-snapshots-month-old.yml  

(2)承認済みami.yml

信頼できる AMI リストに一致しない EC2 の実行を停止します。

  1. ポリシー:
  2. -名前:承認された友人のみ
  3. リソース: ec2
  4. コメント: |
  5. 無効なAMIを使用しているEC2インスタンスの実行を停止する
  6. フィルター:
  7. - "State.Name" : 実行中
  8. - タイプ: 値
  9. キー: イメージID
  10. op:ない- 
  11. 価値:
  12. - ami-04db49c0fb2215364 # Amazon Linux 2 AMI (HVM)
  13. - ami-06a0b4e3b7eb7a300 # Red Hat Enterprise Linux 8 (HVM)
  14. - ami-0b3acf3edf2397475 # SUSE Linux Enterprise Server 15 SP2 (HVM)
  15. - ami-0c1a7f89451184c8b # Ubuntu Server 20.04 LTS (HVM)
  16. アクション:
  17. - 停止

(3) セキュリティグループチェック.yml

もっとよくある問題は、開発者が POC VM の作成時に SSH 経由のすべてのトラフィックを許可する傾向がある場合や、テスト中にポート 22 へのアクセスをすべてのポートに許可するが、そのルールを削除するのを忘れる場合です。次のポリシーは、すべてのグループから SSH アクセスを自動的に削除し、ネットワーク IP のみをセキュリティ グループに追加することで、これらの問題を解決できます。

  1. ポリシー:
  2. -名前: sg-remove-permission
  3. リソース: セキュリティグループ 
  4. フィルター:
  5. -または
  6. - タイプ: 入力
  7. IPプロトコル: "-1"  
  8. ポート: [22]
  9. CIDR: "0.0.0.0/0"  
  10. - タイプ: 入力
  11. IPプロトコル: "-1"  
  12. ポート: [22]
  13. CidrV6: 「::/0」  
  14. アクション:
  15. -type:設定-permissions
  16. 削除イングレス: 一致
  17. -ingress を追加:
  18. - IP権限:
  19. - IPプロトコル: TCP
  20. 出発港: 22
  21. 港まで: 22
  22. Ip範囲:
  23. - 説明: VPN1 アクセス
  24. CIDRIP: 「10.10.0.0/16」  

Kubernetes リソースのサポート

デプロイメント、ポッド、DaemonSet、ボリュームなどの Kubernetes リソースを管理できるようになりました。 Cloud Custodian を使用して記述できるポリシーの例をいくつか示します。

  • POC とタグなしリソースを削除します。
  • k8 リソースのラベルとパッチを更新します。
  • 調査結果に基づいて Webhook が呼び出されます。
  1. kubernetes-削除-poc-resource.yml
  2. ポリシー:
  3. -名前: -poc-namespaceを削除します
  4. リソース: k8s.namespace
  5. フィルター:
  6. - タイプ: 値
  7. キー: 'metadata.name'  
  8. op: 正規表現
  9. 値: '^.*poc.*$'  
  10. アクション:
  11. -消去 
  12.  
  13. -名前: -poc-deploymentsを削除します
  14. リソース: k8s.deployment
  15. フィルター:
  16. - タイプ: 値
  17. キー: 'metadata.name'  
  18. op: 正規表現
  19. 値: '^.*poc.*$'  
  20. アクション:
  21. -消去 

注意: Cloud Custodian Kubernetes リソースはまだ開発中です。

Cloud Custodian と呼べるパターンの種類は何ですか?

  • pull: デフォルトのメソッドは手動で実行できます。 CI/CD ツール cron に追加することをお勧めします。
  • 定期的: クラウド コンピューティング リソース (CloudWatch cron を使用した AWS Lambda など) は、ポリシーに基づいてプロビジョニングされ、スケジュールに従って実行されます。
  • クラウド コンピューティング プロバイダーに基づくカスタム パターン: イベントが一致したときに実行されます。

Cloud Custodian と Jenkins CI の統合

簡単にするために、Cloud Custodian Docker イメージを使用し、認証情報を環境変数として挿入します。

注意: シークレット ファイルには、大文字のキーとデフォルト ゾーンが含まれている必要があります。 Kubernetes の場合、KUBE CONFIG ファイルをコンテナにマウントする必要があります。

  1. エクスポート AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY>
  2. エクスポート AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_ACCESS_KEY>
  3. エクスポート AWS_DEFAULT_REGION=<YOUR_DEFAULT_REGION>
  4.  
  5. パイプライン{
  6. エージェント{ ラベル'worker1' }
  7. ステージ{
  8. ステージ( 'cloudcustodian-non-prod' ){
  9. ステップ{
  10. dir( "非本番環境" ){
  11. withCredentials([file(credentialsId: 'secretfile' , 変数: 'var_secretfile' )])
  12. {
  13. sh '' '
  14. ソース $var_secretfile > /dev/ null 2>&1
  15. 環境 | grep "^AWS\\|^AZURE\\|^GOOGLE\\|^KUBECONFIG" > envfile
  16.  
  17. $(ls | egrep '.yml|.yaml' )内のファイルの場合
  18. する
  19. docker run --rm -t \  
  20. -v $(pwd)/出力:/opt/custodian/出力\
  21. -v $(パスワード):/opt/custodian/ \
  22. --env-file 環境ファイル \  
  23. cloudcustodian/c7n 実行 -v -s /opt/custodian/出力/opt/custodian/$files
  24. 終わり
  25. '' '
  26. }
  27. }
  28. }
  29. }
  30. ステージ( "cloudcustodian-prod" ){
  31. ステップ{
  32. dir( "prod" ){
  33. withCredentials([file(credentialsId: 'secretfile' , 変数: 'var_secretfile' )])
  34. {
  35. sh '' '
  36. ソース $var_secretfile > /dev/ null 2>&1
  37. 環境 | grep "^AWS\\|^AZURE\\|^GOOGLE\\|^KUBECONFIG" > envfile
  38.  
  39. $(ls | egrep '.yml|.yaml' )内のファイルの場合
  40. する
  41. docker run --rm -t \  
  42. -v $(pwd)/出力:/opt/custodian/出力\
  43. -v $(パスワード):/opt/custodian/ \
  44. --env-file 環境ファイル \  
  45. cloudcustodian/c7n 実行 -v -s /opt/custodian/出力/opt/custodian/$files
  46. 終わり
  47. '' '
  48. }
  49. }
  50. }
  51. }
  52. }
  53. }

Jenkins コンソール出力:

ツールと機能

Cloud Custodian には、コミュニティによって開発された追加ツールが多数あります。

(1)マルチリージョン・マルチアカウント対応

c7n-org プラグインを使用すると、複数の AWS、AZURE、GCP アカウントを構成し、それらを並行して実行できます。フラグ --regionall を使用すると、すべてのリージョンで同じポリシーを実行できます。

(2)通知

c7n-mailer プラグインはアラート通知に高い柔軟性を提供し、Webhook、電子メール、キュー サービス、Datadog、Slack、Splunk を使用してアラートを送信できます。

(3)自動リソースタグ付け

c7n_trailcreator スクリプトは、CloudTrail レコードを処理してリソースとその作成者の SQLite DB を作成し、その SQLite DB を使用してリソースに作成者の名前をタグ付けします。

(4)記録と報告

JSON および CSV 形式のレポートを提供します。これらのメトリックはクラウド ネイティブ ログで収集され、美しいダッシュボードを生成することもできます。ログをローカル、S3、または Cloudwatch に保存します。一貫したログ形式により、ポリシーのトラブルシューティングが容易になります。

(5)保管人の試運転

試行では、戦略の運用部分は無視されます。ポリシーによって影響を受けるリソースを示します。実際のコードを実行する前に必ずドライランを実行するのがベストプラクティスです。

(6)カストディアンキャッシュ

いずれかのポリシーが実行されると、クラウドからデータが取得され、ローカルに 15 分間保存されます。キャッシュは API 呼び出しを最小限に抑えるために使用され、--cache-period0 オプションを使用して設定できます。

(7)エディタ統合

Visual Studio Code と統合して、自動コンパイルと提案を行うことができます。

(8)カストディアンモデル

custodian schema コマンドを使用すると、Cloud Custodian で使用できるリソース、操作、フィルターの種類を確認できます。

  1. カストディアンスキーマ#カストディアン利用可能なすべてのリソースを表示します
  2. カストディアンスキーマaws #カストディアン利用可能な aws リソースを表示します
  3. custodian schema aws.ec2 #aws ec2アクションを表示します フィルター
  4. 管理者スキーマaws.ec2.actions #aws ec2 アクションのみを表示します 
  5. 管理者スキーマaws.ec2.actions.stop #ec2停止サンプルポリシーを表示し  スキーマ 

Cloud Custodian は他のツールと比べてどう優れているのでしょうか?

  • 複数のクラウド プラットフォームと Kubernetes にわたるポリシーの記述におけるシンプルさと一貫性。
  • c7n-org を使用したマルチアカウントおよびマルチリージョンのサポート。
  • c7n-mailer を使用して幅広い通知チャネルをサポートします。
  • Custodian 用の Terraform プロバイダーは、Terraform IaaC モジュールに対する Custodian ポリシーの作成と評価をサポートします。
  • Custodian は AWS 構成と深く統合されています。 config でサポートされている任意の構成ルールを展開できます。さらに、AWS カスタム構成ポリシーに合わせて AWS Lambda を自動的に構成することもできます。
  • 必要に応じて、クラウド プロバイダー SDK に従ってすべてのルールをサポートしているため、カスタム ポリシーを Python で実装できます。
  • Cloud Custodian はオープンソースの CNCF サンドボックス プロジェクトです。

クラウド管理者の制限

  • デフォルトのダッシュボードはありません (AWS ネイティブダッシュボードはサポートされていますが、メトリック出力を Elasticsearch/Grafana などに送信してダッシュボードを作成することもできます)。
  • Cloud Custodian は、カスタム レイヤーの事前検証の展開を阻止できません。定期的に、または特定のイベントに基づいてのみ実行できます。
  • Cloud Custodian には組み込みポリシーはありません。ユーザーはすべてのポリシーを自分で記述する必要があります。ただし、参考として使用できる優れたサンプルポリシー (AWS、Azure、GCP) が多数あります。

結論は

Cloud Custodian を使用すると、適切に管理されたクラウド インフラストラクチャを促進するためのポリシーとしてルールと修復を定義できます。また、デプロイメントやポッドなどの Kubernetes リソースを管理するためのポリシーを記述するためにも使用できます。他のクラウドベースのガバナンス ツールと比較して、クラウド プラットフォーム間でポリシーとその一貫性を記述するための非常にシンプルな DSL が提供されます。このようにして、Custodian は摩擦を軽減し、クラウドにおける安全なイノベーションの効率を高めます。

ユーザーは Cloud Custodian を使用して、営業時間外およびクリーンアップ ポリシーを適用することでクラウド コストを最適化できます。また、マルチアカウント/リージョンのサポート、広範な通知ツール (Slack、SMTP、SQS、Datadog、Webhooks) などの多くのプラグインも含まれています。

原題: Cloud Custodian を使用してコードとしてクラウド ガバナンスを実装する、著者: Alok Maurya

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください。

<<:  クラウドを導入する際には、メリットとコストの他に何を考慮すべきでしょうか?

>>:  Curatorのソースコードから群集効果まで

推薦する

payoneer、無料マスターカード + 米国銀行カード + 英国銀行カード + 日本の銀行カード + ユーロ決済カード

Payoneer をご紹介します。中国語では「P カード」と呼ばれ、公式 Web サイトはwww.p...

SAPとパートナーが「インダストリー4.0オープンアライアンス」を設立

2019年のハノーバー産業見本市で、SAPはBeckhoff、Endress+Hauser、Hils...

テスラの中国商標をめぐって謎の「ポソン」と「ミノン」が争う

チャン・バオシェン氏はテスラの幹部との最初の会合について語った。当時、彼はテスラから香港に行くよう招...

米メディア:中国は世界第2位のクラウドコンピューティング市場になった

11月10日、米国のブルッキングス研究所のウェブサイトに「中国4.0 – デジタル化の利益の共有」と...

注意:フレンドリーリンクにも落とし穴がある

友好的なリンクとは、両方の Web サイトの Web マスターが互いのリンクを自分の Web サイト...

Terraform を使用して Azure 仮想マシンを作成する

以前、Terraform を使用して Proxmox 仮想マシンをデプロイする方法についての記事を書...

新興クラウド技術は、伝染病の予防と制御にどのような貢献をしてきましたか?

最近、各地で流行の第2波の状況がますます深刻になり、世間の注目と白熱した議論を集めています。 201...

海底撈は最強のライバルと対峙するのか?ラオワンはIPOを目指す

「火鍋で解決できないことはない。あるなら二度食べればいい。」この言葉は冗談ではあるが、間接的に人々の...

エンタープライズ製品ウェブサイトの SEO ランキング戦略の考え方

インターネットのウェブサイトは数多くありますが、そのルールをまとめると、商品やサービスを販売すること...

キーワードランキングの浮き沈みに冷静に対処しましょう

みなさんこんにちは。私は Dan Ruoqingfeng です。最近は仕事が忙しく、皆さんと経験を共...

サーバーレスか Kubernetes か?この議論は無意味だ。

[編集者注] この記事の著者は、Kubernetes と Serverless のそれぞれの利点と欠...

「Made in China」から「Created in China」へ、SaaS製品もそれに応じて変化する必要がある

崔牛慧の周囲では、彼は「変わり者」だ。 Cui Niu Clubのメンバーのほとんどはソフトウェア業...

SEOマーケターの目にはどちらが人気か:WeChatとWeibo

最近皆さんが書いた記事を読んでいると、WeChatが以前よりも頻繁に言及され、皆さんの注目もより集中...