註冊位置 - Amazon Simple Storage Service

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

註冊位置

在 AWS 區域 帳戶中的 中建立 Amazon S3 Access Grants 執行個體後,您會在該執行個體中註冊 S3 位置。S3 Access Grants 位置會將預設 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 Access Grants 提供憑證時,S3 Access Grants 會擔任該位置IAM的角色來提供臨時憑證。除非呼叫者位於VPC端點內,否則此憑證將拒絕存取特定儲存貯體。除了授予中指定的一般 WRITE、 或 許可之外READ,還會套用此拒絕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 Access Grants 執行個體位於相同的 中。如需詳細資訊,請參閱建立儲存貯體

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

  • 建立具有存取 中 S3 資料許可IAM的角色 AWS 區域。如需詳細資訊,請參閱 AWS IAM Identity Center 使用者指南 中的建立IAM角色

  • 在IAM角色信任政策中,授予 S3 Access Grants 服務 (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) 金鑰來加密資料,下列範例會包含政策中IAM角色的必要 AWS KMS 許可。如果您不使用此功能,您可以從IAM政策中移除這些許可。

    • 只有在憑證被 S3 Access Grants 取代時,您才能限制IAM角色存取 S3 資料。此範例示範如何新增特定 S3 Access Grants 執行個體的Condition陳述式。若要使用此 Condition,請將 Condition陳述ARN式中的 S3 Access Grants 執行個體取代為您的 S3 Access Grants 執行個體 ARN,其格式為: arn:aws:s3:region:accountId:access-grants/default

    iam-policy.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 主控台、 AWS Command Line Interface (AWS CLI)API、Amazon S3 REST 或 ,在 S3 Access Grants 執行個體中註冊位置 AWS SDKs。 Amazon S3

注意

註冊 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 格式,請參閱位置格式資料表。輸入 後URI,您可以選擇檢視來瀏覽位置。

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

      • 從現有IAM角色中選擇

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

      • 輸入IAM角色 ARN

        導覽至IAM主控台 。複製IAM角色的 Amazon Resource Name (ARN),並將其貼在此方塊中。

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

  4. 故障診斷:

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

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

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

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

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

範例 建立資源政策

建立允許 S3 Access Grants 擔任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" } } ] } } }

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

注意

如果您使用伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰來加密資料,下列範例會為政策中IAM的角色新增必要的 AWS KMS 許可。如果您不使用此功能,您可以從IAM政策中移除這些許可。

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

iam-policy.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" }

如需管理 S3 Access Grants 執行個體的 Amazon S3 RESTAPI支援相關資訊,請參閱 Amazon Simple Storage Service 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 )