セルフマネージド型のアクセス許可を付与する
サービスマネージド型のスタックセットを作成するために必要なアクセス許可を設定するには、「AWS Organizations で信頼されたアクセスを有効にする」を参照してください。
セルフマネージド型のアクセス許可を持つスタックセットを作成する前に、各アカウントに IAM ロールを作成して、管理者アカウントとターゲットアカウントの間に信頼関係を確立する必要があります。
-
どの AWS アカウントが管理者アカウントであるかを判断します。
スタックセットはこの管理者アカウントで作成されます。ターゲットアカウントは、スタックセットに属する個別のスタックを作成するアカウントです。
-
スタックセットのアクセス許可を構成する方法を決定します。
最も単純な (そして最も許容性の高い) アクセス許可設定は、管理者アカウントのすべてのユーザーとグループに、そのアカウントで管理されているすべてのスタックセットを作成および更新するアクセス許可を付与することです。きめ細かな制御が必要な場合は、以下を指定するアクセス許可を設定できます。
-
ターゲットアカウントを持つスタックセットオペレーションを実行できるユーザーとグループ。
-
ユーザーとグループがスタックセットに含めることができるリソース。
-
特定のユーザーおよびグループが実行できるスタックセットオペレーション。
-
-
管理者とターゲットアカウントに必要な IAM サービスロールを作成して、必要なアクセス許可を定義します。
重要 管理者アカウントのロールは AWSCloudFormationStackSetAdministrationRole という名前にする必要があります。各ターゲットアカウントのロールは AWSCloudFormationStackSetExecutionRole という名前にする必要があります。
スタックセットオペレーションの基本アクセス許可の設定
最も単純な (そして最も許容性の高い) アクセス許可設定は、管理者アカウントのすべてのユーザーとグループに、そのアカウントで管理されているすべてのスタックセットを作成および更新するアクセス許可を付与することです。これを行うには、管理者とすべてのターゲットアカウントの IAM サービスロールを作成します。管理者アカウントへのアクセス許可を持つユーザーは、ターゲットアカウントの任意のスタックを作成、更新、または削除するアクセス許可を持ちます。
管理者アカウントとターゲットアカウントは、アカウント間の信頼関係を作成するサービスロールを設定するとともに、テンプレートに記述されているリソースを作成および管理するためのアクセス許可をターゲットアカウントに付与する必要があります。
このようにアクセス許可を作成すると、スタックセットを作成または更新してもユーザーが管理者ロールを渡すことはありません。

