CloudFormation の ID ベースポリシーの例 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CloudFormation の ID ベースポリシーの例

このセクションでは、CloudFormation のアクセス許可を付与および拒否する方法を示す ID ベースポリシーの例を紹介します。これらのポリシー例を使用して、最小特権の原則に準拠した独自のポリシーの設計を開始できます。

CloudFormation に固有のアクションと条件のリストについては、「Actions, resources, and condition keys for AWS CloudFormation」と「AWS Identity and Access Management で AWS CloudFormation アクセスを制御する」を参照してください。条件と共に使用するリソースタイプのリストについては、「AWS リソースおよびプロパティタイプのリファレンス」を参照してください。

ビューアクセスを許可

ビューアクセスは、CloudFormation への最小特権タイプのアクセスです。この種のポリシーは、AWS アカウントですべての CloudFormation スタックの表示を必要とする IAM プリンシパルに適しています。以下のサンプルポリシーは、アカウント内の CloudFormation スタックの詳細を表示するアクセス許可を付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources" ], "Resource": "*" } ] }

テンプレートに基づくスタック作成を許可

以下のサンプルポリシーは、IAM プリンシパルが特定の Amazon Simple Storage Service (Amazon S3) バケットに保存されている CloudFormation テンプレートのみを使用してスタックを作成できるようにします。バケット名は my-CFN-templates です。このバケットに承認済みのテンプレートをアップロードできます。ポリシーの cloudformation:TemplateUrl 条件キーは IAM プリンシパルが他のテンプレートを使用してスタックを作成するのを防ぎます。

重要

IAM プリンシパルにはこの S3 バケットへの読み取り専用アクセスを許可します。これにより、IAM プリンシパルが承認済みのテンプレートを追加、削除、変更するのを防止できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:CreateStack" ], "Resource": "*", "Condition": { "StringLike": { "cloudformation:TemplateUrl": "https:// my-CFN-templates.s3.amazonaws.com/*" } } } ] }

スタックの更新または削除を拒否する

ビジネスクリティカルな AWS リソースをプロビジョニングする特定の CloudFormation スタックを保護するために、その特定のスタックに対する更新と削除のアクションを制限できます。指定された少数の IAM プリンシパルに対してのみこれらのアクションを許可し、環境内の他の IAM プリンシパルに対しては拒否できます。以下のポリシーステートメントは、特定の AWS リージョンおよび AWS アカウントの特定の CloudFormation スタックを更新または削除するためのアクセス許可を拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/<stack_ID>" } ] }

このポリシーステートメントは、us-east-1 AWS リージョンと 123456789012 AWS アカウントにある MyProductionStack CloudFormation スタックの更新または削除のためのアクセス許可を拒否します。スタック ID は CloudFormation コンソールで確認できます。以下は、ユースケースに合わせてこのステートメントの Resource 要素を変更する方法の例です。

  • このポリシーの Resource 要素に複数の CloudFormation スタック ID を追加できます。

  • arn:aws:cloudformation:us-east-1:123456789012:stack/* を使用して、IAM プリンシパルが us-east-1 AWS リージョンおよび 123456789012 アカウントにあるスタックを更新または削除するのを防止できます。

重要な手順として、このステートメントをどのポリシーに含めるかの決定があります。このステートメントは以下のポリシーに追加できます。

  • IAM プリンシパルにアタッチされた ID ベースのポリシー – このポリシーにステートメントを含めると、特定の IAM プリンシパルが特定の CloudFormation スタックを作成または削除しないよう制限できます。

  • IAM プリンシパルにアタッチされたアクセス許可の境界 — このポリシーにステートメントを含めると、アクセス許可ガードレールを作成できます。これにより、複数の IAM プリンシパルが特定の CloudFormation スタックを作成または削除しないよう制限できますが、環境内のすべてのプリンシパルを制限できるわけではありません。

  • アカウント、組織単位、または組織にアタッチされた SCP – このポリシーにステートメントを含めると、アクセス許可ガードレールを作成できます。これにより、ターゲットアカウント、組織単位、または組織のすべての IAM プリンシパルが特定の CloudFormation スタックを作成または削除しないよう制限できます。

    ただし、少なくとも 1 つの IAM プリンシパル (権限プリンシパル) に CloudFormation スタックの更新または削除を許可しないと、変更が必要な場合でも、このスタックによってプロビジョニングされたリソースを変更することはできません。ユーザーまたは開発パイプライン (推奨) が、この特権プリンシパルを引き受けることができます。この制限を SCP としてデプロイする場合は、代わりに以下のポリシーステートメントを推奨します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/<stack_ID>", "Condition": { "ArnNotLike": { "aws:PrincipalARN": [ "<ARN of the allowed privilege IAM principal>" ] } } } ] }

    このステートメントでは、Condition 要素によって SCP から除外される IAM プリンシパルが定義されます。このステートメントは、IAM プリンシパルの ARN が Condition 要素の ARN と一致しない限り、IAM プリンシパルが CloudFormation スタックを更新または削除するためのアクセス許可を拒否します。aws:PrincipalARN 条件キーはリストを受け入れられるため、環境の必要に応じて、複数の IAM プリンシパルを制限から除外できます。CloudFormation リソースの変更を防ぐ同様の SCP については、GitHub にて「SCP-CLOUDFORMATION-1」を参照してください。