社内でAWSトレーニングやるから、AWS組織アカウント下で参加者が使える
子アカウントを大量に作れるようにしとけ、というお達しをいただきましたので
備忘録ついでに記事にしました。
以下手順を淡々と..
親(Payer)アカウントにて下ごしらえ
① Payerアカウントにスクリプト実行用のIAMuserアカウント/アクセスキーを作成します。コンソールは使わないので利用権限OFFでOK。
PayerアカウントのEC2とかでスクリプト実行するならアクセスキーなんぞ使わずRoleアタッチとかでOKですし
Cloudshell で後述のスクリプトを実行でももちろんOK
② ①で作成したアクセスキーをスクリプト実行PCに新規プロファイル設定
$ cat ~/.aws/config
[profile demoaccount]
region = ap-northeast-1
$ cat ~/.aws/credentials
[demoaccount]
aws_access_key_id = AKIxxxxxxxxxxxxJO2
aws_secret_access_key = jOoxxxxxxxxxxxxxxxxxxxxxt4xBU0
子アカウント作成してみる
③スクリプト作成
アカウント作成用スクリプトはこちら。お好みでbash でも pythonでも修正してどうぞ。
$ cat CreateDemoAccount.sh
#!/bin/csh
set PROFILE=demoaccount
set NUMBER=001
set REGION=ap-northeast-1
set EMAIL_ADDRESS=aws_demo+${NUMBER}@xxx.co.jp
set ACCOUNT_NAME="aws_demo_${NUMBER}"
set ROLE_NAME="DemoAccountRole"
organizations create-account \
--profile ${PROFILE}\
--region ${REGION}\
--email ${EMAIL_ADDRESS} \
--account-name ${ACCOUNT_NAME} \
--role-name ${ROLE_NAME}
メールアドレスは実際使わないのでダミーでもいいですけど、本作業用のものを用意するのをお薦めします。
④ 実行
実行すると、IN_PROGRESS ステータスで新規アカウントが発行されているのが確認できます。
$ ./CreateDemoAccount.sh
{
"CreateAccountStatus": {
"Id": "car-3d6431xxxxxxxxxxxxxxd66e24cb",
"AccountName": "aws_demo_001",
"State": "IN_PROGRESS",
"RequestedTimestamp": "2023-04-26T16:09:09.781000+09:00"
}
}
たくさん作る時には③のスクリプトで $NUMBER を通番ループで回してやればOK
親アカウントにSwitchRole用のIAMuser(参加者用ID)を作ろう
作成したアカウントにはIAMuserはいないのでSwitchRoleするためのIAMuserを
親アカウント側に用意しなければなりません。
⑤IAMグループHandsOnUsersを作成します
さらにInlineRule にてAssumeRole をアタッチします。
⑥ IAMuser demouser01を作成, グループ HandsOnUsers に追加
※これも大量に作る際はスクリプトで行えますがここでは説明を割愛
⑦ demouser01 で改めてAWSコンソールにログインし直し、④で確認したAWS account 番号でSwitchRole 実行
⑧ SwitchRole成功を確認
これで参加者にHands-on用Sandboxを提供できます!
補足など
アカウント削除をCLIでやるなら以下の通り
% aws organizations close-account --profile demoaccount --account-id <対象アカウント>
実行すると何も応答無しで終了しますが、コンソール上で見ると
うーん怖いw
誤操作の可能性を考えるとかなり怖いので、都度アカウント閉じるなら
可能な限り本番利用とは別にトレーニング用Payerアカウントを用意して運用すべきでしょう。
ただ、コマンドラインヘルプ見ると気になる記載がある。
毎月2-30アカウント作ってHands-on後にごっそり削除ってのは通常ではできないのかもしれない。
こっちはサポートに相談かな..
追記:AWSサポートに確認したところ最低10アカウント/月までは削除できるそうです