註冊位置 - Amazon Simple Storage Service

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

註冊位置

在中建立 Amazon S3 存取授與執行個體之後 AWS 區域 在您的帳戶中,您可以在該執行個體中註冊 S3 位置。S3 存取授與位置將預設 S3 位置 (s3://)、儲存貯體或前綴對應至 AWS Identity and Access Management (IAM)角色。S3 Access Grants 假設此IAM角色可將臨時登入資料分配給存取該特定位置的受權者。您必須先在 S3 Access Grants 執行個體中註冊至少一個位置,然後才能建立存取授與。

建議使用案例

我們建議您註冊預設位置 (s3://) 並將其對應至IAM角色。預設 S3 路徑 (s3://) 上的位置涵蓋了對該儲存貯體中所有 S3 儲存貯體的存取 AWS 區域 您的帳戶。建立存取權授與時,您可以將授與範圍縮小為預設位置內的值區、前置詞或物件。

複雜的存取管理使用案例

更複雜的存取管理使用案例可能會要求您註冊超過預設位置。這種用例的一些示例是:

  • 假設 amzn-s3-demo-bucket 是 S3 Access Grants 執行個體中的註冊位置,其IAM角色對應至該執行個體,但此IAM角色會拒絕存取儲存貯體內的特定前置詞。在此情況下,您可以將IAM角色無法存取的前置詞註冊為個別位置,並將該位置對應至具有必要存取權的不同IAM角色。

  • 假設您要建立授權,以限制只存取虛擬私有雲 (VPC) 端點內的使用者。在這種情況下,您可以為值區註冊一個位置,該值區中的IAM角色會限制VPC端點的存取權。稍後,當受權者要求 S3 存取授與提供登入資料時,S3 存取授權會假定該位置的IAM角色來支付臨時登入資料。除非呼叫者位於VPC端點內,否則此認證將拒絕對特定值區的存取。除了授權中指定的一般READ、或權限之外WRITE,還會套用此拒絕READWRITE權限。

當您註冊位置時,您還必須指定 S3 Access Grants 所假設的IAM角色,以便展示臨時登入資料,並針對特定授與的許可限定範圍。

如果您的使用案例要求您在 S3 Access Grants 執行個體中註冊多個位置,則可以註冊下列任一項目:

S3 URI IAM角色 描述
s3:// Default-IAM-role

預設位置s3://,包括中的所有值區 AWS 區域.

s3://amzn-s3-demo-bucket1/ IAM-role-For-bucket

此位置包括所指定儲存貯體中的所有物件。

s3://amzn-s3-demo-bucket1/prefix-name IAM-role-For-prefix

此位置包括值區中所有物件索引鍵名稱以此前置字元開頭的物件。

在註冊特定值區或前置詞之前,請確定您已執行下列動作:

  • 建立一或多個儲存貯體,其中包含您要授予存取權的資料。這些桶必須位於同一個 AWS 區域 做為您的 S3 存取授與執行個體。如需詳細資訊,請參閱建立儲存貯體

    新增首碼是選擇性步驟。字首是物件索引鍵名稱開頭的字串。您可以使用它們來組織值區中的物件以及存取管理。若要新增字首至儲存貯體,請參閱建立物件索引鍵名稱

  • 建立具有存取 S3 資料之權限的IAM角色 AWS 區域。 如需詳細資訊,請IAM參閱在 AWS IAM Identity Center 用戶指南

  • 在IAM角色信任政策中,將 S3 存取授與服務 (access-grants.s3.amazonaws.com) 主體存取權授予您建立的IAM角色。若要這麼做,您可以建立包含下列陳述式的JSON檔案。若要將信任原則新增至您的帳戶,請參閱使用自訂信任原則建立角色

    TestRolePolicy.json

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity", "sts:SetContext"], "Effect": "Allow", "Principal": {"Service":"access-grants.s3.amazonaws.com"}, "Condition":{ "StringEquals":{ "aws:SourceAccount":"accountId", "aws:SourceArn":"arn:aws:s3:region:accountId:access-grants/default" } //Optionally, for an IAM Identity Center use case, add: "ForAnyValue:StringEquals": { "aws:RequestContextProvider":"arn:aws:iam::aws:contextProvider/IdentityCenter" } } } ] }
  • 建立IAM政策以將 Amazon S3 許可附加到您建立的IAM角色。請參閱下列範例 iam-policy.json 檔案,並將 user input placeholders 取代為您自己的資訊。

    注意
    • 如果您使用伺服器端加密 AWS Key Management Service (AWS KMS) 用於加密您的數據的密鑰,下面的例子包含了必要的 AWS KMS 策略中IAM角色的權限。如果您不使用此功能,您可以從IAM原則中移除這些權限。

    • 只有當登入資料由 S3 存取授權提供時,您才可以限制IAM角色存取 S3 資料。此範例說明如何為特定 S3 存取授與執行個體新增Condition陳述式。若要使用此功能Condition,請將Condition陳述式ARN中的 S3 存取授與執行個體取代為 S3 Access Grants 執行個體ARN,格式如下:arn:aws:s3:region:accountId:access-grants/default

    家庭政策。JSON

    { "Version":"2012-10-17", "Statement": [ { "Sid": "ObjectLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:region:accountId:access-grants/default"] } } }, { "Sid": "ObjectLevelWritePermissions", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:AbortMultipartUpload" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 區域:accountId:access-grants/default"] } } }, { "Sid": "BucketLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 區域:accountId:access-grants/default"] } } }, //Optionally add the following section if you use SSE-KMS encryption { "Sid": "KMSPermissions", "Effect":"Allow", "Action":[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource":[ "*" ] } ] }

