

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

# 在一般用途儲存貯體中啟用 ABAC
<a name="buckets-tagging-enable-abac"></a>

屬性型存取控制 (ABAC) 是一種授權策略，您可以用來根據屬性定義許可，即標籤。根據預設，所有 Amazon S3 一般用途儲存貯體都會停用 ABAC。若要將 ABAC 用於一般用途儲存貯體，您必須啟用它。

為您的一般用途儲存貯體啟用 ABAC 之前，建議您先完成下列主題中所述的任務：

**Topics**
+ [

## 啟用 ABAC 前稽核政策
](#buckets-tagging-enable-abac-audit)

## 啟用 ABAC 前稽核政策
<a name="buckets-tagging-enable-abac-audit"></a>

在您為儲存貯體啟用 ABAC 之前，如果您的儲存貯體有標籤，請稽核您的存取控制政策，以檢閱標籤型條件是否參考儲存貯體上的任何現有標籤。如果這樣做，請確認這些政策已如預期設定，且啟用標籤型存取控制不會對您的 Amazon S3 工作流程建立意外授權變更。這樣做可協助您確保在儲存貯體上啟用 ABAC 後，政策可如預期般運作。如需使用屬性型條件搭配標籤的範例，請參閱 [搭配 S3 一般用途儲存貯體使用標籤](buckets-tagging.md)。

### 在 IAM 政策中包含必要的許可
<a name="buckets-tagging-enable-abac-permissions"></a>

您需要下列 Amazon S3 許可，才能為您的儲存貯體啟用 ABAC：
+ `s3:PutBucketAbac` – 更新一般用途儲存貯體的 ABAC 狀態。
+ `s3:GetBucketAbac` – 檢視一般用途儲存貯體的 ABAC 狀態

啟用 ABAC 之後，您先前用來將標籤新增至儲存貯體或從儲存貯體`PutBucketTagging`或 刪除標籤的許可`DeleteBucketTagging`將無法再運作。反之，請使用 `TagResource`和 *UntagResource* APIs來執行這些任務。

我們建議您在儲存貯體上啟用 ABAC 之前，使用 `TagResource`和 `UntagResource` API 來管理標記。 APIs Amazon S3 主控台和 CloudFormation 現在預設使用 `TagResource`和 `UntagResource` API。 APIs 您也可以使用 `PutBucketAbac` API 在儲存貯體上停用 ABAC。您可以使用 `GetBucketTagging` 列出儲存貯體上的標籤。在您為儲存貯體啟用 ABAC 之後，此 API 將繼續運作。或者，您也可以使用 `ListTagsForResource` 列出儲存貯體上的所有標籤。

您需要下列許可，才能將標籤套用至 ，並從一般用途儲存貯體中移除標籤。
+ `s3:TagResource` - 將標籤新增至 AWS 資源，例如 Amazon S3 一般用途儲存貯體。
+ `s3:UntagResource` - 從 AWS 資源移除標籤，例如 Amazon S3 一般用途儲存貯體。
+ `s3:ListTagsForResource` - 檢視套用至 AWS 資源的標籤，例如 Amazon S3 一般用途儲存貯體。

下列 IAM 政策授予許可，以啟用 ABAC 並檢視儲存貯體的狀態。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutBucketAbac",
        "s3:GetBucketAbac"
      ],
      "Resource": "arn:aws:s3:::my-s3-bucket/*"
    }
  ]
}
```

如需標記一般用途儲存貯體和一般用途儲存貯體的範例 ABAC 政策的詳細資訊，請參閱 [搭配 S3 一般用途儲存貯體使用標籤](buckets-tagging.md)。

### 步驟
<a name="bucket-tag-add-steps"></a>

如果您有一般用途儲存貯體的`s3:PutBucketAbac`許可，您可以使用 Amazon S3 主控台、 AWS 命令列界面 (AWS CLI)、Amazon S3 REST API 和 AWS SDKs ABAC。

### 使用 S3 主控台
<a name="bucket-enable-abac-console"></a>

若要使用 Amazon S3 主控台啟用一般用途儲存貯體的 ABAC：

1. 從 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 登入 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**儲存貯**體。

1. 選擇儲存貯體名稱。

1. 選擇**屬性**索引標籤。

1. 在**儲存貯體 ABAC** 面板中，選擇**編輯**。

1. 選擇**啟用**切換。

1. 檢閱並確認啟用 ABAC：`TagResource`、 `UntagResource`和 之後管理標籤所需的許可`ListTagsForResource`。

1. 選擇**儲存變更**。

### 使用 AWS SDKs
<a name="bucket-enable-abac-sdks"></a>

------
#### [ SDK for Java 2.x ]

此範例說明如何使用 新增一般用途儲存貯體的啟用 ABAC AWS SDK for Java 2.x。若要使用此命令，請以您自己的資訊取代*使用者輸入預留位置*。

```
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.AbacStatus;
import software.amazon.awssdk.services.s3.model.GetBucketAbacRequest;
import software.amazon.awssdk.services.s3.model.GetBucketAbacResponse;
import software.amazon.awssdk.services.s3.model.PutBucketAbacRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAbacResponse;
import software.amazon.awssdk.regions.Region; 

