AWS CloudFormation
ユーザーガイド (API バージョン 2010-05-15)

前提条件: スタックセットオペレーションのアクセス権限の付与

スタックセットでは複数のアカウントでスタックオペレーションが実行されるため、最初のスタックセットの作成を開始する前に、AWS で定義されているアクセス権限が必要です。必要なアクセス権限を設定するには:

  1. どの AWS アカウントが管理者アカウントであるかを判断します。

    スタックセットはこの管理者アカウントで作成されます。ターゲットアカウントは、スタックセットに属する個別のスタックを作成するアカウントです。

  2. スタックセットのアクセス権限を作成する方法を決定します。

    最も単純な (そして最も許容性の高い) アクセス許可設定は、管理者アカウントのすべてのユーザーとグループに、そのアカウントで管理されているすべてのスタックセットを作成および更新するアクセス権限を付与することです。きめ細かな制御が必要な場合は、以下を指定するアクセス権限を設定できます。

    • ターゲットアカウントを持つスタックセットオペレーションを実行できるユーザーとグループ。

    • ユーザとグループがスタックセットに含めることができるリソース。

    • 特定のユーザーおよびグループが実行できるスタックセットオペレーション。

  3. 管理者とターゲットアカウントに必要な IAM サービスロールを作成して、必要なアクセス権限を定義します。

    重要

    管理者アカウントのロールは AWSCloudFormationStackSetAdministrationRole という名前にする必要があります。各ターゲットアカウントのロールは AWSCloudFormationStackSetExecutionRole という名前にする必要があります。

スタックセットオペレーションの基本アクセス権限の設定

最も単純な (そして最も許容性の高い) アクセス許可設定は、管理者アカウントのすべてのユーザーとグループに、そのアカウントで管理されているすべてのスタックセットを作成および更新するアクセス権限を付与することです。これを行うには、管理者とすべてのターゲットアカウントの IAM サービスロールを作成します。管理者アカウントへのアクセス権限を持つユーザーは、ターゲットアカウントの任意のスタックセットを作成、更新、または削除するアクセス権限を持ちます。

管理者アカウントとターゲットアカウントは、アカウント間の信頼関係を作成するサービスロールを設定するとともに、テンプレートに記述されているリソースを作成および管理するためのアクセス権限をターゲットアカウントに付与する必要があります。

このようにアクセス権限を作成すると、スタックセットを作成または更新してもユーザーが管理者ロールを渡すことはありません。


                管理者アカウントとターゲットアカウントの間に信頼関係を設定します。管理者アカウントのユーザーは誰でもスタックセットを作成できます。

すべてのターゲットアカウントでスタックセットオペレーションを実行するために、管理者アカウントのすべてのユーザーのアクセス権限を設定する

  1. 管理者アカウントで、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" } ] }
  2. 各ターゲットアカウントで、管理者アカウントを信頼する 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 が機能するための最低限のアクセス許可を持つポリシーステートメントを示します。AWS CloudFormation 以外のサービスのリソースを使用するターゲットアカウントでスタックを作成するには、それらのサービスアクションおよびリソースを、各ターゲットアカウントの [AWSCloudFormationStackSetExecutionRole] ポリシーステートメントに追加する必要があります。

    { "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 は、上記の要件に従い、このロールを使用してスタックを更新します。

ユーザーおよびグループが特定のターゲットアカウントでスタックセットオペレーションを実行できるアクセス権限を設定する

  1. スタックセットごとに、ターゲットアカウントの 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" } ] }
  2. ターゲットアカウントごとに、このアカウントで使用するカスタマイズされた管理者ロールを信頼する 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" } ] }
  3. スタックセットオペレーション実行時に、カスタマイズされた管理者ロールを渡すことをユーザーに許可します。

    特定のスタックセットを作成または更新する際、カスタマイズされた適切な管理者ロールを渡すことができるように、IAM アクセス権限ポリシーをユーザーまたはグループにアタッチします。詳細については、「AWS サービスにロールを渡すアクセス許可をユーザーに許可する」を参照してください。以下の例では、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 は、スタックセットでオペレーションを実行する権限がユーザーに付与されている限り、スタックセットに以前関連付けられていた、カスタマイズされた実行ロールを使用して更新を行います。

ユーザーとグループが特定のスタックセットに含めることができるリソースのアクセス権限を設定する

  1. スタックセットを作成する対象のアカウントで、ユーザーとグループがスタックセットに含めることができるようにするサービスとリソースにアクセス権限を付与するカスタマイズされた実行ロールを作成します。

    次の例では、スタックセットの最小限のアクセス権限に加えて、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" } ] }
  2. スタックセットオペレーションのアドバンスドアクセス権限オプションの設定ターゲットアカウントへのアクセスを制御するアクセス権限を設定する」で説明されているように、カスタマイズされた管理者ロールを管理者アカウントで作成します。カスタマイズされた管理者ロールと、使用するカスタマイズされた実行ロールとの間に信頼関係を含めます。

    次の例には、ターゲットアカウントに対して定義された 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 ユーザーガイド の「AWS CloudFormation のアクション、リソース、条件キー」を参照してください。