すべてのターゲットアカウントでスタックセットオペレーションを実行するために、管理者アカウントのすべてのユーザーのアクセス許可を設定する
-
管理者アカウントで、AWSCloudFormationStackSetAdministrationRole という名前の IAM ロールを作成します。ロールにはこの正確な名前が必要です。そのためには、以下の AWS CloudFormation テンプレートからスタックを作成します。このテンプレートは https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetAdministrationRole.yml
でオンラインで入手できます。このテンプレートで作成されたロールは、管理者アカウントで次のポリシーを有効にします。 { "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole" ], "Effect": "Allow" } ] }
次の信頼関係は、前のテンプレートによって作成されています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
デフォルトで無効になっているリージョンにあるターゲットアカウントにスタックインスタンスをデプロイするには、そのリージョンのリージョンサービスプリンシパルも含める必要があることに注意してください。デフォルトで無効になっているリージョンごとに、独自のリージョンサービスプリンシパルがあります。
エンドポイント一覧を含む、リージョンのエンドポイントの詳細については、AWS 全般のリファレンスガイドの Regional endpoints を参照してください。
次の例には、デフォルトで無効になっているアジアパシフィック (香港) リージョンのリージョンサービスプリンシパル (
cloudformation.ap-east-1.amazonaws.com
) が含まれています。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "cloudformation.amazonaws.com", "cloudformation.ap-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
詳細については、「スタックセットオペレーションの前提条件」を参照してください。
-
各ターゲットアカウントで、管理者アカウントを信頼する AWSCloudFormationStackSetExecutionRole という名前のサービスロールを作成します。ロールにはこの正確な名前が必要です。そのためには、以下の AWS CloudFormation テンプレートからスタックを作成します。このテンプレートは https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetExecutionRole.yml
でオンラインで入手できます。このテンプレートを使用すると、ターゲットアカウントと信頼関係を持っている必要がある管理者アカウントの名前を指定するよう求められます。 重要 このテンプレートは管理者アクセス権を付与することに注意してください。テンプレートを使用してターゲットアカウント実行ロールを作成した後、ポリシーステートメントのアクセス許可を、StackSets を使用して作成するリソースの種類にスコープする必要があります。
ターゲットアカウントサービスロールは、AWS CloudFormation テンプレートで指定されたすべてのオペレーションを実行するアクセス許可を必要とします。たとえば、テンプレートが S3 バケットを作成している場合、S3 の新しいオブジェクトを作成するためのアクセス許可が必要です。ターゲットアカウントは常に完全な AWS CloudFormation アクセス許可を必要とします。これには、スタックを作成、更新、削除、および記述するためのアクセス許可が含まれます。このテンプレートで作成されたロールは、ターゲットアカウントで次のポリシーを有効にします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
StackSets を機能させるには、各ターゲットアカウントの
AWSCloudFormationStackSetExecutionRole
ポリシーステートメントに S3、Amazon SNS サービスアクション、およびリソースを追加する必要があります。サービス管理スタックは、CloudFormation サービスアカウントの Amazon SNS トピックにアクセスするために必要なアクセス許可を自動的に処理します。StackSets は、このアクセス許可を使用して、ターゲットアカウントと管理者アカウントのスタックインスタンスの状態を通知します。CloudFormation 以外のサービスのリソースを使用するターゲットアカウントでスタックを作成するには、それらのサービスアクションおよびリソースを、各ターゲットアカウントの
AWSCloudFormationStackSetExecutionRole
ポリシーステートメントに追加する必要があります。以下の例に、StackSets に必要なアクセス許可を持つポリシーステートメントを示します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "s3:*", "sns:*" ], "Resource": "*" } ] }
次の信頼関係は、テンプレートによって作成されています。管理者アカウントの ID は、
admin_account_id
として表示されます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
admin_account_id
:root" }, "Action": "sts:AssumeRole" } ] }既存のターゲットアカウントの実行ロールの信頼関係を設定して、管理者アカウントで特定のロールを信頼できます。管理者アカウントでロールを削除し、代わりとなる新しいロールを作成する場合、新しい管理者アカウントロールでターゲットアカウントの信頼関係を設定する必要があります。これは、前の例の
admin_account_id
によって表されます。
スタックセットオペレーションのアドバンストアクセス許可オプションの設定
ユーザーとグループが 1 つの管理者アカウントを使用して作成しているスタックセットに対してきめ細かな制御が必要な場合は、IAM ロールを使用して次の項目を指定できます。
-
ターゲットアカウントを持つスタックセットオペレーションを実行できるユーザーとグループ。
-
ユーザーとグループがスタックセットに含めることができるリソース。
-
特定のユーザーおよびグループが実行できるスタックセットオペレーション。
ターゲットアカウントへのアクセスを制御するアクセス許可を設定する
カスタマイズされた管理者ロールを使用して、どのユーザーおよびグループがどのターゲットアカウントでスタックセットオペレーションを実行できるかを制御します。スタックセットオペレーションを実行する管理者アカウントのユーザーとターゲットアカウントを制御します。これを行うには、管理者アカウント自体に AWSCloudFormationStackSetAdministrationRole サービスロールを作成するのではなく、各ターゲットアカウントと特定のカスタマイズされた管理ロールの間に信頼関係を作成します。これで、特定のターゲットアカウントでスタックセットオペレーションを実行する際、特定のユーザーとグループが、カスタマイズされた管理者ロールを使用できるようになります。
たとえば、ロール A とロール B を管理者アカウント内に作成できます。ターゲットアカウント 1 ~ 8 にアクセスする許可を ロール A に付与することができます。ターゲットアカウント 9 ~ 16 にアクセスする許可を ロール B に付与することができます。

