汎用バケットの名前空間 - Amazon Simple Storage Service

汎用バケットの名前空間

デフォルトでは、汎用バケットはグローバル名前空間に存在します。このため、各バケット名は、パーティション内のすべての AWS リージョンにあるすべての AWS アカウントで一意である必要があります。パーティションは、リージョンのグループです。AWS には、現在、aws (標準リージョン)、aws-cn (中国リージョン)、aws-us-gov (AWS GovCloud (米国))、aws-eusc (欧州ソブリンクラウド) の 4 つのパーティションがあります。汎用バケットの作成時に共有グローバル名前空間内にバケットを作成するように選択できます。アカウントのリージョン名前空間にバケットを作成することもできます。アカウントのリージョン名前空間は、アカウントのみがバケットを作成できるグローバル名前空間のサブディビジョンです。

グローバル汎用バケット

デフォルトでは、共有グローバル名前空間にグローバル汎用バケットを作成します。共有グローバル名前空間に汎用バケットを作成すると、そのバケット名は、そのパーティション内では他のユーザーが作成できなくなります。グローバル汎用バケットが削除されると、バケット名はグローバル名前空間で再び使用可能になり、誰でも再作成できます。

グローバル汎用バケットを作成する場合、バケットの命名規則に準拠する任意の名前をリクエストできます。名前の長さについては、3 (最小)~63 (最大) 文字で指定するという規則があります。名前に使用できるのは、小文字、数字、ピリオド (.)、およびハイフン (-) のみです。バケット名は文字または数字で始まり、末尾に 2 つの連続するピリオドを含めることはできません。バケットの命名規則の詳細については、「汎用バケットの命名規則」を参照してください。

グローバル汎用バケット名を指定するときは、パーティションにまだ使用されていない一意の名前を選択する必要があります。既に存在し、他のユーザーが所有するバケットを作成しようとすると、HTTP 409 BucketAlreadyExists エラーが発生します。既に存在し、自分が所有するバケットを作成しようとすると、HTTP 409 BucketAlreadyOwnedByYou エラーが発生します。

グローバル汎用バケットを作成して、リクエストしたバケット名を最も柔軟に選択できます。共有グローバル名前空間であるため、他のアカウントでも同様のバケット名を作成できます。他のアカウントは、以前に削除したバケット名を再作成することもできます。可用性やセキュリティ検証の目的で、特定のバケット命名規則に依存しないでください。バケットを既に作成していない限り、選択したバケット名を使用できるものと見なしてコードを記述しないでください。予測不可能なバケット名を作成する方法の 1 つは、バケット名にグローバル一意識別子 (GUID) を追加することです。例えば、amzn-s3-demo-bucket-a1b2c3d4-5678-90ab-cdef-example11111 です。詳細については、「バケット名で GUID を使用するバケットの作成」を参照してください。

アカウントのリージョン名前空間汎用バケット

Amazon S3 汎用バケットは共有グローバル名前空間に存在しますが、オプションでアカウントのリージョン名前空間にバケットを作成できます。アカウントのリージョン名前空間は、グローバルバケット名前空間の予約済みサブディビジョンです。ご使用のアカウントのみが、この名前空間に汎用バケットを作成できます。アカウントのリージョン名前空間で作成された新しい汎用バケットは、アカウントに固有です。これらのバケットを別のアカウントで再作成することはできません。これらのバケットは、共有グローバル名前空間の汎用バケットが既にサポートしているすべての S3 機能と AWS のサービスをサポートしています。アプリケーションは、アカウントのリージョン名前空間のバケットを操作するために変更を必要としません。

注記

バケットは、中東 (バーレーン) と中東 (アラブ首長国連邦) を除くすべての AWS リージョンのアカウントのリージョン名前空間に作成できます。

アカウントのリージョン名前空間にバケットを作成することは、セキュリティのベストプラクティスです。これらのバケット名は、ご使用のアカウントでのみ使用できます。アカウントのリージョン名前空間にバケットを作成して、複数の AWS リージョンにまたがる汎用バケット名を簡単にテンプレート化できます。他のアカウントが名前空間にバケット名を作成できないことを保証できます。別のアカウントが、ご使用のアカウントのリージョンサフィックスでバケットを作成しようとすると、CreateBucket リクエストは拒否されます。

