今日はこれを試します
https://github.com/aws-samples/aws-account-vending-machine
これは何
AWS Landing Zone のキーコンポーネントの一つ ※1 です
組織が成長し、 AWS Organizations で複数のアカウントを持つようになると、アカウントを新規作成するときにいろいろと設定することがあって面倒になります。
Ansible 等のサーバプロビジョニングツールで解決したいことと同じような悩みが、AWSのアカウントに対しても生じるわけです。
開発チームに引き渡す前に、セキュリティとかガバナンスとかログ集約とか色々な組織のニーズに沿うように仕立てておきたいとかね。しかしだからといってそれを人の温かみのある手動でポチポチなんてやってられないのですよ。そこで今回のようなツールが欲しくなってまいります
新規メンバーアカウントを作るだけなら これ でも出来るんですが、作っただけで後は温かい手動ポチポチでは自動化になりませんので、それとこれとどう違うのかこのサンプルで見ていきましょう
事前準備
以下が必要です
- AWS マスターアカウント
- (いちばん偉いやつ)
- 可能であればマスターアカウント自体、サンドボックスとして作ってそこでやりましょう。万一の事故防止ため
- AVM セットアップ用の権限(後述のAccountAdministrator用, 例: IAM ロール、グループ等)
- 今回は
arn:aws:iam::010010011111:group/Administrator
にします - この group に属する IAM ユーザーで以降の作業をするとやりやすいでしょう
- 今回は
- Organizations の有効化
- メールアドレス
- (新規作成メンバーアカウント用として。例:
aws-avm-my-new-account-001@yourcompany.co.jp
) - 既に他のAWSアカウントで使用されていないか注意しましょう。重複していると B) がもしかしたらうまく行かないかも
- (新規作成メンバーアカウント用として。例:
Step by Step walkthrough
さてあとは 書いてあること の通りに進めるだけなのですが、折角なので日本語で解説してゆきましょう
A) AVM のセットアップ
- マスターアカウントへのログインと所定リージョンの選定
- ここでは
Ohio (us-east-2)
にします(以下のうちいずれか)- Ohio (us-east-2)
- Oregon (us-west-2)
- Ireland (eu-west-1)
- Singapore (ap-southeast-1)
-
Launch Stack
ボタン押下
-
こちら に
Launch Stack
ボタンがあります。クリックしましょう
- Create Stack: 次へ
- Specify stack details:
- AccountAdministrator -
- ここでは
arn:aws:iam::010010011111:group/Administrator
を指定
- ここでは
- SourceBucket - デフォルト
- SourceTemplate - デフォルト
- AccountAdministrator -
- Configure stack options: 次へ
- Review page,
I acknowledge ..
云々にチェック ->Create Stack
- 10秒ほどで CREATE COMPLETE とアウトプットが得られます。もしうまく行かない時は前工程を疑いましょう
- Output セクションに AccountLambda という情報が来ていますのでこれを控える
ここまでで AVM のセットアップ完了
B) AVM の起動と新規アカウントの発行
前工程で AVM 自体のセットアップを行いました。その AVM を動かします
-
前工程で使用した IAM エンティティでマネコンへログインします。 今回の場合
arn:aws:iam::010010011111:group/Administrator
に属している任意の IAM ユーザーでログインしている前提で進めます -
プロダクトリストから AVM >
LAUNCH PRODUCT
-
Product Version page: 任意の名前(今回は
my-new-account-001
) を入力し、バージョンを選択 -
Click NEXT
-
Parameters page:
- MasterLambdaArn: 先の
MasterLambdaArn
で控えた値 - AccountEmail: 事前準備で用意した任意のメルアド
- OrganizationalUnitName: あってもなくても良い。お好きに
- AccountName: Enter an account name
- ここでは同じく
my-new-account-001
にします
- ここでは同じく
- StackRegion: お好きに
- SourceBucket: デフォルト
- BaselineTemplate: デフォルト
- MasterLambdaArn: 先の
-
Click NEXT.
-
On the TagOptions page, click NEXT.
-
On the Notifications page, click NEXT.
-
On the Review page
LAUNCH
- 少し時間がかかります(5~10分くらい)。
AVAILABLE
になるまでコーヒーでも飲みながら待ちましょう - もしうまく行かない時は前工程を疑いましょう(メルアド重複、 Organizations の有効化等)
- 少し時間がかかります(5~10分くらい)。
-
こうなれば成功
https://github.com/aws-samples/aws-account-vending-machine/blob/master/resources/images/output.png
- これで次工程 C) に必要なインプットが揃いました
- ※ ここから C) を省略する場合でも最低限、ここで払いだされた IAM ユーザのログイン情報は安全なものに直ちに変更しましょう
- パスワードがそのまんまですので放置すると危険です
- 次工程 C) の 2 までやればひとまず安心(初回ログインで変更を強制される)
C) 発行した新規アカウントへログインしてみる
- 前工程 B) で新規作成した AWS アカウントにログイン
- リージョンは前工程
StackRegion
で指定したリージョンです
- リージョンは前工程
- ログイン情報入力
- ログインURL、ユーザ名は前工程 B) のアウトプットとして示されています。パスワードは 参照先の github を参照。初回ログインにつき変更を促されます
- Service Catalog で pre-configured された AWS Service Catalog products を閲覧できる
- VPC で 全リージョンの default VPCs が消えているのを確認
- VPC の新規作成が所定の方法では許可されていないのを確認
※すみませんが続きは長いので本投稿では省略します。英語で構わない方はどうぞ
掃除
おかしな課金をされないようここまでに作成したリソースを削除しましょう
-
Service Catalog
>Provisioned Products
にあるものをterminate
- CloudFormation console で関連スタックを
Delete
注
- ※上記の作業だけでは対象の AWS アカウント本体は消えません
- アカウント本体をクローズしたいときは こう してください
- root のパスワードを得るには リセット してください
まとめ
本番用としてはこのサンプルだけでは物足りないのですが、 Landing Zone の理解を深める一助にはなるでしょうか。 baseline を熟成させたりいろいろとやりたくなりますね。ソースを眺めるとより理解が深まるでしょう
本投稿は概ね冒頭の README.md の内容を一部日本語で写しただけなので、 英語を読める方は元の github をそのままご覧になったほうがよいかと思います
note
- (2021/06/15追記)
-
当組織では 2021/06 現在、引き続きこのツールを、新規メンバーアカウント作成時に利用しています
- "B) AVM の起動と新規アカウントの発行" は CLI でもできますのでスクリプトにしてオペレーションを簡略化。全リージョンで Default VPC を消失させてくれるというセキリュティ上の利点も利用動機となっています
- (fork して AccountCreationLambda.py の一部を修正したものを使っています)
-
※1 但し、もし Controle Tower を導入可能な組織であれば、そちらをご検討なさると良いと思います
- 同サービスで Account Factory なる機能が提供されています
-
当組織では 2021/06 現在、引き続きこのツールを、新規メンバーアカウント作成時に利用しています