翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CodePipeline と Amazon Bedrock を使用して AWS Organizations ポリシーをコードとして管理する
Andre Cavalcante と Mariana Pessoa de Queiroz、Amazon Web Services
概要
で認可ポリシーを使用して AWS Organizations 、メンバーアカウントのプリンシパルとリソースのアクセスを一元的に設定および管理できます。サービスコントロールポリシー (SCPs、組織内の AWS Identity and Access Management (IAM) ロールとユーザーに使用可能なアクセス許可の最大数を定義します。リソースコントロールポリシー (RCPs、組織内のリソースで使用できる最大アクセス許可を定義します。
このパターンは、継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインを通じてデプロイするコードとしてのインフラストラクチャ (IaC) として SCPs と RCPs を管理するのに役立ちます。 AWS CloudFormation または Hashicorp Terraform を使用してこれらのポリシーを管理することで、複数の認可ポリシーの構築と維持に関連する負担を軽減できます。
このパターンには、次の機能が含まれています。
マニフェストファイル (
scp-management.jsonおよび ) を使用して、認可ポリシーを作成、削除、更新しますrcp-management.json。ポリシーの代わりにガードレールを使用します。マニフェストファイルでガードレールとそのターゲットを定義します。
AWS CodeBuild と を使用するパイプラインは AWS CodePipeline、マニフェストファイルのガードレールをマージして最適化します。マニフェストファイル内の各ステートメントについて、パイプラインはガードレールを単一の SCP または RCP に結合し、定義されたターゲットに適用します。
AWS Organizations はターゲットにポリシーを適用します。ターゲットは AWS アカウント、、組織単位 (OU)、環境 (
environments.jsonファイルで定義したアカウントのグループまたは OUs)、またはAWS タグを共有するアカウントのグループです。Amazon Bedrock はパイプラインログを読み取り、すべてのポリシー変更を要約します。
パイプラインには手動承認が必要です。承認者は、Amazon Bedrock が準備したエグゼクティブサマリーを確認できるため、変更を理解するのに役立ちます。
前提条件と制限
前提条件
組織として管理 AWS アカウント されている複数の AWS Organizations。詳細については、「組織の作成」を参照してください。
SCP および RCP 機能は で有効になっています AWS Organizations。詳細については、「ポリシータイプの有効化」を参照してください。
Terraform バージョン 1.9.8 以降がインストールされています
。 このソリューションを Terraform パイプライン経由でデプロイしない場合、Terraform 状態ファイルは、ポリシー管理パイプラインをデプロイ AWS アカウント する https://developer.hashicorp.com/terraform/language/backend/s3
の Amazon Simple Storage Service (Amazon S3) バケットに保存する必要があります。 Python バージョン 3.13.3 以降がインストールされています
。
制約事項
このパターンを使用して、この CI/CD パイプラインの外部で作成された SCPs または RCPsを管理することはできません。ただし、パイプラインを使用して既存のポリシーを再作成することはできます。詳細については、このパターンの追加情報「追加情報」セクションの「既存のポリシーをパイプラインに移行する」を参照してください。
各アカウントのアカウント、OUs、およびポリシーの数には、 のクォータとサービス制限が適用されます AWS Organizations。
このパターンは、バックアップポリシー AWS Organizations、タグポリシー、チャットアプリケーションポリシー、宣言ポリシーなど、 の管理ポリシーの設定には使用できません。
アーキテクチャ
次の図は、ポリシー管理パイプラインとその関連リソースのワークフローを示しています。

この図表は、次のワークフローを示しています:
ユーザーは、リモートリポジトリのメインブランチにある
scp-management.jsonまたはrcp-management.jsonマニフェストファイルに変更をコミットします。mainブランチへの変更により、パイプラインが開始されます AWS CodePipeline。CodePipeline は
Validate-PlanCodeBuild プロジェクトを開始します。このプロジェクトでは、リモートリポジトリの Python スクリプトを使用して、ポリシーとポリシーマニフェストファイルを検証します。この CodeBuild プロジェクトは以下を実行します。SCP マニフェストファイルと RCP マニフェストファイルに一意のステートメント IDs () が含まれていることを確認します
Sid。scp-policy-processor/main.pyおよび Pythonrcp-policy-processor/main.pyスクリプトを使用して、ガードレールフォルダ内のガードレールを単一の RCP または SCP ポリシーに連結します。同じ 、Resource、Actionおよび を持つガードレールを組み合わせますCondition。AWS Identity and Access Management Access Analyzer を使用して、最終的な最適化されたポリシーを検証します。検出結果がある場合、パイプラインは停止します。
Terraform がリソースの作成に使用する ファイル
scps.jsonとrcps.jsonファイルを作成します。terraform planコマンドを実行して、Terraform 実行プランを作成します。
(オプション)
Validate-PlanCodeBuild プロジェクトは、bedrock-prompt/prompt.pyスクリプトを使用して Amazon Bedrock にプロンプトを送信します。プロンプトはbedrock-prompt/prompt.txtファイルで定義します。Amazon Bedrock は Anthropic Claude Sonnet 3.5 を使用して、Terraform ログと Python ログを分析して、提案された変更の概要を生成します。CodePipeline は、Amazon Simple Notification Service (Amazon SNS) トピックを使用して、変更を確認する必要があることを承認者に通知します。Amazon Bedrock が変更概要を生成した場合、通知にはこの概要が含まれます。
ポリシー承認者は CodePipeline でアクションを承認します。Amazon Bedrock が変更概要を生成した場合、承認者は承認する前に CodePipeline で概要を確認できます。
CodePipeline は
ApplyCodeBuild プロジェクトを開始します。このプロジェクトでは、Terraform を使用して RCP と SCP の変更を適用します AWS Organizations。
このアーキテクチャに関連付けられた IaC テンプレートは、ポリシー管理パイプラインをサポートする以下のリソースもデプロイします。
scp-policy-processor/main.pyや などの CodePipeline アーティファクトとスクリプトを保存するための Amazon S3 バケットbedrock-prompt/prompt.pyこのソリューションによって作成されたリソースを暗号化する AWS Key Management Service (AWS KMS) キー
ツール
AWS のサービス
Amazon Bedrock はフルマネージド AI サービスであり、統合された API を通じて多くの高性能基盤モデルを使用できます。
AWS CodeBuild は、ソースコードのコンパイル、ユニットテストの実行、デプロイ可能なアーティファクトの生成に役立つフルマネージド型のビルドサービスです。
AWS CodePipeline は、ソフトウェアリリースのさまざまなステージを迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
AWS Organizations は、作成して一元管理する AWS アカウント 組織に複数の を統合するのに役立つアカウント管理サービスです。
AWS SDK for Python (Boto3)
は、Python アプリケーション、ライブラリ、またはスクリプトを と統合するのに役立つソフトウェア開発キットです AWS のサービス。 Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。
その他のツール
HashiCorp Terraform
は、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングおよび管理するための IaC ツールです。
コードリポジトリ
このパターンのコードは、 organizations-policy-pipelinesample-repositoryフォルダに含まれるキーファイルです。
environmentsフォルダには、 環境のリストenvironments.jsonが含まれています。環境はターゲットのグループであり、 AWS アカウント IDsまたは組織単位 (OUsを含めることができます。rcp-managementフォルダで、次の操作を行います。guardrailsフォルダには、RCPs の個々のガードレールが含まれています。policiesフォルダには個々の RCPsが含まれます。rcp-management.jsonマニフェストファイルは、RCP ガードレール、完全な RCPs、および関連するターゲットを管理するのに役立ちます。
scp-managementフォルダで、次の操作を行います。guardrailsフォルダには、SCPs の個々のガードレールが含まれています。policiesフォルダには個々の SCPsが含まれます。scp-management.jsonマニフェストファイルは、SCP ガードレール、完全な SCPs、および関連するターゲットを管理するのに役立ちます。
utilsフォルダには、パイプラインを通じて管理できるように、現在の SCPsと RCPs を移行するのに役立つスクリプトが含まれています。詳細については、このパターンの「追加情報」セクションを参照してください。
ベストプラクティス
パイプラインを設定する前に、 AWS Organizations クォータの制限に達していないことを確認することをお勧めします。
AWS Organizations 管理アカウントは、そのアカウントで実行する必要があるタスクにのみ使用することをお勧めします。詳細については、「 管理アカウントのベストプラクティス」を参照してください。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
リポジトリを作成します。 | セキュリティオペレーションチームがポリシーを管理するリポジトリを作成します。 AWS CodeConnections がサポートするサードパーティーのリポジトリプロバイダーのいずれかを使用します。 | DevOps エンジニア |
ポリシー管理を委任します。 | パイプラインをデプロイするメンバーアカウントに AWS Organizations ポリシーの管理を委任します。手順については、「 を使用してリソースベースの委任ポリシーを作成する AWS Organizations」を参照してください。サンプルポリシーについては、このパターンの追加情報「追加情報」セクションの「リソースベースの委任ポリシーのサンプル」を参照してください。 | AWS 管理者 |
(オプション) 基盤モデルを有効にします。 | ポリシーの変更の概要を生成する場合は、パイプラインをデプロイ AWS アカウント する の Amazon Bedrock で Anthropic Claude 3.5 Sonnet 基盤モデルへのアクセスを有効にします。手順については、「Amazon Bedrock 基盤モデルへのアクセスを追加または削除する」を参照してください。 | AWS 全般 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
リポジトリをクローン作成します。 | 次のコマンドを入力して、GitHub から organizations-policy-pipeline
| DevOps エンジニア |
デプロイ方法を定義します。 |
| DevOps エンジニア |
パイプラインをデプロイします。 |
| DevOps エンジニア、Terraform |
リモートリポジトリを接続します。 | 前のステップで、Terraform はサードパーティーリポジトリへの CodeConnections 接続を作成しました。AWS デベロッパーツールコンソール | AWS DevOps |
Amazon SNS トピックを購読します。 | Terraform が Amazon SNS トピックを作成しました。エンドポイントをトピックにサブスクライブし、サブスクリプションを確認して、承認者がパイプラインで保留中の承認アクションに関する通知を受信できるようにします。手順については、Amazon SNSトピックへのサブスクリプションの作成」を参照してください。 | AWS 全般 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
リモートリポジトリを入力します。 | クローンされたリポジトリから、 | DevOps エンジニア |
環境を定義します。 |
| DevOps エンジニア |
ガードレールを定義します。 |
| DevOps エンジニア |
ポリシーを定義します。 |
| DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
マニフェストファイルを設定します。 |
| DevOps エンジニア |
パイプラインを開始します。 |
| DevOps エンジニア |
変更を承認します。 |
| AWS 全般、ポリシー承認者 |
デプロイを検証します。 |
| AWS 全般 |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
パイプラインの |
|
パイプラインの | ガードレールまたはポリシー定義にエラーがある場合、「検証と計画フェーズ中の IAM Access Analyzer の検出結果」メッセージがパイプライン出力に表示されます。このパターンでは、IAM Access Analyzer を使用して最終ポリシーを検証します。以下の操作を実行します。
|
関連リソース
JSON ポリシー要素リファレンス (IAM ドキュメント)
リソースコントロールポリシー (AWS Organizations ドキュメント)
サービスコントロールポリシー (AWS Organizations ドキュメント)
Amazon Bedrock 基盤モデルへのアクセスを追加または削除する (Amazon Bedrock ドキュメント)
CodePipeline の承認アクションを承認または拒否する (CodePipeline ドキュメント)
追加情報
リソースベースの委任ポリシーの例
以下は、 のリソースベースの委任ポリシーの例です AWS Organizations。これにより、委任された管理アカウントが組織の SCPs と RCPsを管理できるようになります。次のサンプルポリシーで、 をポリシー管理パイプラインをデプロイするアカウントの ID <MEMBER_ACCOUNT_ID>に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegationToAudit", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<MEMBER_ACCOUNT_ID>:root" }, "Action": [ "organizations:ListTargetsForPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:AttachPolicy", "organizations:DetachPolicy", "organizations:DisablePolicyType", "organizations:EnablePolicyType", "organizations:UpdatePolicy", "organizations:DescribeEffectivePolicy", "organizations:DescribePolicy", "organizations:DescribeResourcePolicy" ], "Resource": "*" } ] }
既存のポリシーをパイプラインに移行する
このパイプラインを介して移行および管理したい既存の SCPs または RCPs がある場合は、コードリポジトリの sample-repository/utilsフォルダにある Python スクリプトを使用できます。これらのスクリプトには以下が含まれます。
check-if-scp-exists-in-env.py– このスクリプトは、指定したポリシーが、environments.jsonファイルで定義した特定の環境のターゲットに適用されるかどうかをチェックします。次のコマンドを入力して、このスクリプトを実行します。python3 check-if-scp-exists-in-env.py \ --policy-type <POLICY_TYPE> \ --policy-name <POLICY_NAME> \ --env-id <ENV_ID>このコマンドで以下を置き換えます。
<POLICY_TYPE>はscpまたはrcp<POLICY_NAME>は SCP または RCP の名前です<ENV_ID>は、environments.jsonファイルで定義した環境の ID です。
create-environments.py– このスクリプトは、環境内の現在の SCPs と RCPs に基づいて environment.json ファイルを作成します。を通じてデプロイされたポリシーは除外されます AWS Control Tower。次のコマンドを入力してこのスクリプトを実行します。ここで、<POLICY_TYPE>はscpまたは ですrcp。python create-environments.py --policy-type <POLICY_TYPE>verify-policies-capacity.py– このスクリプトは、定義した各環境をチェックして、各 AWS Organizations ポリシー関連のクォータに残っている容量を決定します。ファイルで をチェックする環境を定義しますenvironments.json。次のコマンドを入力してこのスクリプトを実行します。ここで、<POLICY_TYPE>はscpまたは ですrcp。python verify-policies-capacity.py --policy-type <POLICY_TYPE>