
cloud-custodian v0.9.52.0
クラウドセキュリティ、コスト最適化、ガバナンスのためのルールエンジン。リソースをクエリ、フィルタ、アクションするポリシーをYAMLで記述するDSL。
Cloud Custodian (c7n)
Cloud Custodian(c7n としても知られる)は、パブリッククラウドのアカウントとリソースを管理するためのルールエンジンです。ユーザーはポリシーを定義することで、セキュアかつコスト最適化された、適切に管理されたクラウドインフラストラクチャを実現できます。これは、組織が持つ多くのアドホックなスクリプトを、統合されたメトリクスとレポーティングを備えた軽量で柔軟なツールにまとめます。
Custodian は、AWS、Azure、GCP 環境を管理するために使用できます。暗号化やアクセス要件などのセキュリティポリシー、タグポリシーへのリアルタイムのコンプライアンスを確保し、未使用リソースのガベージコレクションや時間外リソース管理によるコスト管理を実現します。
Custodian はまた、インフラストラクチャ・アズ・コード (IaC) アセットに対してポリシーを実行し、開発者のワークステーションや CI パイプライン内で直接フィードバックを提供することもサポートしています。
Custodian ポリシーはシンプルな YAML 設定ファイルで記述され、ユーザーはリソースタイプ(EC2、ASG、Redshift、CosmosDB、PubSub Topic)に対してポリシーを指定でき、フィルターとアクションのボキャブラリから構築されます。
各プロバイダーのクラウドネイティブなサーバーレス機能と統合され、組み込みのプロビジョニングによるポリシーのリアルタイム適用を実現します。または、サーバー上のシンプルな cron ジョブとして実行し、既存の大規模なフリートに対して実行することもできます。
Cloud Custodian は CNCF のインキュベーションプロジェクトであり、数百人のコントリビューターからなるコミュニティによって運営されています。
機能
- パブリッククラウドのサービスとリソースに対する包括的なサポートと、ポリシーを構築するための豊富なアクションとフィルターのライブラリ。
- インフラストラクチャ・アズ・コード (Terraform など) アセットに対してポリシーを実行。
- ネストされたブール条件を使用したリソースの任意のフィルタリングをサポート。
- 任意のポリシーのドライランを実行して、何が行われるかを事前確認。
- サーバーレス関数とイベントソース(AWS CloudWatchEvents、AWS Config Rules、Azure EventGrid、GCP AuditLog & Pub/Sub など)を自動プロビジョニング。
- ポリシーに一致したリソースに関するクラウドプロバイダー固有のメトリクス出力。
- ポリシーに一致したリソースのクラウドネイティブなオブジェクトストレージへの構造化出力。
- API 呼び出しを最小限に抑えるインテリジェントなキャッシュ使用。
- マルチアカウント/サブスクリプション/プロジェクトの使用をサポート。
- 実戦でテスト済み - 非常に大規模なクラウド環境で本番運用されています。
リンク
クイックインストール
Custodian は pypi に c7n プレフィックスを持つ一連のパッケージとして公開されており、Docker イメージとしても利用可能です。
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
使い方
Cloud Custodian (c7n) を使用する最初のステップは、実行したいポリシーを含む YAML ファイルを作成することです。各ポリシーは、ポリシーが実行されるリソースタイプ、このポリシーの影響を受けるリソースを制御する一連のフィルター、マッチしたリソースに対してポリシーが実行するアクション、そしてポリシーの実行方法を制御するモードを指定します。
最良のスタートガイドは、クラウドプロバイダー別のチュートリアルです。
簡単なウォークスルーとして、以下に AWS リソース向けのサンプルポリシーをいくつか示します。
- S3 バケットでクロスアカウントアクセスが有効になっていないことを強制します。
- 暗号化されていない EBS ボリュームを持つ新しく起動された EC2 インスタンスを終了します。
- 次のタグ "Environment"、"AppId"、および "OwnerContact" または "DeptID" のいずれかを持たない EC2 インスタンスにタグを付け、4 日後に停止するようにマークします。
policies:
- name: s3-cross-account
description: |
Checks S3 for buckets with cross-account access and
removes the cross-account access.
resource: aws.s3
region: us-east-1
filters:
- type: cross-account
actions:
- type: remove-statements
statement_ids: matched
- name: ec2-require-non-public-and-encrypted-volumes
resource: aws.ec2
description: |
Provision a lambda and cloud watch event target
that looks at all new instances and terminates those with
unencrypted volumes.
mode:
type: cloudtrail
role: CloudCustodian-QuickStart
events:
- RunInstances
filters:
- type: ebs
key: Encrypted
value: false
actions:
- terminate
- name: tag-compliance
resource: aws.ec2
description: |
Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.
filters:
- State.Name: running
- "tag:Environment": absent
- "tag:AppId": absent
- or:
- "tag:OwnerContact": absent
- "tag:DeptID": absent
actions:
- type: mark-for-op
op: stop
days: 4
以下のコマンドでサンプルポリシーを使って Cloud Custodian の検証、テスト、実行ができます。
# Validate the configuration (note this happens by default on run)
$ custodian validate policy.yml
# Dryrun on the policies (no actions executed) to see what resources
# match each policy.
$ custodian run --dryrun -s out policy.yml
# Run the policy
$ custodian run -s out policy.yml
Cloud Custodian は Docker 経由でも実行できます。
# Download the image
$ docker pull cloudcustodian/c7n
$ mkdir output
# Run the policy
#
# This will run the policy using only the environment variables for authentication
$ docker run -it \
-v $(pwd)/output:/home/custodian/output \
-v $(pwd)/policy.yml:/home/custodian/policy.yml \
--env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE") \
cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml
# Run the policy (using AWS's generated credentials from STS)
#
# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to
# the docker container to support authentication to AWS using the same credentials
# credentials that are available to the local user if authenticating with STS.
$ docker run -it \
-v $(pwd)/output:/home/custodian/output \
-v $(pwd)/policy.yml:/home/custodian/policy.yml \
-v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \
-v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \
--env-file <(env | grep "^AWS") \
cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml
custodian cask tool は、Docker の透過的なフロントエンドを提供する Go バイナリで、通常の custodian CLI をミラーリングしながら、ボリュームのマウントを自動的に処理します。
詳細についてはドキュメントを参照するか、Gitter でお問い合わせください。
クラウドプロバイダー別のヘルプ
AWS、Azure、GCP の具体的な手順については、該当するスタートガイドのページをご覧ください。
参加する
- GitHub - (このページ)
- Slack - 助けを求めている場合や Custodian への貢献に興味がある場合のリアルタイムチャット!
- Gitter - (以前のリアルタイムチャット。今後は移行予定)
- Linen.dev - Linen での議論をフォロー
- メーリングリスト - プロジェクトのメーリングリスト。重要なプロジェクトのお知らせについてはこちらを購読してください。質問もお気軽にどうぞ。
- Reddit - 私たちのサブレディット
- StackOverflow - 開発者向け Q&A サイト。
cloudcustodianタグを監視しています。 - YouTubeチャンネル - チュートリアルやその他の役立つ情報、ミーティングビデオの追加に取り組んでいます。
コミュニティリソース
私たちは、あらゆるスキルレベルのユーザーと開発者に開かれた定期的なコミュニティミーティングを開催しています。メーリングリストに参加すると、自動的にミーティング招待状が送信されます。ミーティングへの参加に関する技術的な詳細については、以下の注意事項を参照してください。
- コミュニティミーティングビデオ
- コミュニティミーティングノートアーカイブ
- 今後のコミュニティイベント
- Cloud Custodian 年次レポート 2021 - プロジェクトの健全性を概説する CNCF に提供された年次健全性チェック
- Ada Logics 第三者セキュリティ監査
追加ツール
Custodian プロジェクトは、以下のツール群も開発およびメンテナンスしています: https://github.com/cloud-custodian/cloud-custodian/tree/main/tools
-
Org: マルチアカウントポリシー実行。
-
ShiftLeft: シフトレフト~Terraform などの IaC アセットに対してポリシーを実行。
-
PolicyStream: 論理的なポリシー変更のストリームとしての Git 履歴。
-
Salactus: S3 スキャンのスケールアウト。
-
Mailer: ユーザーに通知メッセージを送信するためのリファレンス実装。
-
Trail Creator: CloudTrail からのリソース作成者の遡及的タグ付け。
-
TrailDB: CloudTrail のインデックス作成とダッシュボード用の時系列生成。
-
LogExporter: CloudWatch ログの S3 へのエクスポート。
-
Cask: Docker 経由での簡単な custodian 実行。
-
Guardian: 自動マルチアカウント GuardDuty 設定。
-
Omni SSM: EC2 Systems Manager 自動化。
-
Mugc: AWS 環境にデプロイされた Cloud Custodian Lambda ポリシーをクリーンアップするためのユーティリティ。
貢献
https://cloudcustodian.io/docs/contribute.html を参照してください。
セキュリティ
Cloud Custodian でセキュリティ関連の問題、脆弱性、または潜在的な脆弱性を発見した場合は、脆弱性の詳細を Cloud Custodian セキュリティチーム ([email protected]) にお知らせください。報告を受け付けたことを確認する確認メールを送信し、問題を肯定的または否定的に特定した場合に追加のメールを送信します。
行動規範
このプロジェクトは CNCF の行動規範 に準拠しています。参加することで、この規範を遵守することが期待されます。