CloudFormation のアイデンティティベースのポリシーの例 - AWS 規範ガイダンス

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

CloudFormation のアイデンティティベースのポリシーの例

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

CloudFormation 固有のアクションと条件のリストについては、「 および 条件のアクション、リソース、および条件キー AWS CloudFormation」を参照してください。 AWS CloudFormation条件で使用するリソースタイプのリストについては、AWS 「リソースタイプとプロパティタイプのリファレンス」を参照してください。

ビューアクセスを許可する

ビューアクセスは、CloudFormation へのアクセスの最小特権タイプです。この種のポリシーは、 内のすべての CloudFormation スタックを表示する IAM プリンシパルに適している場合があります AWS アカウント。次のサンプルポリシーは、アカウント内の 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 プリンシパルが他のテンプレートを使用してスタックを作成できないようにします。

重要

この S3 バケットへの読み取り専用アクセスを IAM プリンシパルに許可します。これにより、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 リージョン および の特定の CloudFormation スタックを更新または削除するためのアクセス許可を拒否します AWS アカウント。

{ "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 リージョン および にある MyProductionStack CloudFormation スタックを更新または削除するためのアクセス許可を拒否します123456789012 AWS アカウント。CloudFormation コンソールでスタック ID を表示できます。以下は、ユースケースに合わせてこのステートメントの Resource要素を変更する方法の例です。

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

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

重要なステップは、このステートメントを含めるポリシーを決定することです。このステートメントを次のポリシーに追加できます。

  • IAM プリンシパルにアタッチされたアイデンティティベースのポリシー – このポリシーに ステートメントを含めると、特定の 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 と一致しない限り、CloudFormation スタックを更新または削除するための IAM プリンシパルアクセス許可を拒否します。aws:PrincipalARN 条件キーはリストを受け入れます。つまり、環境に応じて、複数の IAM プリンシパルを制限から除外できます。CloudFormation リソースの変更を防ぐ同様の SCP については、SCP-CLOUDFORMATION-1 (GitHub)」を参照してください。