必要なアクセス許可を設定するには、カスタマイズされた管理者ロールの定義、ターゲットアカウントのサービスロールの作成、ユーザーへのアクセス許可の付与を行い、スタックセットオペレーションを実行するときに、カスタマイズされた管理者ロールを渡す必要があります。
必要な許可を設定したときの一般的な動作は次のとおりです。スタックセットを作成する際、ユーザーは、カスタマイズされた管理者を指定する必要があります。ユーザーには、AWS CloudFormation にロールを渡すためのアクセス権限が必要です。さらに、カスタマイズされた管理者ロールには、スタックセットに指定されたターゲットアカウントとの信頼関係が必要です。AWS CloudFormation ではスタックセットを作成し、カスタマイズされた管理者ロールをこのスタックセットに関連付けます。スタックセットを更新する場合、ユーザーはカスタマイズされた管理者ロールを明示的に指定する必要があります (このスタックセットで以前に使用したのと同じカスタマイズされた管理者ロールである場合でも)。AWS CloudFormation は、上記の要件に従い、このロールを使用してスタックを更新します。
ユーザーおよびグループが特定のターゲットアカウントでスタックセットオペレーションを実行できるアクセス許可を設定する
-
スタックセットごとに、ターゲットアカウントの AWSCloudFormationStackSetExecutionRole サービスロールを引き受けるアクセス許可を持つカスタマイズされた管理者ロールを作成します。
次のアクセス許可ポリシーに従って、カスタム名を指定してIAM サービスロールを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::
target_account_id
:role/AWSCloudFormationStackSetExecutionRole" ], "Effect": "Allow" } ] }または、すべてのターゲットアカウントを指定する場合は、以下のアクセス許可ポリシーを使用します。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::
*
:role/AWSCloudFormationStackSetExecutionRole" ], "Effect": "Allow" } ] }信頼関係を定義するロールを作成する際、次の信頼ポリシーを指定する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
デフォルトで無効になっているリージョンにあるターゲットアカウントにスタックインスタンスをデプロイするには、そのリージョンのリージョンサービスプリンシパルも含める必要があることに注意してください。デフォルトで無効になっているリージョンごとに、独自のリージョンサービスプリンシパルがあります。
エンドポイント一覧を含む、リージョンのエンドポイントの詳細については、AWS 全般のリファレンスガイドの Regional endpoints を参照してください。
次の例には、デフォルトで無効になっているアジアパシフィック (香港) リージョンのリージョンサービスプリンシパル (
cloudformation.ap-east-1.amazonaws.com
) が含まれています。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "cloudformation.amazonaws.com", "cloudformation.ap-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
詳細については、「スタックセットオペレーションの前提条件」を参照してください。
-
ターゲットアカウントごとに、このアカウントで使用するカスタマイズされた管理者ロールを信頼する AWSCloudFormationStackSetExecutionRole という名前のサービスロールを作成します。
重要 ポリシーステートメントのアクセス許可を、StackSets を使用して作成中のリソースのタイプに絞り込む必要があります。
ターゲットアカウントサービスロールは、AWS CloudFormation テンプレートで指定されたすべてのオペレーションを実行するアクセス許可を必要とします。たとえば、テンプレートが S3 バケットを作成している場合、S3 の新しいオブジェクトを作成するためのアクセス許可が必要です。ターゲットアカウントは常に完全な AWS CloudFormation アクセス許可を必要とします。これには、スタックを作成、更新、削除、および記述するためのアクセス許可が含まれます。
以下の例は、StackSets が機能するための最低限のアクセス許可を持つポリシーステートメントを示します。AWS CloudFormation 以外のサービスのリソースを使用するターゲットアカウントでスタックを作成するには、それらのサービスアクションおよびリソースを、各ターゲットアカウントの AWSCloudFormationStackSetExecutionRole アクセス許可ポリシーステートメントに追加する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "s3:*", "sns:*" ], "Resource": "*" } ] }
信頼関係を定義するロールを作成する際、次の信頼ポリシーを指定する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
admin_account_id
:role/customized_admin_role
" }, "Action": "sts:AssumeRole" } ] } -
スタックセットオペレーション実行時に、カスタマイズされた管理者ロールを渡すことをユーザーに許可します。
特定のスタックセットを作成または更新する際、カスタマイズされた適切な管理者ロールを渡すことができるように、IAM アクセス許可ポリシーをユーザーまたはグループにアタッチします。詳細については、Granting a user permissions to pass a role to an AWS service を参照してください。以下の例では、
customized_admin_role
は、ユーザーが渡す必要のある管理者ロールを意味します。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/
customized_admin_role
" }] }
スタックリソースインクルードを制御するアクセス許可を設定する
カスタマイズされた実行ロールを使用して、ユーザーおよびグループがスタックセットに含めることができるスタックリソースを制御します。たとえば、作成したスタックセットに Amazon S3 関連のリソースのみを含めることができるグループを設定し、別のチームには DynamoDB リソースのみを含めることができます。これを行うには、各グループのカスタマイズされた管理者ロールと各リソースセットのカスタマイズされた実行ロールとの間に信頼関係を作成します。カスタマイズされた実行ロールは、どのスタックリソースをスタックセットに含めることができるかを定義します。カスタマイズされた管理者ロールは管理者アカウントにあり、カスタマイズされた実行ロールは定義されたリソースを使用してスタックセットを作成する各ターゲットアカウントにあります。これで、スタックセットオペレーションを実行する際、特定のユーザーとグループが、カスタマイズされた管理者ロールを使用できるようになります。
たとえば、カスタマイズされた管理者ロール A、B、C を管理者アカウントで作成できます。ロール A を使用するアクセス許可を持つユーザーおよびグループは、カスタマイズされた実行ロール X に明確にリストされているスタックリソースを含むスタックセットを作成できますが、ロール Y または Z のリソースや実行ロールに含まれていないリソースは含まれません。

