CloudFormation の IAM アイデンティティベースのポリシーの例
デフォルトでは、ユーザーおよびロールには、CloudFormation リソースを作成または変更するアクセス許可がありません。また、AWS Management Console、AWS Command Line Interface (AWS CLI)、または AWS API を使用してタスクを実行することもできません。IAM 管理者は、リソースで必要なアクションを実行するための権限をユーザーに付与する IAM ポリシーを作成できます。その後、管理者はロールに IAM ポリシーを追加し、ユーザーはロールを引き受けることができます。詳細については、「CloudFormation の IAM アイデンティティベースのポリシーの定義」を参照してください。
以下は、1 つ以上の CloudFormation アクションを使用するためのアクセス許可を、許可または拒否する際に使用できるポリシーステートメントの例です。
特定のテンプレート URL を要求する
次のポリシーは、スタックを作成または更新するときに、https://s3.amazonaws.com/amzn-s3-demo-bucket/test.template
テンプレート URL の使用のみを許可します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:UpdateStack"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudformation:TemplateUrl": [
"https://s3.amazonaws.com/amzn-s3-demo-bucket/test.template
"
]
}
}
}
]
}
すべての CloudFormation インポートオペレーションを拒否する
次のポリシーは、インポートオペレーションを除く、すべての CloudFormation オペレーションの実行を許可します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAllStackOperations",
"Effect": "Allow",
"Action": "cloudformation:*",
"Resource": "*"
},
{
"Sid": "DenyImport",
"Effect": "Deny",
"Action": "cloudformation:*",
"Resource": "*",
"Condition": {
"ForAnyValue:StringLike": {
"cloudformation:ImportResourceTypes": [
"*"
]
}
}
}
]
}
特定のリソースタイプのインポートオペレーションを許可する
次のポリシーは、指定したリソース (以下の例では AWS::S3::Bucket
) に加えて、すべてのスタックオペレーションをインポートオペレーションを許可します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowImport",
"Effect": "Allow",
"Action": "cloudformation:*",
"Resource": "*",
"Condition": {
"ForAllValues:StringEqualsIgnoreCase": {
"cloudformation:ImportResourceTypes": [
"AWS::S3::Bucket"
]
}
}
}
]
}
スタックテンプレートで IAM リソースを拒否する
次のポリシーは、スタックの作成を許可しますが、スタックのテンプレートに IAM サービスのリソースが含まれている場合はリクエストを拒否します。このポリシーでは、ユーザーが ResourceTypes
パラメータ (AWS CLI および API リクエストでのみ使用可能) を指定することも要求されます。このポリシーは、明示的な拒否ステートメントを使用することにより、他のポリシーが追加のアクセス権限を付与している場合、このポリシーが常に有効なままになるようにします (明示的な拒否ステートメントは常に明示的な許可ステートメントより優先されます)。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement":[
{
"Effect" : "Allow",
"Action" : [ "cloudformation:CreateStack" ],
"Resource" : "*"
},
{
"Effect" : "Deny",
"Action" : [ "cloudformation:CreateStack" ],
"Resource" : "*",
"Condition" : {
"ForAnyValue:StringLikeIfExists" : {
"cloudformation:ResourceTypes" : [ "AWS::IAM::*" ]
}
}
},
{
"Effect": "Deny",
"Action" : [ "cloudformation:CreateStack" ],
"Resource": "*",
"Condition": {
"Null": {
"cloudformation:ResourceTypes": "true"
}
}
}
]
}
特定のリソースタイプでスタックの作成を許可する
次のポリシーは、1 つ前の例に似ています。このポリシーは、スタックのテンプレートに IAM サービスのリソースが含まれていない場合に、スタックの作成を許可します。さらに、ユーザーが ResourceTypes
パラメータ (AWS CLI および API リクエストでのみ使用可能) を指定することも要求します。このポリシーはよりシンプルですが、明示的な拒否ステートメントを使用しません。追加のアクセス権限を付与する他のポリシーにより、このポリシーがオーバーライドされる可能性があります。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement":[
{
"Effect" : "Allow",
"Action" : [ "cloudformation:CreateStack" ],
"Resource" : "*",
"Condition" : {
"ForAllValues:StringNotLikeIfExists" : {
"cloudformation:ResourceTypes" : [ "AWS::IAM::*" ]
},
"Null":{
"cloudformation:ResourceTypes": "false"
}
}
}
]
}
リソース変更 API アクションに基づいてアクセスを制御する
次のポリシーは、リソース変異 API アクションの名前でアクセスをフィルターすることを許可します。これは、IAM ユーザーがスタックまたはスタックセットのタグを追加または削除するために使用できる API を制御するために使用されます。タグの追加または削除に使用されるオペレーションは、条件キーの値として追加する必要があります。次のポリシーは、変更オペレーション CreateStack
に対する TagResource
および UntagResource
アクセス許可を付与します。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "CreateActionConditionPolicyForTagUntagResources",
"Effect": "Allow",
"Action": [
"cloudformation:TagResource",
"cloudformation:UntagResource"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudformation:CreateAction": [
"CreateStack"
]
}
}
}]
}
リージョンとリソースタイプに基づいてスタックセットのオペレーションを制限する
次のポリシーは、サービスマネージド型のスタックセットのアクセス許可を付与します。このポリシーを持つユーザーは、Amazon S3 リソースタイプ (AWS::S3::*
) または AWS::SES::ConfigurationSet
リソースタイプを含むテンプレートを含むスタックセットに対してのみオペレーションを実行できます。ID が 123456789012
である組織管理アカウントにサインインした場合、ユーザーはまた、ID がou-1fsfsrsdsfrewr
である OU をターゲットとするスタックセットに対してのみオペレーションを実行でき、さらに、ID が 987654321012
である AWS アカウント をターゲットとする、ID が stack-set-id
であるスタックセットに対してのみオペレーションを実行できます。
スタックセットテンプレートに、ポリシーで指定されているリソース以外のリソースタイプが含まれている場合、またはデプロイターゲットが、対応する管理アカウントとスタックセットのポリシーで指定されているもの以外の OU またはアカウント ID である場合、スタックセットオペレーションは失敗します。
これらのポリシー制限は、スタックセットオペレーションが us-east-1
、us-west-2
、または eu-west-2
AWS リージョン をターゲットとする場合にのみ適用されます。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:*"
],
"Resource": [
"arn:aws:cloudformation:*:*:stackset/*",
"arn:aws:cloudformation:*:*:type/resource/AWS-S3
-*",
"arn:aws:cloudformation:us-west-2::type/resource/AWS-SES-ConfigurationSet
",
"arn:aws:cloudformation:*:111122223333
:stackset-target/*/ou-1fsfsrsdsfrewr
",
"arn:aws:cloudformation:*:111122223333
:stackset-target/stack-set-id
/444455556666
"
],
"Condition": {
"ForAllValues:StringEqualsIgnoreCase": {
"cloudformation:TargetRegion": [
"us-east-1
",
"us-west-2
",
"eu-west-1
"
]
}
}
}
]
}
すべての IaC ジェネレーターオペレーションを許可する
次のポリシーは、IaC ジェネレーターリソースのスキャンとテンプレート管理に関連する CloudFormation アクションへのアクセスを許可します。最初のステートメントは、リソーススキャンの記述、一覧表示、開始を許可します。また、IaC ジェネレーターがリソースと使用可能なリソースタイプに関する情報を取得できるようにする、必要な追加のアクセス許可 (cloudformation:GetResource
、cloudformation:ListResources
、cloudformation:ListTypes
) へのアクセスも許可します。2 番目のステートメントは、生成されたテンプレートを作成、削除、記述、一覧表示、更新するための完全なアクセス許可を付与します。
また、IaC ジェネレーターでリソースをスキャンするすべてのユーザーに、ターゲットの AWS サービスの読み取りアクセス許可も付与する必要があります。詳細については、「リソースのスキャンに必要な IAM アクセス許可」を参照してください。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ResourceScanningOperations",
"Effect":"Allow",
"Action":[
"cloudformation:DescribeResourceScan",
"cloudformation:GetResource",
"cloudformation:ListResources",
"cloudformation:ListResourceScanRelatedResources",
"cloudformation:ListResourceScanResources",
"cloudformation:ListResourceScans",
"cloudformation:ListTypes",
"cloudformation:StartResourceScan"
],
"Resource":"*"
},
{
"Sid":"TemplateGeneration",
"Effect":"Allow",
"Action":[
"cloudformation:CreateGeneratedTemplate",
"cloudformation:DeleteGeneratedTemplate",
"cloudformation:DescribeGeneratedTemplate",
"cloudformation:GetResource",
"cloudformation:GetGeneratedTemplate",
"cloudformation:ListGeneratedTemplates",
"cloudformation:UpdateGeneratedTemplate"
],
"Resource":"*"
}
]
}