概要
Amazon S3 のバケット名はこれまでグローバルに一意である必要がありました。つまり、あるバケット名を誰かが使っていれば、世界中の他のアカウントからは同じ名前を使えません。さらに、バケットを削除すると別のアカウントがその名前を取得できてしまうため、バケット名の乗っ取り(Bucket Squatting)やデータの誤送信といったセキュリティリスクが存在していました。
2025年にリリースされたアカウントリージョナル名前空間は、バケット名にアカウント ID とリージョンを含む命名規則を導入することで、これらの問題を根本的に解決する仕組みです。この記事では、従来のグローバル名前空間との違いを理解し、実際にアカウントリージョナル名前空間でバケットを作成する手順を体験します。

この記事のメリット
- S3 バケットのグローバル名前空間が持つセキュリティリスクを理解できる
- アカウントリージョナル名前空間の仕組みと命名規則を把握できる
- AWS マネジメントコンソールからアカウントリージョナル名前空間でバケットを作成する手順を習得できる
- IAM ポリシーや SCP でアカウントリージョナル名前空間の使用を強制する方法を理解できる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
グローバル名前空間の課題



とひさん、S3 のバケット名は世界中で一意でないといけないのでござるよな? それには、どんな問題があるのでござるか?
そうだね。従来の S3 バケット名は「グローバル名前空間」に属していて、いくつか厄介な課題があるんだ。まとめるとこんな感じだよ。
| 課題 | 説明 |
|---|---|
| バケット名の衝突 | 他のアカウントが既に使用している名前は選択できない |
| 削除後の名前再利用 | バケットを削除すると、別のアカウントが同じ名前でバケットを作成できる |
| バケット名の推測攻撃 | 命名パターンが予測可能な場合、攻撃者が先にバケットを作成してデータを傍受する可能性がある |



削除したあとに、別の誰かが同じ名前で作れてしまうのでござるか……それは怖いでござる。
そう、特に「削除後の名前再利用」は深刻なんだ。例えば、CloudFormation スタックを削除・再作成する運用では、バケット名が一時的に解放されるから、その隙に別のアカウントが同じ名前でバケットを作成するリスクがあるんだよ。
アカウントリージョナル名前空間とは



そういう問題を解決する仕組みがあるのでござるか?
あるよ。2025年にリリースされた「アカウントリージョナル名前空間」という仕組みだね。バケット名に AWS アカウント ID とリージョンコードを含めることで、名前の所有権をアカウントとリージョンに紐づけるんだ。



呼び方が、場所によって違う気がするのでござるが……。
いいところに気づいたね。AWS 公式ドキュメント(日本語)では「アカウントのリージョン名前空間」、マネジメントコンソールでは「アカウントのリージョナル名前空間」と表記されているんだ。英語ではどちらも account-regional namespace で、指しているものは同じだよ。



具体的には、どういう名前になるのでござる?
命名形式はこうなるよ。
<プレフィックス>-<アカウントID>-<リージョン>-an具体例だとこんな感じだね。
my-app-logs-111122223333-ap-northeast-1-anそれぞれの要素を分解するとこうなるよ。
| 要素 | 説明 | 例 |
|---|---|---|
| プレフィックス | ユーザーが自由に定義する部分 | my-app-logs |
| アカウント ID | 12 桁の AWS アカウント ID | 111122223333 |
| リージョン | AWS リージョンコード | ap-northeast-1 |
| サフィックス | 固定の識別子 | -an |





なるほど! アカウント ID が入るから、他の誰かと被る心配がないのでござるな! 猿山のバナナ倉庫の札に、群れの名前を書いておくようなものでござる。
2 つの名前空間の比較
その通り。2 つの名前空間を比較すると、違いがはっきりわかるよ。
| 特性 | グローバル名前空間 | アカウントリージョナル名前空間 |
|---|---|---|
| 名前の一意性スコープ | AWS パーティション全体 | アカウント + リージョン単位 |
| 削除後の名前再利用 | 他のアカウントが再利用可能 | 他のアカウントは再利用不可 |
| 命名形式 | 自由(規則内) | <プレフィックス>-<AccountId>-<Region>-an |
| バケット名の推測耐性 | 低い(パターンが予測可能) | 高い(アカウント ID が含まれる) |
| 推奨用途 | 既存バケットとの互換性が必要な場合 | 新規作成するバケット全般 |



新しく作るなら、アカウントリージョナル名前空間を選んだほうがよいのでござるな。
バケット名の文字数制限に関する注意



ところで、バケット名には長さの制限があったでござるよな? アカウント ID やリージョンが入ると、けっこう長くなりそうでござるが……。
いいところに気づいたね。S3 バケット名の上限は 63 文字なんだ。アカウントリージョナル名前空間では、サフィックス部分が文字数を消費するんだよ。東京リージョンの場合はこうなる。
-111122223333-ap-northeast-1-an → 31 文字だからプレフィックスに使える文字数は 32 文字(ハイフン区切りを含む)になるんだ。リージョンコードが長いほどプレフィックスに使える文字数が少なくなる点には注意が必要だね。



32 文字でござるか……長い名前を付けたいときは、少し工夫が要るでござるな。
-an サフィックスの予約



そういえば、末尾の -an には何か意味があるのでござるか?
-an はアカウントリージョナル名前空間を識別するための固定サフィックスだよ。この導入に伴って、-an で終わるバケット名はアカウントリージョナル名前空間専用に予約されたんだ。だからグローバル名前空間で -an で終わるバケットを新規作成することはできないよ。



