在一般用途儲存貯體中啟用 ABAC - Amazon Simple Storage Service

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

在一般用途儲存貯體中啟用 ABAC

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

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

啟用 ABAC 前稽核政策

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

在您的 IAM 政策中包含必要的許可

您需要下列 Amazon S3 許可,才能為您的儲存貯體啟用 ABAC:

  • s3:PutBucketAbac – 更新一般用途儲存貯體的 ABAC 狀態。

  • s3:GetBucketAbac – 檢視一般用途儲存貯體的 ABAC 狀態

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

我們建議您在儲存貯體上啟用 ABAC 之前,使用 TagResourceUntagResource API 來管理標記。 APIs Amazon S3 主控台和 CloudFormation 現在預設使用 TagResourceUntagResource 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 一般用途儲存貯體使用標籤

步驟

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

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

  1. https://console.aws.amazon.com/s3/ 登入 Amazon S3 主控台。

  2. 在左側導覽窗格中,選擇儲存貯體。

  3. 選擇儲存貯體名稱。

  4. 選擇屬性索引標籤。

  5. 儲存貯體 ABAC 面板中,選擇編輯

  6. 選擇啟用切換。

  7. 檢閱並確認啟用 ABAC:TagResourceUntagResource和 之後管理標籤所需的許可ListTagsForResource

  8. 選擇儲存變更

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為您自己的資訊。

如需將標籤新增至一般用途儲存貯體的 Amazon S3 REST API 支援相關資訊,請參閱《Amazon Simple Storage Service API 參考》中的下列章節:

若要安裝 AWS CLI,請參閱《 AWS 使用者指南》中的安裝 CLIAWS 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