public class BucketAbac {
    public static void main(String[] args) {
        Region region = Region.US_EAST_1;
        S3Client s3 = S3Client.builder()
            .region(region)
            .build();

        putBucketAbac(s3, "amzn-s3-demo-bucket", "Enabled");
        getBucketAbac(s3, "amzn-s3-demo-bucket");

        putBucketAbac(s3, "amzn-s3-demo-bucket", "Disabled");
        getBucketAbac(s3, "amzn-s3-demo-bucket");
    }

    /**
     * Sets the ABAC (Attribute-Based Access Control) status for a specified S3 bucket.
     * 
     * @param s3 The S3Client instance to use for the API call
     * @param bucketName The name of the S3 bucket to update
     * @param status The desired ABAC status ("Enabled" or "Disabled")
    */
    public static void putBucketAbac(S3Client s3, String bucketName, String status) {
       try {
            AbacStatus abacStatus = AbacStatus.builder()
                .abacStatus(status)
                .build();
            PutBucketAbacReqquest request = PutBucketAbacRequest.builder()
                .bucket(bucketName)
                .abacStatus(abacStatus)
                .build();
            s3.putBucketAbac(request);
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
    
    /**
     * Retrieves the current ABAC (Attribute-Based Access Control) status for a specified S3 bucket.
     * 
     * @param s3 The S3Client instance to use for the API call
     * @param bucketName The name of the S3 bucket to query
    */
    public static void getBucketAbac(S3Client s3, String bucketName) {
       try {
            GetBucketAbacReqquest request = GetBucketAbacRequest.builder()
                .bucket(bucketName)
                .build();
            GetBucketAbacResponse response = s3.getBucketAbac(request);
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```

此範例說明如何使用適用於 Java 的 AWS SDK 2.x，為一般用途儲存貯體新增啟用 ABAC。若要使用 命令，請將 取代`user input placeholders`為您自己的資訊。

------

### 使用 REST API
<a name="bucket-enable-abac-api"></a>

如需將標籤新增至一般用途儲存貯體的 Amazon S3 REST API 支援相關資訊，請參閱 *Amazon Simple Storage Service API 參考*中的下列章節：
+ [PutBucketAbac](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketABAC.html)

### 使用 AWS CLI
<a name="bucket-enable-abac-cli"></a>

若要安裝 AWS CLI，請參閱《 [AWS 使用者指南》中的安裝 CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。 *AWS Command Line Interface *

下列 CLI 範例說明如何使用 為一般用途儲存貯體啟用 ABAC AWS CLI。若要使用此命令，請以您自己的資訊取代*使用者輸入預留位置*。

**要求:**

```
# Enable ABAC on a general purpose bucket

aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Enabled --region us-east-2

# Disable ABAC on a general purpose bucket

aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Disabled --region us-east-2

# Get ABAC status on a general purpose bucket

aws s3api get-bucket-abac --bucket amzn-s3-demo-bucket --region us-east-2
```