
cloud-custodian v0.9.52.0
クラウドセキュリティ、コスト最適化、ガバナンスのためのルールエンジン。リソースをクエリ、フィルタ、アクションするポリシーをYAMLで記述するDSL。
Cloud Custodian (c7n)
Cloud Custodian(c7n とも呼ばれる)は、パブリッククラウドのアカウントとリソースを管理するためのルールエンジンです。ユーザーはポリシーを定義して、安全かつコスト最適化された、適切に管理されたクラウドインフラストラクチャを実現できます。組織が抱える多くのアドホックなスクリプトを、統一されたメトリクスとレポート機能を備えた軽量で柔軟なツールに統合します。
Custodian は、セキュリティポリシー(暗号化やアクセス要件など)へのリアルタイムのコンプライアンス確保、タグポリシー、未使用リソースのガベージコレクションや時間外のリソース管理によるコスト管理を通じて、AWS、Azure、GCP 環境を管理するために使用できます。
Custodian はまた、Infrastructure as Code 資産に対してポリシーを実行し、開発者のワークステーション上や CI パイプライン内で直接フィードバックを提供することもサポートしています。
Custodian のポリシーはシンプルな YAML 設定ファイルで記述され、ユーザーはリソースタイプ(EC2、ASG、Redshift、CosmosDB、PubSub Topic)に対するポリシーを指定でき、フィルターとアクションの語彙から構築されます。
各プロバイダーのクラウドネイティブなサーバーレス機能と統合し、組み込みのプロビジョニングによってポリシーをリアルタイムに適用できます。また、サーバー上のシンプルな cron ジョブとして実行し、既存の大規模なフリートに対して実行することもできます。
Cloud Custodian は CNCF のインキュベーティングプロジェクトであり、数百人のコントリビューターからなるコミュニティによって主導されています。
機能
- パブリッククラウドのサービスとリソースを包括的にサポートし、ポリシーを構築するための豊富なアクションとフィルターのライブラリを備えています。
- Infrastructure as Code(terraform など)資産に対してポリシーを実行できます。
- ネストされたブール条件によるリソースへの任意のフィルタリングをサポートします。
- 任意のポリシーをドライランして、何が行われるかを確認できます。
- サーバーレス関数とイベントソース(AWS CloudWatchEvents、AWS Config Rules、Azure EventGrid、GCP AuditLog & Pub/Sub など)を自動的にプロビジョニングします。
- ポリシーに一致したリソースに関するクラウドプロバイダーネイティブのメトリクス出力。
- ポリシーに一致したリソースをクラウドネイティブのオブジェクトストレージへ構造化出力。
- API 呼び出しを最小化するインテリジェントなキャッシュ利用。
- マルチアカウント/サブスクリプション/プロジェクトでの利用をサポートします。
- 実戦で実証済み - 非常に大規模なクラウド環境の本番環境で稼働しています。
リンク
クイックインストール
Custodian は c7n プレフィックスを持つ一連のパッケージとして pypi で公開されており、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 ツールは、docker への透過的なフロントエンドを提供する Go バイナリで、通常の custodian CLI をミラーリングしつつ、ボリュームのマウントを自動的に処理します。
詳細についてはドキュメントを参照するか、gitter でお問い合わせください。
クラウドプロバイダー固有のヘルプ
AWS、Azure、GCP の具体的な手順については、該当するはじめにのページをご覧ください。
参加する
- GitHub - (このページ)
- Slack - ヘルプが必要な場合や Custodian への貢献に興味がある場合のリアルタイムチャット!
- Gitter - (旧リアルタイムチャット、移行予定です)
- Linen.dev - Linen でのディスカッションをフォロー
- メーリングリスト - プロジェクトのメーリングリスト。重要なプロジェクトのお知らせを受け取るにはここで購読してください。質問もお気軽にどうぞ
- Reddit - サブレディット
- StackOverflow - 開発者向け Q&A サイト。
cloudcustodianタグを監視しています - YouTube チャンネル - チュートリアルやその他の有用な情報、ミーティング動画の追加に取り組んでいます
コミュニティリソース
あらゆるスキルレベルのすべてのユーザーと開発者に開かれた定期的なコミュニティミーティングを開催しています。 メーリングリストに参加すると、ミーティングの招待が自動的に送信されます。 ミーティングへの参加に関するより技術的な情報については、以下のメモをご覧ください。