您可以使用 Amazon S3 主控台在 S3 存取授權執行個體中註冊位置 AWS Command Line Interface (AWS CLI),Amazon S3 RESTAPI,或 AWS SDKs.

注意

在 S3 Access Grants 執行個體中註冊第一個位置後,您的執行個體仍然沒有任何個別存取權授與。若要建立存取權授與,請參閱建立授權

您必須至少先註冊一個位置,才能透過 S3 Access Grants 授予 S3 資料的存取權。

在 S3 Access Grants 執行個體中註冊位置
  1. 登入 AWS Management Console 並在打開 Amazon S3 控制台https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Access Grants

  3. S3 Access Grants 頁面上,選擇包含您要使用之 S3 Access Grants 執行個體的區域。

    如果您是第一次使用 S3 Access Grants 執行個體,請確定您已完成步驟 1 - 建立 S3 Access Grants 執行個體,並瀏覽至設定 Access Grants 執行個體精靈的步驟 2。如果您已有 S3 Access Grants 執行個體,請選擇檢視詳細資訊,然後從位置索引標籤選擇註冊位置

    1. 對於位置範圍,選擇瀏覽 S3 或輸入要註冊之位置的 S3 URI 路徑。如需 S3 URI 格式,請參閱位置格式表格。輸入 a 之後URI,您可以選擇「檢視」以瀏覽位置。

    2. 對於IAM角色,請選擇下列其中一項:

      • 從現有IAM角色中選擇

        從下拉式清單中選擇IAM角色。選擇角色後,請選擇檢視以確定此角色具有管理您要註冊之位置的必要許可。具體而言,請確認此角色將 sts:AssumeRolests:SetSourceIdentity 許可授予 S3 Access Grants。

      • 輸入IAM角色 ARN

        導覽至主IAM控台。複製IAM角色的 Amazon 資源名稱 (ARN),並將其貼到此方塊中。

    3. 選擇下一步註冊位置完成此操作。

  4. 故障診斷:

    無法註冊位置
    • 位置可能已註冊。

      您可能沒有註冊位置的 s3:CreateAccessGrantsLocation 許可。請聯絡您的帳戶管理員。

若要安裝 AWS CLI,請參閱安裝 AWS CLI 中的 AWS Command Line Interface 使用者指南

您可以在 S3 Access Grants 執行個體中註冊預設位置 s3:// 或自訂位置。請確定您先建立具有該位置的主要存取權限的IAM角色,然後確定您授與 S3 Access Grants 權限以擔任此角色。

若要使用下列範例命令,請將 user input placeholders 取代為您自己的資訊。

範例 建立資源政策

建立允許 S3 存取授與擔任該IAM角色的政策。若要這麼做,您可以建立包含下列陳述式的JSON檔案。若要將資源政策新增至您的帳戶,請參閱建立並連接您的第一個客戶管理政策

TestRolePolicy.json

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity"], "Effect": "Allow", "Principal": {"Service":"access-grants.s3.amazonaws.com"} } ] }
範例 建立角色

執行下列IAM命令以建立角色。

aws iam create-role --role-name accessGrantsTestRole \ --region us-east-2 \ --assume-role-policy-document file://TestRolePolicy.json

執行 create-role 命令會傳回政策:

