search
LoginSignup
0

posted at

updated at

一番簡単なStackSets(CloudFormation)

はじめに

今まで避けていたCloudFormationのStackSetsを、勉強のつもりで触ってみました。
簡単なサンプルでやり方を記事にしますので、同じような方の参考になれば幸いです。

記事概要

  • 子AWSアカウントに対して、親AWSアカウントから"StackSets"を使って、CloudFormationを実行
    • 子AWSアカウントと親AWSアカウントは、同じでも可能
      • 今回は別にしました
    • AWS Organizationsを使わない方法になります

今回は以下のCloudFormationを実行してIAMユーザを作ります。

createIAMUser.yaml
AWSTemplateFormatVersion: 2010-09-09

Resources:
  AWSUser:
    Type: AWS::IAM::User
    Properties:
      UserName: 'You'

参考ページ

手順

子AWSアカウントにIAMロール作成

子のAWSアカウント内に、CloudFormationを実行させるIAMロールを作成します。

creatChildRsource.yaml
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'
  • リソースが作成できる権限を与えてください
    • 今回はAdministratorAccessを付与しています
  • パラメータには、親AWSアカウントのIDを入力してください

親AWSアカウントにIAMロール作成

親のAWSアカウント内に、StackSetsを実行するIAMロールを作成します。

creatParentrRsource.yaml
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'
  • Resourceで、先ほど子AWSアカウントに作成したIAMロールが対象になっているか確認

親AWSアカウントで、StackSets実行

ここからはコンソールを操作します。

CloudFormationの画面で、StackSetの作成をクリック。
image.png

IAM実行ロール名は、先ほど作成したロールを指定。
テンプレートファイルは本記事の最初に示した、ユーザを作成するcreateIAMUser.yamlを指定。
image.png

StackSetの名前を指定して次へ。
image.png

実行指定は競合する場合に考慮が必要な設定のようですが、今回はIAMユーザを1つ作るだけなので、非アクティブにしました。
image.png

今回は新しくスタックを作るので、新しいスタックのデプロイを選択。
デプロイ先に、子AWSアカウントIDをカンマ区切りで指定します。
image.png

リージョンは東京を1つ指定し、デプロイオプションはデフォルトのままにしました。
image.png

確認画面で設定を確認します。
IAMユーザを作成するので、いつもの以下のチェックが表示されました。
image.png

作成を開始すると、オペレーションタブに進捗が表示されます。
image.png

成功すると、スタックインスタンスタブに内容が表示されます。
image.png

子AWSアカウントで、IAMユーザを作成するスタックが作られていました。
image.png

ちゃんとIAMユーザも作られていました。
image.png

StackSetsで、テンプレートを変更

続けて、テンプレートのyamlファイルを変更してみます。ユーザ名を以下のように変更しました。

createIAMUser-neo.yaml
AWSTemplateFormatVersion: 2010-09-09

Resources:
  AWSUser:
    Type: AWS::IAM::User
    Properties:
      UserName: 'Yuu-Takasaki'

先程作成したStackSetを選択し、アクションから "StackSetの詳細を編集" を選択。
image.png

その後はほぼ作成時と同様の画面になります。テンプレートファイルは変更後のものを指定します。
image.png

アカウントとリージョンは空になっていました。作成時と同じ設定にします。
image.png

実行を開始すると、オペレーションにUPDATEで進捗が表示されます。スタックインスタンスのタブは完了後も特に変わりありませんでした。
image.png

子AWSアカウントの対象のスタックを見ると、UPDATEとなっていました。
image.png

IAMユーザ名も新しいものになっていました。
image.png

削除手順

作成した各種リソースを削除する場合は以下の順序になります。

  1. スタックの削除

    • スタックが残っている状態でStackSetを削除はできず、エラーになりました。 image.png
  2. StackSetの削除

  3. 親/子のアカウントで作成したIAMロールの削除

スタックの削除方法

スタックの削除は、アクションから選択します。
image.png

こちらでもデプロイオプションが空なので、削除する内容を指定します。
image.png

デプロイオプションに、"スタックを保持"というのがあります。これをONにすると、このStackSetから管理外になるだけで、子AWSアカウントのスタックはそのまま残ります。
今回はOFFにして作成したIAMユーザも削除します。
image.png

実行すると、オペレーションにDELETEが追加されます。
image.png

成功すると、スタックインスタンスは空になります。
image.png

StackSetsの削除方法

続けて、アクションから Stacksetの削除 を選択します。
image.png

確認ポップアップが出てきますので、削除します。
image.png

これでStackSetは削除されます。
あとは作成したIAMロールを削除してください。

おわりに

今回はIAMユーザを作るだけのStackSetsを記事にしました。
親子関係があったり、Organizationsを使うと思い込んでいたりで避けていた機能でしたが、親子それぞれにIAMロールを作り、GUIだけでできたため、かなり簡単だった印象です。
私と同様避けていた方は、簡単ですので触ってみてください。

ただパラメータを使うと厄介な点ありましたので、それについていずれ記事にしたいと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0