なるほど、末尾で区別できるようになっているのでござるな。
IAM / SCP による名前空間の強制



組織で「全部アカウントリージョナル名前空間を使うように」と強制することはできるのでござるか?
できるよ。条件キー s3:x-amz-bucket-namespace を使えばいいんだ。例えば、グローバル名前空間でのバケット作成を拒否する IAM ポリシーはこんな感じになる。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireAccountRegionalNamespace",
"Effect": "Deny",
"Action": "s3:CreateBucket",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-bucket-namespace": "account-regional"
}
}
}
]
}このポリシーを SCP(サービスコントロールポリシー)として Organizations に適用すれば、組織内のすべてのアカウントに対してアカウントリージョナル名前空間の使用を強制できるんだ。



SCP で一括管理できるのは便利でござる!
利用可能なリージョン



これは、どのリージョンでも使えるのでござるか?
ほぼすべてのリージョンで使えるよ。ただし、以下のリージョンでは非対応なんだ。
- Middle East (Bahrain)
- Middle East (UAE)



東京リージョンは問題ないのでござるな。よかったでござる!
実践
ここでは、AWS マネジメントコンソールからアカウントリージョナル名前空間でバケットを作成し、従来のグローバル名前空間との違いを確認します。
前提条件
- AWS マネジメントコンソールにログインできること
- S3 バケットの作成権限を持つ IAM ユーザーまたはロールでログインしていること
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| S3 バケット | test-account-regional-<アカウントID>-ap-northeast-1-an | アカウントリージョナル名前空間の動作確認用 |
アカウントリージョナル名前空間でバケットを作成する
AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。
上部の検索バーに S3 と入力し、表示された「S3」を選択します。
左側ナビゲーションの「バケット」を選択し、「バケットを作成」をクリックします。
「バケットの作成」画面で以下を設定します。
バケット名前空間セクションで、「アカウントのリージョナル名前空間 (推奨)」を選択します(デフォルトは「グローバル名前空間」です)。


名前空間を選択すると、「バケット名」セクションの入力欄が「バケット名の接頭辞」に変わり、その右に「アカウントのリージョナル名前空間接尾辞」(-<アカウントID>-ap-northeast-1-an)が表示されます。以下を入力します。
- バケット名の接頭辞:
test-account-regional
入力すると、下の「フルバケット名」に test-account-regional-<アカウントID>-ap-northeast-1-an が組み立てられて表示されます。接頭辞と接尾辞を合わせた長さは 3 文字以上 63 文字以下である必要があります。


その他の項目はデフォルトのままにします。
ページ下部の「バケットを作成」をクリックします。
作成完了後、バケット一覧画面にアカウントリージョナル名前空間のバケットが表示されます。バケット名にアカウント ID とリージョンが含まれていることを確認します。


作成したバケットが属する名前空間を確認する
作成したバケットを選択し、「プロパティ」タブを開きます。
「バケットの概要」には「AWS リージョン」「Amazon リソースネーム (ARN)」「作成日」が表示されます。名前空間の種類を直接示す項目はありません。アカウントのリージョナル名前空間で作成されたかどうかは、バケット名(および ARN)の末尾が -<アカウントID>-<リージョン>-an になっていることで判断します。


-an は、この名前空間のバケットだけが使えるサフィックスです。グローバル名前空間のバケットには付けられないため、名前を見れば区別できます。
AWS CLI で作成する場合
コンソール操作の代わりに、AWS CLI で作成する場合は以下のコマンドを使用します。
aws s3api create-bucket \
--bucket test-account-regional-111122223333-ap-northeast-1-an \
--bucket-namespace account-regional \
--region ap-northeast-1 \
--create-bucket-configuration LocationConstraint=ap-northeast-1--bucket-namespace account-regional パラメータを指定することで、アカウントのリージョナル名前空間でバケットが作成されます。コンソールと違い、--bucket にはサフィックス(アカウント ID とリージョン)を含む完全なバケット名を指定する必要があります。
なお、--bucket-namespace は比較的新しいパラメータです。aws s3api create-bucket help に表示されない場合は AWS CLI を更新してください(執筆時点の AWS CLI 2.33.27 では未対応でした)。また、aws s3api list-buckets のレスポンスにも名前空間を示すフィールドは含まれないため、CLI から確認する場合もバケット名の -an サフィックスで判断します。
CloudFormation で作成する場合
CloudFormation では BucketNamePrefix プロパティを使用すると、サフィックスが自動的に付与されます。
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketNamePrefix: test-account-regional
BucketNamespace: account-regionalBucketNamePrefix を使用する方式が推奨されており、アカウント ID とリージョンの手動指定が不要になります。
まとめ
- S3 の従来のグローバル名前空間には、バケット名の乗っ取りや削除後の再利用といったセキュリティリスクがある
- アカウントリージョナル名前空間は、バケット名に
<プレフィックス>-<AccountId>-<Region>-anの形式を導入し、名前の所有権をアカウントとリージョンに紐づける - 他のアカウントが同じ名前を使用したり、削除されたバケット名を再利用したりすることが不可能になる
- マネジメントコンソールではバケット作成時に名前空間を選択するだけで利用できる
- IAM ポリシーや SCP の条件キー
s3:x-amz-bucket-namespaceで組織全体に使用を強制できる - 新規にバケットを作成する場合は、アカウントリージョナル名前空間の使用が推奨される
参照先
- 汎用バケット名前空間 – Amazon Simple Storage Service
- バケットの命名規則 – Amazon Simple Storage Service
- バケットの作成 – Amazon Simple Storage Service