{ "Role": { "Path": "/", "RoleName": "accessGrantsTestRole", "RoleId": "AROASRDGX4WM4GH55GIDA", "Arn": "arn:aws:iam::111122223333:role/accessGrantsTestRole", "CreateDate": "2023-05-31T18:11:06+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1685556427189", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Effect": "Allow", "Principal": { "Service":"access-grants.s3.amazonaws.com" } } ] } } }

建立IAM政策以將 Amazon S3 許可附加到該IAM角色。請參閱下列範例 iam-policy.json 檔案,並將 user input placeholders 取代為您自己的資訊。

注意

如果您使用伺服器端加密 AWS Key Management Service (AWS KMS)密鑰來加密您的數據,下面的例子添加了必要的 AWS KMS 策略中IAM角色的權限。如果您不使用此功能,您可以從IAM原則中移除這些權限。

為了確保只有在 S3 Access 授與將登入資料排出時,才能使用此IAM角色存取 S3 中的資料,此範例Condition說明如何在IAM政策中新增指定 S3 Access Grants 執行個體 (s3:AccessGrantsInstance: InstanceArn) 的陳述式。使用下列範例政策時,請將 user input placeholders 取代為您自己的資訊。

家庭政策。JSON

{ "Version":"2012-10-17", "Statement": [ { "Sid": "ObjectLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:region:accountId:access-grants/default"] } } }, { "Sid": "ObjectLevelWritePermissions", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:AbortMultipartUpload" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 區域:accountId:access-grants/default"] } } }, { "Sid": "BucketLevelReadPermissions", "Effect":"Allow", "Action":[ "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::*" ], "Condition":{ "StringEquals": { "aws:ResourceAccount": "accountId" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": ["arn:aws:s3:AWS 區域:accountId:access-grants/default"] } } }, { "Sid": "KMSPermissions", "Effect":"Allow", "Action":[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource":[ "*" ] } ] }

執行以下命令:

aws iam put-role-policy \ --role-name accessGrantsTestRole \ --policy-name accessGrantsTestRole \ --policy-document file://iam-policy.json
範例 註冊預設位置
aws s3control create-access-grants-location \ --account-id 111122223333 \ --location-scope s3:// \ --iam-role-arn arn:aws:iam::111122223333:role/accessGrantsTestRole

回應:

{"CreatedAt": "2023-05-31T18:23:48.107000+00:00", "AccessGrantsLocationId": "default", "AccessGrantsLocationArn": "arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default", "LocationScope": "s3://” "IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole" }
範例 註冊自訂位置
aws s3control create-access-grants-location \ --account-id 111122223333 \ --location-scope s3://DOC-BUCKET-EXAMPLE/ \ --iam-role-arn arn:aws:iam::123456789012:role/accessGrantsTestRole

回應:

{"CreatedAt": "2023-05-31T18:23:48.107000+00:00", "AccessGrantsLocationId": "635f1139-1af2-4e43-8131-a4de006eb456", "AccessGrantsLocationArn": "arn:aws:s3:us-east-2: 111122223333:access-grants/default/location/635f1139-1af2-4e43-8131-a4de006eb888", "LocationScope": "s3://DOC-BUCKET-EXAMPLE/", "IAMRoleArn": "arn:aws:iam::111122223333:role/accessGrantsTestRole" }

如需 Amazon S3 REST API 支援管理 S3 存取授權執行個體的相關資訊,請參閱 Amazon 簡單儲存服務API參考中的以下各節:

本節提供如何使用註冊位置的範例 AWS SDKs.

若要使用下列範例,請以您自己的資訊取代 user input placeholders

Java

您可以在 S3 Access Grants 執行個體中註冊預設位置 s3:// 或自訂位置。請確定您先建立具有該位置的主要存取權限的IAM角色,然後確定您授與 S3 Access Grants 權限以擔任此角色。

若要使用下列範例命令,請將 user input placeholders 取代為您自己的資訊。

範例 註冊預設位置

要求:

public void createAccessGrantsLocation() { CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder() .accountId("111122223333") .locationScope("s3://") .iamRoleArn("arn:aws:iam::123456789012:role/accessGrantsTestRole") .build(); CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest); LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse); }

回應:

CreateAccessGrantsLocationResponse( CreatedAt=2023-06-07T04:35:11.027Z, AccessGrantsLocationId=default, AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/default, LocationScope=s3://, IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole )
範例 註冊自訂位置

要求:

public void createAccessGrantsLocation() { CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder() .accountId("111122223333") .locationScope("s3://DOC-BUCKET-EXAMPLE/") .iamRoleArn("arn:aws:iam::111122223333:role/accessGrantsTestRole") .build(); CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest); LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse); }

回應:

CreateAccessGrantsLocationResponse( CreatedAt=2023-06-07T04:35:10.027Z, AccessGrantsLocationId=18cfe6fb-eb5a-4ac5-aba9-8d79f04c2012, AccessGrantsLocationArn=arn:aws:s3:us-east-2:111122223333:access-grants/default/location/18cfe6fb-eb5a-4ac5-aba9-8d79f04c2666, LocationScope= s3://test-bucket-access-grants-user123/, IAMRoleArn=arn:aws:iam::111122223333:role/accessGrantsTestRole )