アカウントのリージョン名前空間の命名規則

アカウントのリージョン名前空間の汎用バケットは、特定の命名規則に従う必要があります。バケット名は、作成するバケット名のプレフィックスと、12 桁の AWS アカウント ID、AWS リージョンコードを含むサフィックスで構成され、末尾は -an となります。

bucket-name-prefix-accountId-region-an

例えば、us-west-2 リージョンの AWS アカウント 111122223333 のアカウントのリージョン名前空間には、次の汎用バケットがあります。

amzn-s3-demo-bucket-111122223333-us-west-2-an

アカウントのリージョン名前空間にバケットを作成するには、CreateBucket リクエストを行います。値を account-regional に設定して x-amz-bucket-namespace リクエストヘッダーを指定します。また、アカウントのリージョン名前空間形式のバケット名も指定します。<customer-chosen-name>-<AWS-Account-ID>-<AWS-Region>-an

注記

コンソールを使用してアカウントのリージョン名前空間に汎用バケットを作成すると、指定したバケット名のプレフィックスにサフィックスが自動的に追加されます。このサフィックスには、AWS アカウント ID と、バケットの作成先として選択した AWS リージョンが含まれます。CreateBucket API を使用してアカウントのリージョン名前空間に汎用バケットを作成する場合は、完全なサフィックスを指定する必要があります。これには、AWS アカウント ID とリクエスト内の AWS リージョンが含まれます。AWS リージョンコードのリストについては、AWS リージョンコード形式 を参照してください。

アカウントのリージョン名前空間を CloudFormation テンプレートに統合する

CloudFormation などの infrastructure-as-code ツールを更新して、アカウントのリージョン名前空間でのバケットの作成を簡素化できます。CloudFormation には、擬似パラメータ AWS::AccountIdAWS::Region が用意されています。これらのパラメータにより、アカウントのリージョン名前空間バケットを作成する CloudFormation テンプレートを簡単に構築できます。詳細については、「擬似パラメータを使用して AWS 値を取得する」を参照してください。

例 1: Sub で BucketName を使用

BucketName: !Sub "amzn-s3-demo-bucket-${AWS::AccountId}-${AWS::Region}-an" BucketNamespace: "account-regional"

例 2: BucketNamePrefix を使用

BucketNamePrefix: 'amzn-s3-demo-bucket' BucketNamespace: "account-regional"

または、BucketNamePrefix プロパティを使用して CloudFormation テンプレートを更新することもできます。BucketNamePrefix を使用すると、バケット名のお客様が定義した部分を簡単に指定できます。次に、リクエスト元の AWS アカウントと指定された AWS リージョンに基づいて、アカウントのリージョン名前空間のサフィックスが自動的に追加されます。

これらのオプションを使用すると、カスタム CloudFormation テンプレートを構築して、アカウントのリージョン名前空間に汎用バケットを簡単に作成できます。詳細については、「CloudFormation ユーザーガイド」の「AWS::S3::Bucket」を参照してください。

制限と考慮事項

共有グローバル名前空間でバケットを作成する場合、以下の考慮事項が適用されます。

  • バケットが削除されるまで、共有グローバル名前空間のバケット名を同じパーティション内の別の AWS アカウントで使用することはできません。共有グローバル名前空間のバケットを削除すると、同じパーティション内にある別の AWS アカウントが新しいバケットに同じバケット名を使用できるため、削除されたバケット宛てのリクエストを受け取る可能性があることに注意してください。

  • 共有グローバル名前空間にバケットを作成するアプリケーションを構築するときは、目的のバケット名が別のアカウントによって既に取得されている可能性があること、および他のアカウントに類似するバケット名がある可能性があることを必ず考慮してください。

  • Amazon S3 は、名前に基づいてバケットを識別するため、アプリケーションでリクエストに誤ったバケット名を使用した場合、正しくないバケットに対して、誤ってオペレーションが実行される可能性があります。このような状況で意図しないバケットとのやり取りを回避するために、バケット所有者条件を使用できます。詳細については、「バケット所有者条件によるバケット所有者の確認」を参照してください。

