👩‍🔧

AWS Organizations :ActiveなAWSアカウントの一覧を出力する

2022/12/22に公開

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ドキュメント: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