StackSetsを試す

StackSetsを試してみたメモ。

参考リンク

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

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

管理者アカウントでAWSCloudFormationStackSetAdministrationRoleを作成する。このためのCloudFormationテンプレートがあるので利用する。

このロールは任意のターゲットアカウントのAWSCloudFormationStackSetExecutionRoleにスイッチできるロールである。

AWSTemplateFormatVersion: 2010-09-09
Description: Configure the AWSCloudFormationStackSetAdministrationRole to enable use of AWS CloudFormation StackSets.

Resources:
  AdministrationRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: AWSCloudFormationStackSetAdministrationRole
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: cloudformation.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      Policies:
        - PolicyName: AssumeRole-AWSCloudFormationStackSetExecutionRole
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - sts:AssumeRole
                Resource:
                  - "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole"

管理者アカウント側でスタックを作成する。

aws cloudformation create-stack --stack-name StackSetAdministrationRole-Stack \
  --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetAdministrationRole.yml \
  --capabilities CAPABILITY_NAMED_IAM

ターゲットアカウントで、AWSCloudFormationStackSetExecutionRoleを作成する。こちらもこのためのCloudFormationテンプレートが用意されているので利用する。

AWSTemplateFormatVersion: 2010-09-09
Description: Configure the AWSCloudFormationStackSetExecutionRole to enable use of your account as a target account in AWS CloudFormation StackSets.

Parameters:
  AdministratorAccountId:
    Type: String
    Description: AWS Account Id of the administrator account (the account in which StackSets will be created).
    MaxLength: 12
    MinLength: 12

Resources:
  ExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: AWSCloudFormationStackSetExecutionRole
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              AWS:
                - !Ref AdministratorAccountId
            Action:
              - sts:AssumeRole
      Path: /
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess
aws cloudformation create-stack --stack-name StackSetExecutionRole-Stack \
  --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetExecutionRole.yml \
  --capabilities CAPABILITY_NAMED_IAM \
  --parameters ParameterKey=AdministratorAccountId,ParameterValue=<管理者アカウントのID>

AdministratorAccessを与えているが、アクセス許可をスタックセットで作成するリソースに絞ることが望ましい。

新しいスタックセットの作成

StackSetsのチュートリアルのテンプレートの代わりに、以下のService Catalogのチュートリアルのテンプレートを使ってみる。

CloudFormationコンソールで「StackSets」の作成を実行する。

項目 備考
テンプレートの準備 テンプレートの準備完了
テンプレートソース Amazon S3 URL
Amazon S3 URL https://awsdocs.s3.amazonaws.com/servicecatalog/development-environment.template
StackSet名 LinuxDesktop-StackSets
StackSetの説明 (デフォルト)
KeyName sotosugi
SSHLocation (デフォルト)
InstanceType (デフォルト)

StackSetオプションの設定では、アクセス許可は2種類あり、組織のアクセス許可を使うこともできるようだ。

f:id:sotoiwa:20200407143425p:plain

今回はセルフサービスのアクセス許可を使う。

f:id:sotoiwa:20200407143441p:plain

デプロイオプションの設定で、アカウントとリージョン、同時アカウントの最大数を指定して、内容を確認して実行する。

f:id:sotoiwa:20200407143518p:plain

タックインスタンスが作成できた。

f:id:sotoiwa:20200407143535p:plain