スタックセットを更新する場合、ユーザーはカスタマイズされた管理者ロールを明示的に指定する必要があります (このスタックセットで以前に使用したのと同じカスタマイズされた管理者ロールである場合でも)。ユーザーがスタックセットに対してオペレーションを実行するアクセス許可を持っている場合、AWS CloudFormation は指定のカスタマイズされた管理者ロールを使用して更新を実行します。
同様に、ユーザーはカスタマイズされた実行ロールを指定することもできます。カスタマイズされた実行ロールを指定した場合、AWS CloudFormation は、上記の要件に従って、スタックを更新するロールを使用します。ユーザーがカスタマイズされた実行ロールを指定しない場合、AWS CloudFormation は、スタックセットでオペレーションを実行する許可がユーザーに付与されている限り、スタックセットに以前関連付けられていた、カスタマイズされた実行ロールを使用して更新を行います。
ユーザーとグループが特定のスタックセットに含めることができるリソースのアクセス許可を設定する
-
スタックセットを作成する対象のアカウントで、ユーザーとグループがスタックセットに含めることができるようにするサービスとリソースにアクセス許可を付与するカスタマイズされた実行ロールを作成します。
次の例では、スタックセットの最小限のアクセス許可に加えて、DynamoDB テーブルを作成するアクセス許可を付与しています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "s3:*", "sns:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "dynamoDb:createTable" ], "Resource": "*" } ] }
信頼関係を定義するロールを作成する際、次の信頼ポリシーを指定する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
admin_account_id
:role/customized_admin_role
" }, "Action": "sts:AssumeRole" } ] } -
「スタックセットオペレーションのアドバンストアクセス許可オプションの設定 ターゲットアカウントへのアクセスを制御するアクセス許可を設定する」で説明されているように、カスタマイズされた管理者ロールを管理者アカウントで作成します。カスタマイズされた管理者ロールと、使用するカスタマイズされた実行ロールとの間に信頼関係を含めます。
次の例には、ターゲットアカウントに対して定義された AWSCloudFormationStackSetExecutionRole と、カスタマイズされた実行ロールの両方の
sts::AssumeRole
ポリシーが含まれます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487980684000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole", "arn:aws:iam::*:role/
custom_execution_role
" ] } ] }
特定のスタックセットオペレーションのアクセス許可を設定する
さらに、スタックセットの作成、更新、削除、インスタンスのスタックなど、特定のスタックセットオペレーションを実行できるユーザーとグループのアクセス許可を設定できます。詳細については、IAM ユーザーガイド にある Actions, resources, and condition keys for AWS CloudFormation を参照してください。