AWS Organizations :ActiveなAWSアカウントの一覧を出力する
TL; DR(概要)
AWS Organizations を利用してアカウント管理を行う際に、大量のアカウントをエクセル管理は現実的では無いため、Activeなアカウント一覧を出力させる方法を考えました。
やりたいこと
AWS Organizations で管理しているActiveなアカウント番号を一覧で抜きたい。
結論
以下コマンドを叩くと、AWS Organizations 配下で動いている(Active)アカウント番号の一覧が出力できます。
aws organizations list-accounts --query "Accounts[].[Id,Status]" --output text --profile 903036601234 | grep ACTIVE | cut -d $'\t' -f 1
補足
--profile 903036601234 は管理アカウントのプロファイルを指定
結果
209966961234
741063721234
493411961234
490872561234
454192401234
解説
AWS Organizations に所属しているアカウントの一覧
「aws organizations list-accounts」コマンドを利用すると、アカウント一覧を取得できますが、後述するようにAWSアカウントの閉鎖を行ったアカウントも出力されてしまいます。
aws organizations list-accounts --query "Accounts[].[Id,Status]" --output text --profile 903036601234
補足
--profile 903036601234 は管理アカウントのプロファイルを指定
結果
209966961234 ACTIVE
741063721234 ACTIVE
493411961234 ACTIVE
490872561234 ACTIVE
205159071234 SUSPENDED
補足
Status が、SUSPENDEDの場合は直近(90日以内)にアカウントを閉鎖したアカウントであり、現在利用していないアカウントであるため、一覧から削除したい
工夫
Bash であれば、 grep でフィルタリングして、フィルタリングで利用した項目を削除
アカウントの閉鎖に伴う影響
AWSアカウントを閉鎖しても、すぐには削除されません
アカウントを閉鎖してから 90 日経過するまで:
閉鎖されたアカウントは、組織内で SUSPENDED 状態と表示されます。
90 日間の猶予期間終了後:
閉鎖された AWS アカウント は組織に表示されなくなります。
AWS アカウント は再稼働の対象ではなくなります。その時点で、アカウントにあったすべての AWS リソースは復元不可能になります。
アカウント単位でのステータス確認
「aws organizations describe-account」コマンドで確認できます。
アカウントがActiveな場合
aws organizations describe-account --account-id 912491581234 --profile 903036601234
{
"Account": {
"Id": "912491581234",
"Arn": "arn:aws:organizations::903036601234:account/o-eukpl986tv/912491581234",
"Email": "xxxxxx-xxxxxx@hogehoge.co.jp",
"Name": "xxxxxx-xxxxxx",
"Status": "ACTIVE",
"JoinedMethod": "INVITED",
"JoinedTimestamp": "2021-06-25T15:55:36.380000+09:00"
}
}
aws organizations describe-account --account-id 912491581234 --profile 903036601234 | jq -r '.[]|[.Id,.Status] | @tsv'
912491581234 ACTIVE
アカウントが閉鎖(SUSPENDED)の場合
aws organizations describe-account --account-id 205159071234 --profile 903036601234
{
"Account": {
"Id": "205159071234",
"Arn": "arn:aws:organizations::903036601234:account/o-eukpl986tv/205159071234",
"Email": "xxxxxx-xxxxxx@hogehoge.co.jp",
"Name": "xxxxxx-xxxxxx",
"Status": "SUSPENDED",
"JoinedMethod": "INVITED",
"JoinedTimestamp": "2022-08-31T15:11:49.296000+09:00"
}
}
aws organizations describe-account --account-id 205159071234 --profile 903036601234 | jq -r '.[]|[.Id,.Status] | @tsv'
205159071234 SUSPENDED
Discussion