S3: アカウント専用の名前空間でバケットを作る(<名前>-<アカウントID>-<リージョン>-an)
S3 の汎用バケットは全世界で名前が一意だったが、アカウント ID とリージョンを末尾に付けた「アカウントリージョナル名前空間」で作れるようになった。他アカウントはその接尾辞の名前を作れないので、名前の取り合いや乗っ取りの心配がない。
どんなときに使う?
- 顧客・チーム・データセットごとにバケットを作り、名前を規則的に決めたいとき
- マルチアカウント構成で、環境ごとに同じプレフィックスのバケット名を使いたいとき
- 削除したバケット名を他人に取られるリスク(バケット名スクワッティング)を避けたいとき
やり方
名前は <自分で決めるプレフィックス>-<12桁のアカウントID>-<リージョンコード>-an の形にする(全体で 3〜63 文字)。
AWS CLI:
aws s3api create-bucket \
--bucket mybucket-123456789012-us-east-1-an \
--bucket-namespace account-regional \
--region us-east-1(API では x-amz-bucket-namespace: account-regional ヘッダー。us-east-1 以外では --create-bucket-configuration LocationConstraint=<リージョン> も付ける)
Terraform(AWS プロバイダ):
hcl
data "aws_caller_identity" "current" {}
data "aws_region" "current" {}
resource "aws_s3_bucket" "example" {
bucket = format("my-bucket-%s-%s-an", data.aws_caller_identity.current.account_id, data.aws_region.current.region)
bucket_namespace = "account-regional"
}コンソールで作る場合は接尾辞が自動で付く。SCP や IAM ポリシーで「アカウント名前空間でしか作らせない」と強制することもできる。
注意点
- 既存のグローバル名前空間のバケットは改名できない。新しく作る分から使う
- 対象は汎用バケットのみ(テーブルバケット・ベクトルバケットは元からアカウント単位、ディレクトリバケットはゾーン単位)
- 機能面はグローバル名前空間の汎用バケットと同じで、追加料金なし。アプリ側の変更も不要
- 名前にアカウント ID が入るので、ID を外に見せたくない用途では注意する
出典
- @dkfj · 2026-03-13
- AWS News Blog: aws.amazon.com
- S3 ユーザーガイド: docs.aws.amazon.com