こんにちは、SCSK一重です。
先日、お客様からの問い合わせをきっかけに AWS CloudFormation の StackSets という機能を使ってみましたので、使い方を記載したいと思います。
今回の困りごとは、Management AccountのAWS Organizationsの組織内で新規でメンバーアカウントの発行をした際に、ルートユーザーに紐づけたメールアドレスが管理下にないため初期ログイン時のパスワード変更メールを受信できず、ルートユーザーでログインできないということでした。
ルートユーザーでログイン後IAMユーザーを作成するという運用だったのですが、Management AccountからAWS CloudFormation StackSetsを実行して、メンバーアカウントにルートユーザーでログインすることなくIAMユーザーを作成できないか、検証してみました。
AWS Organizationsの設定
Management AccountのAWS OrganizationsでAWS CloudFormation StackSetsのサービスを有効化する。
AWS CloudFormation StackStesの設定
今回は、アクセス許可はデプロイ時に必要なアクセス許可を自動的に設定してくれる「サービスマネージドアクセス許可」を選択する。
実行テンプレートは準備済みなので、「テンプレートの準備完了」を選択し、「テンプレートファイルのアップロード」からAWS CloudFormationのテンプレートをアップロードする。
今回用意したテンプレートは下記のIAMユーザー作成用のテンプレート。
AWSTemplateFormatVersion: "2010-09-09" Parameters: Password: Description: "IAM user's initial password" Type: String NoEcho: true Resources: AccountAdmin: Type: 'AWS::IAM::User' DeletionPolicy: Delete Properties: UserName: AccountTest LoginProfile: Password: !Ref Password PasswordResetRequired: true
StackSetの名前を入力し、必要であればStackSetsの説明を入力する。
パラメータはアップロードしたテンプレートで定義されているもので、
今回アップロードしたIAMユーザー作成用のテンプレートでは、パスワードの設定をするよう記載している。
必要に応じてタグを設定する。
マネージド型の実行は今回は非アクティブに設定する。
マネージド型の実行をアクティブにすると、競合しない複数のオペレーションを並行して実行することができる。
今回は新しくStackSetsを作るので、「新しいスタックのデプロイ」を選択
デプロイターゲットは、特定のアカウントのみにデプロイを行いたいので「組織単位へのデプロイ」を選択し、デプロイしたいアカウントのOU IDを設定。
指定したOUにある個別のアカウントにデプロイするので「共通集合」を選択し、デプロイ先のアカウント番号を入力する。
自動デプロイを有効にしていると、新しいアカウントがOUに追加された時にStackSetsが自動的にデプロイされるが、今回は特定の一つのアカウントにデプロイしたいので自動デプロイは無効に設定する。
リージョンの指定では、デプロイ先の指定されたリージョンでAWS CloudFormationが実行される。
デプロイオプションは、今回は複数のデプロイを実行しないのでデフォルトのまま設定する。
AWS CloudFormation StackSetsを実行すると、現在何もないメンバーアカウントのAWS CloudFormationのStackが動き、IAMユーザーが作成される。
※実行前のメンバーアカウント
※実行後のメンバーアカウント
Management AccountのAWS CloudFromation StackSetsも成功!
今回は1つのアカウントにしかデプロイしていませんが、AWS CloudFormation StackSetsを利用すると、一度のオペレーションで複数のアカウント、リージョンに対してAWS CloudFormationのスタックが作成できます。
まとめ
AWSのマネジメントコンソール画面が参考にしたサイトから変更されており、リソースを作成するアカウント指定のところがよくわからず、戸惑ってしまいました。
マネジメントコンソールから作業をしていると画面変更がちょくちょくあるので、AWS CLIとかを使って作っていく方がその辺を気にしなくて良いですね。