AWSアカウントを指す識別子は5種類あり、外部からAPI呼び出しできないケースがある
この記事
最近フォロワーから教えてもらったのだが、AWSアカウントのID/Nameを指す概念がどうも5つある。Perplexityに聞いてもどうにも曖昧だし、用語がかみ合わない。可能な限りこの記事にまとめて理解を図る。
ID
AWS Account ID
AWS アカウントを一意に識別する 12 桁の番号を指す。ARNにも記載されており、AWS利用者のほとんどは知っているだろう。
APIでの取得
STS APIで取得できる。
$ aws sts get-caller-identity \
--query Account \
--output text
123456789012
Canonical user ID
AWS アカウント ID の難読化された形式の識別子。S3バケットのクロスアカウント時に使う識別子。
APIでの取得
S3 APIからOwner.IDとして取得できる。
aws s3api list-buckets \
--max-items 10 \
--page-size 10 \
--query Owner.ID \
--output text
249fa2f1dc32c330EXAMPLE91b2778fcc65f980f9172f9cb9a5f50ccbEXAMPLE
Name
Account Alias
これをAWSアカウントの名前と呼ぶ人がいる。
AWS Account IDと1:1対応する文字列をエイリアスとして設定できる。
APIでの取得
IAM APIで取得できる。
aws iam list-account-aliases \
--query AccountAliases \
--output text
examplecorp
AWS Account Name(Organizations)
こちらは、AWS Organizationsに属するアカウントとしての名前を指す。
APIでの取得
Organizations APIで取得できる。
aws organizations describe-account \
--account-id 123456789012 \
--query Account.Name
hogehoge
AWS Account Name(Billing and Cost Management)
こちらは、AWSアカウントの請求情報上の名前を指す。具体的にはAccountMetaDataのAccountNameを指す。
APIでの取得
名前を取得する操作はIAMのActionのaccount:GetAccountInformationに相当する。この操作はコンソールからのみ実行でき、AWS CLIやAWS SDKからは取得できない。
ちなみにこの名前を変更する操作はiam:UpdateAccountName権限が該当する。
こちらもコンソールからのみ実行でき、APIからのアクセスはできないと公式ドキュメントに書かれている。
本操作に関しては該当アカウントのルートユーザのみが実行できる。AWS管理アカウント不可)
なにそれ
変なことを書いているが、そうとしか言えない、らしい。
Organizations上で名前をつける機能はあるし、請求情報の名前をルートユーザ、契約者以外が変更できる必要はなく、今回挙げた識別子のいずれかで代替すれば良い。という判断になっていると想像できる。
Discussion