

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 一般用途儲存貯體的命名空間
<a name="gpbucketnamespaces"></a>

根據預設，一般用途儲存貯體存在於全域命名空間中。這表示每個儲存貯體名稱在分割區內所有 AWS 區域中的所有 AWS 帳戶都必須是唯一的。分割區是 Regions 的群組。 AWS 目前有四個分割區： `aws`（標準區域）、 `aws-cn` （中國區域）、 `aws-us-gov`(AWS GovCloud （美國）) 和 `aws-eusc`（歐洲主權雲端）。當您建立一般用途儲存貯體時，您可以選擇在共用全域命名空間中建立儲存貯體。您也可以選擇在帳戶區域命名空間中建立儲存貯體。您的帳戶區域命名空間是全域命名空間的子區段，只有您的帳戶才能在其中建立儲存貯體。

**Topics**
+ [全域一般用途儲存貯體](#global-gp-buckets)
+ [帳戶區域命名空間一般用途儲存貯體](#account-regional-gp-buckets)
+ [限制與考量事項](#namespace-restrictions)
+ [AWS 區域碼格式](#region-code-format)
+ [要求在您的帳戶區域命名空間中建立儲存貯體](#require-account-regional)
+ [在您的帳戶區域命名空間中建立儲存貯體](#create-account-regional-bucket)

## 全域一般用途儲存貯體
<a name="global-gp-buckets"></a>

根據預設，您可以在共用全域命名空間中建立全域一般用途儲存貯體。在共用全域命名空間中建立一般用途儲存貯體之後，該儲存貯體名稱就無法供其他人在分割區中建立。當您刪除全域一般用途儲存貯體時，儲存貯體名稱會在全域命名空間中再次可用，以供任何人重新建立。

建立全域一般用途儲存貯體時，您可以請求遵守儲存貯體命名規則的任何名稱。這些規則包括指定長度介於 3 （下限） 到 63 （上限） 個字元之間的名稱。名稱只能包含小寫字母、數字、句點 (.) 和連字號 (-)。儲存貯體名稱必須以字母或數字開頭和結尾，且不能包含兩個相鄰的句點。如需儲存貯體命名規則的詳細資訊，請參閱 [一般用途儲存貯體命名規則](bucketnamingrules.md)。

指定全域一般用途儲存貯體名稱時，您必須選取尚未用於分割區的唯一名稱。如果您嘗試建立已存在且由其他人擁有的儲存貯體，您將會收到 HTTP 409 BucketAlreadyExists 錯誤。如果您嘗試建立已存在且由您擁有的儲存貯體，您將會收到 HTTP 409 BucketAlreadyOwnedByYou 錯誤。

您可以建立全域一般用途儲存貯體，以在選取您請求的儲存貯體名稱時擁有最大的彈性。由於它是共用的全域命名空間，其他帳戶可以建立類似的儲存貯體名稱。其他帳戶也可以重新建立您先前刪除的儲存貯體名稱。建議您不要為了可用性或安全驗證目的而依賴特定的儲存貯體命名慣例。除非您已經建立了儲存貯體，否則不要因您認為有選擇的儲存貯體名稱可用而撰寫程式碼。建立無法預測的儲存貯體名稱的一個方法是將全域唯一識別符 (GUID) 附加到您的儲存貯體名稱。例如 `amzn-s3-demo-bucket-a1b2c3d4-5678-90ab-cdef-example11111`。如需詳細資訊，請參閱[建立在儲存貯體名稱中使用 GUID 的儲存貯體](bucketnamingrules.md#create-bucket-name-guid)。

## 帳戶區域命名空間一般用途儲存貯體
<a name="account-regional-gp-buckets"></a>

雖然 Amazon S3 一般用途儲存貯體存在於共用的全域命名空間中，但您可以選擇在帳戶區域命名空間中建立儲存貯體。帳戶區域命名空間是全域儲存貯體命名空間的預留子區段。只有您的帳戶才能在此命名空間中建立一般用途儲存貯體。在您的 帳戶區域命名空間中建立的新一般用途儲存貯體專屬於您的帳戶。另一個帳戶永遠無法重新建立這些儲存貯體。這些儲存貯體支援共用全域命名空間中已支援的一般用途儲存貯體的所有 S3 功能 AWS 和服務。您的應用程式不需要變更即可與帳戶區域命名空間中的儲存貯體互動。

**注意**  
您可以在帳戶區域命名空間中建立儲存貯體，但中東 （巴林） 和中東 （阿拉伯聯合大公國） AWS 除外。

在您的帳戶區域命名空間中建立儲存貯體是安全最佳實務。只有您的帳戶才能使用這些儲存貯體名稱。您可以在帳戶區域命名空間中建立儲存貯體，以輕鬆地跨多個 AWS 區域範本化一般用途儲存貯體名稱。您可以保證沒有其他帳戶可以在命名空間中建立儲存貯體名稱。如果另一個帳戶嘗試使用您的帳戶區域尾碼建立儲存貯體，CreateBucket 請求將被拒絕。

### 帳戶區域命名空間慣例
<a name="account-regional-naming"></a>

您帳戶區域命名空間中的一般用途儲存貯體必須遵循特定的命名慣例。這些儲存貯體包含您建立的儲存貯體名稱字首，以及包含 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 請求。指定 值設為 的`x-amz-bucket-namespace`請求標頭`account-regional`。另請指定帳戶區域命名空間格式的儲存貯體名稱：`<customer-chosen-name>-<AWS-Account-ID>-<AWS-Region>-an`。

**注意**  
當您使用主控台在帳戶區域命名空間中建立一般用途儲存貯體時，後綴會自動新增至您提供的儲存貯體名稱字首。此尾碼包含 AWS 您的帳戶 ID 和您選取要建立儲存貯體 AWS 的區域。當您使用 CreateBucket API 在帳戶區域命名空間中建立一般用途儲存貯體時，必須提供完整的尾碼。這包括 AWS 您的帳戶 ID 和請求中的 AWS 區域。如需 AWS 區域代碼的清單，請參閱 [AWS 區域碼格式](#region-code-format)。

### 將帳戶區域命名空間整合到您的 CloudFormation 範本
<a name="cfn-integration"></a>

您可以更新infrastructure-as-code工具，例如 CloudFormation，以簡化在帳戶區域命名空間中建立儲存貯體的程序。 CloudFormation 提供虛擬參數 `AWS::AccountId`和 `AWS::Region`。這些參數可讓您輕鬆建置 CloudFormation 範本，以建立帳戶區域命名空間儲存貯體。如需詳細資訊，請參閱[使用虛擬參數取得 AWS 值](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html#available-pseudo-parameters)。

**使用 BucketName 搭配 Sub 的範例 1：**

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

**使用 BucketNamePrefix 的範例 2：**

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

或者，您也可以使用 BucketNamePrefix 屬性來更新 CloudFormation 範本。BucketNamePrefix 可讓您簡單地提供儲存貯體名稱的客戶定義部分。然後，它會根據指定的請求帳戶和 AWS 區域自動新增 AWS 帳戶區域命名空間尾碼。

使用這些選項，您可以建置自訂 CloudFormation 範本，以便在您的帳戶區域命名空間中輕鬆建立一般用途儲存貯體。如需詳細資訊，請參閱 CloudFormation 《 使用者指南》中的 [AWS：：S3：：Bucket](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-bucket.html)。

## 限制與考量事項
<a name="namespace-restrictions"></a>

在共用全域命名空間中建立儲存貯體時，適用下列考量：
+ 在刪除儲存貯體之前，共用全域命名空間中的儲存貯體名稱無法由相同分割區中的另一個 AWS 帳戶使用。刪除共用全域命名空間中的儲存貯體後，請注意相同分割區中的另一個 AWS 帳戶可以使用與新儲存貯體相同的儲存貯體名稱，因此可能會收到針對已刪除儲存貯體提出的請求。
+ 建置將在共用全域命名空間中建立儲存貯體的應用程式時，請務必考慮您的所需儲存貯體名稱可能已經由另一個帳戶使用，而其他帳戶可能具有與您類似的儲存貯體名稱。
+ 由於 會根據儲存貯體的名稱來 Amazon S3 識別儲存貯體，因此在請求中使用不正確儲存貯體名稱的應用程式可能會不小心對與預期不同的儲存貯體執行操作。為了避免在這種情況下意外的儲存貯體互動，您可以使用*儲存貯體擁有者條件*。如需詳細資訊，請參閱[使用儲存貯體擁有者條件驗證儲存貯體擁有權](bucket-owner-condition.md)。

在您的帳戶區域命名空間中建立儲存貯體時，適用下列限制和考量事項：
+ 任何嘗試重新建立您已在任何區域中擁有的帳戶區域命名空間儲存貯 AWS 體都會傳回 HTTP 409 BucketAlreadyOwnedByYou 錯誤。
+ 您應該使用 S3 區域端點在帳戶區域命名空間中建立儲存貯體。為了[回溯相容性](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#VirtualHostingBackwardsCompatibility)，您可以使用舊版全域端點，在美國東部 （維吉尼亞北部） 區域中的帳戶區域命名空間中建立儲存貯體。
+ 您的帳戶區域尾碼會計入一般用途儲存貯體名稱中允許的 63 個字元上限。因此，如果您的帳戶區域字尾是 `-012345678910-us-east-1-an`，則您的儲存貯體名稱字首有 37 個字元可用。

## AWS 區域碼格式
<a name="region-code-format"></a>

若要在帳戶區域命名空間中建立儲存貯體，您必須在要建立一般用途儲存貯體的尾碼中包含 AWS 區域。您必須在尾碼中指定完整的 AWS 區域代碼 （例如 `us-west-2`)。如需[AWS 區域](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions)代碼的完整清單，請參閱 AWS 區域。下列儲存貯體名稱顯示您在帳戶 AWS 區域命名空間中建立儲存貯體時必須使用的區域碼格式的兩個範例：
+ `amzn-s3-demo-bucket-012345678910-ap-southeast-1-an`
+ `amzn-s3-demo-bucket-987654321012-eu-north-1-an`

## 要求在您的帳戶區域命名空間中建立儲存貯體
<a name="require-account-regional"></a>

您可以強制執行您的 IAM 委託人只在您的帳戶區域命名空間中建立儲存貯體。使用 `s3:x-amz-bucket-namespace` 條件金鑰。下列範例示範如何在 IAM 政策、資源控制政策或服務控制政策中強制執行帳戶區域儲存貯體建立。

### IAM 政策
<a name="require-iam-policy"></a>

如果請求不包含設定為 account-regional 的 x-amz-bucket-namespace 標頭，則下列 IAM 政策會拒絕 IAM 主體的 s3：CreateBucket 許可。 CreateBucket x-amz-bucket-namespace 

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

### 資源控制政策
<a name="require-rcp"></a>

如果請求不包含設定為 account-regional 的 x-amz-bucket-namespace 標頭，下列資源控制政策會拒絕所有人的 s3：CreateBucket 許可。 x-amz-bucket-namespace 

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

### 服務控制政策
<a name="require-scp"></a>

如果請求不包含設定為 account-regional 的 x-amz-bucket-namespace 標頭，下列服務控制政策會拒絕所有人的 s3：CreateBucket 許可。 x-amz-bucket-namespace 

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

## 在您的帳戶區域命名空間中建立儲存貯體
<a name="create-account-regional-bucket"></a>

下列範例說明如何在帳戶區域命名空間中建立一般用途儲存貯體。

### 使用 AWS CLI
<a name="create-account-regional-cli"></a>

下列 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
```