アカウントのリージョン名前空間でバケットを作成する場合、以下の制限と考慮事項が適用されます。

  • いずれかの AWS リージョンで既に所有しているアカウントのリージョン名前空間バケットを再作成しようとすると、HTTP 409 BucketAlreadyOwnedByYou エラーが返されます。

  • S3 リージョンエンドポイントを使用して、アカウントのリージョン名前空間にバケットを作成する必要があります。下位互換性のために、レガシーグローバルエンドポイントを使用して、米国東部 (バージニア北部) リージョンのアカウントのリージョン名前空間にバケットを作成できます。

  • アカウントのリージョンサフィックスは、汎用バケット名で許可される最大 63 文字数の中に含まれます。したがって、アカウントのリージョンサフィックスが -012345678910-us-east-1-an の場合、バケット名のプレフィックスとして 37 文字を使用できます。

AWS リージョンコード形式

アカウントのリージョン名前空間にバケットを作成するには、汎用バケットを作成するサフィックスに AWS リージョンを含める必要があります。サフィックスには完全な AWS リージョンコードを指定する必要があります (例: us-west-2)。AWS リージョンコードのリスト全体については、「AWS リージョン」を参照してください。次のバケット名は、アカウントのリージョン名前空間でバケットを作成するときに使用する必要がある AWS リージョンコード形式の 2 つの例を示しています。

  • amzn-s3-demo-bucket-012345678910-ap-southeast-1-an

  • amzn-s3-demo-bucket-987654321012-eu-north-1-an

アカウントのリージョン名前空間にバケットの作成を要求する

IAM プリンシパルがアカウントのリージョン名前空間のみにバケットを作成するように強制できます。s3:x-amz-bucket-namespace 条件キーを使用する 次の例は、IAM ポリシー、リソースコントロールポリシー、またはサービスコントロールポリシーでアカウントリージョンバケットの作成を強制する方法を示しています。

IAM ポリシー

次の IAM ポリシーは、リクエストに、アカウントリージョンに設定された x-amz-bucket-namespace ヘッダーが含まれていない場合、IAM プリンシパルへの s3:CreateBucket アクセス許可を拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAccountRegionalBucketCreation", "Effect": "Deny", "Action": "s3:CreateBucket", "Resource": "*", "Condition": { "StringNotEquals": { "s3:x-amz-bucket-namespace": "account-regional" } } } ] }

リソースコントロールポリシー

次のリソースコントロールポリシーは、リクエストに、アカウントリージョンに設定された x-amz-bucket-namespace ヘッダーが含まれていない場合、誰に対しても s3:CreateBucket アクセス許可を拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "OnlyCreateBucketsInAccountRegionalNamespace", "Effect": "Deny", "Principal": "*", "Action": "s3:CreateBucket", "Resource": "*", "Condition": { "StringNotEquals": { "s3:x-amz-bucket-namespace": "account-regional" } } } ] }

サービスコントロールポリシー

次のサービスコントロールポリシーは、リクエストに、アカウントリージョンに設定された x-amz-bucket-namespace ヘッダーが含まれていない場合、誰に対しても s3:CreateBucket アクセス許可を拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAccountRegionalBucketCreation", "Effect": "Deny", "Action": "s3:CreateBucket", "Resource": "*", "Condition": { "StringNotEquals": { "s3:x-amz-bucket-namespace": "account-regional" } } } ] }

アカウントのリージョン名前空間にバケットを作成する

次の例は、アカウントのリージョン名前空間に汎用バケットを作成する方法を示しています。

の使用AWS CLI

次の AWS CLI の例では、米国西部 (北カリフォルニア) リージョン (us-west-1) の AWS アカウント 012345678910 のアカウントのリージョン名前空間に汎用バケットを作成します。このコマンド例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

aws s3api create-bucket \ --bucket amzn-s3-demo-bucket-012345678910-us-west-1-an \ --bucket-namespace account-regional --region us-west-1 \ --create-bucket-configuration LocationConstraint=us-west-1