將多區域存取點與支援的 API 操作搭配使用 - Amazon Simple Storage Service

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

將多區域存取點與支援的 API 操作搭配使用

Amazon S3 提供一組可管理多區域存取點的操作。Amazon S3 會同步處理其中一些操作,也會非同步處理另一些操作。當您叫用非同步操作時,Amazon S3 會先同步授權請求的操作。如果授權成功,Amazon S3 會傳回一個字符,而您可以用它來追蹤請求的操作的進度和結果。

注意

透過 Amazon S3 主控台提出的請求始終同步。主控台會等到請求完成後,才會允許您提交其他請求。

您可以使用主控台檢視非同步操作的目前狀態和結果,也可以在 AWS SDKs、 AWS CLI或 REST DescribeMultiRegionAccessPointOperation中使用 API。Amazon S3 會在回應非同步操作時提供追蹤字符。您可以將該追蹤字符作為 DescribeMultiRegionAccessPointOperation 的參數。當您包括追蹤字符時,Amazon S3 接著會傳回指定操作的目前狀態和結果,包括任何錯誤或相關的資源資訊。Amazon S3 會同步執行 DescribeMultiRegionAccessPointOperation 操作。

所有建立或維護多區域存取點的控制平面請求,都必須路由至 US West (Oregon) 區域。對於多區域存取點資料平面請求,不需要指定區域。對於多區域存取點容錯移轉控制平面,請求必須路由至五個受支援區域的其中一個。如需多區域存取點支援區域的詳細資訊,請參閱 多區域存取點約束與限制

此外,您必須將s3:ListAllMyBuckets許可授予提出管理多區域存取點請求的使用者、角色或其他 AWS Identity and Access Management (IAM) 實體。

下列範例示範如何在 Amazon S3 中搭配相容操作使用多區域存取點。

多區域存取點與 AWS 服務 和 的相容性 AWS SDKs

若要將多區域存取點與需要 Amazon S3 儲存貯體名稱的應用程式搭配使用,請在使用 提出請求時使用多區域存取點的 Amazon Resource Name (ARN) AWS SDK。若要檢查哪些 AWS SDKs與多區域存取點相容,請參閱與 的相容性 AWS SDKs

多區域存取點與 S3 操作的相容性

您可以使用下列 Amazon S3 資料平面API操作,對與多區域存取點相關聯的儲存貯體中的物件執行動作。下列 S3 操作可以接受多區域存取點 ARNs:

注意

多區域存取點僅在使用多區域存取點 時支援使用多區域存取點作為目的地的複製操作ARN。

您可以使用下列 Amazon S3 控制平面操作,來建立和管理您的多區域存取點:

檢視您的多區域存取點路由狀態

AWS CLI

下列範例命令會擷取您的多區域存取點路由組態,以便您可以查看儲存貯體目前的路由狀態。若要使用此範例命令,請以您自己的資訊取代 user input placeholders

aws s3control get-multi-region-access-point-routes --region eu-west-1 --account-id 111122223333 --mrap arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap
SDK for Java

下列 SDK for Java 程式碼會擷取多區域存取點路由組態,以便您可以查看儲存貯體的目前路由狀態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

S3ControlClient s3ControlClient = S3ControlClient.builder() .region(Region.US_EAST_1) .credentialsProvider(credentialsProvider) .build(); GetMultiRegionAccessPointRoutesRequest request = GetMultiRegionAccessPointRoutesRequest.builder() .accountId("111122223333") .mrap("arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap") .build(); GetMultiRegionAccessPointRoutesResponse response = s3ControlClient.getMultiRegionAccessPointRoutes(request);
SDK for JavaScript

下列SDK JavaScript 程式碼會擷取多區域存取點路由組態,以便您可以查看儲存貯體的目前路由狀態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

const REGION = 'us-east-1' const s3ControlClient = new S3ControlClient({ region: REGION }) export const run = async () => { try { const data = await s3ControlClient.send( new GetMultiRegionAccessPointRoutesCommand({ AccountId: '111122223333', Mrap: 'arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap', }) ) console.log('Success', data) return data } catch (err) { console.log('Error', err) } } run()
SDK for Python

下列 SDK for Python 程式碼會擷取多區域存取點路由組態,以便您可以查看儲存貯體的目前路由狀態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

s3.get_multi_region_access_point_routes( AccountId=111122223333, Mrap=arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap)['Routes']

更新您的基礎 Amazon S3 儲存貯體政策

若要授予適當的存取權,您也必須更新基礎 Amazon S3 儲存貯體政策。下列範例將存取控制委派給多區域存取點政策。將存取控制委派給多區域存取點政策後,當透過多區域存取點進行請求時,系統不會再使用該儲存貯體政策來存取控制。

以下是範例儲存貯體政策,可將存取控制委派給多區域存取點政策。若要使用此範例儲存貯體政策,請以您自己的資訊取代 user input placeholders。若要透過 AWS CLI put-bucket-policy命令套用此政策,如下一個範例所示,請將政策儲存在檔案中,例如 policy.json

{ "Version": "2012-10-17", "Statement": { "Principal": { "AWS": "*" }, "Effect": "Allow", "Action": ["s3:*"], "Resource": ["arn:aws:s3:::111122223333/*", "arn:aws:s3:::amzn-s3-demo-bucket"], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "444455556666" } } } }

下列 put-bucket-policy 範例命令會將更新的 S3 儲存貯體政策與您的 S3 儲存貯體建立關聯:

aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file:///tmp/policy.json

更新多區域存取點路由組態

下列範例命令會更新多區域存取點路由組態。可以針對下列五個區域執行多區域存取點路由命令:

  • ap-southeast-2

  • ap-northeast-1

  • us-east-1

  • us-west-2

  • eu-west-1

在多區域存取點路由組態中,您可以將儲存貯體設為主動或被動路由狀態。主動儲存貯體會接收流量,而被動儲存貯體則不會接收流量。您可以將儲存貯體的 TrafficDialPercentage 值設為 100 表示主動或 0 表示被動,來設定儲存貯體的路由狀態。

AWS CLI

下列範例命令會更新您的多區域存取點路由組態。在此範例中,amzn-s3-demo-bucket1 會設為主動狀態,而 amzn-s3-demo-bucket2 會設為被動狀態。若要使用此範例命令,請以您自己的資訊取代 user input placeholders

aws s3control submit-multi-region-access-point-routes --region ap-southeast-2 --account-id 111122223333 --mrap arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap --route-updates Bucket=amzn-s3-demo-bucket1,TrafficDialPercentage=100 Bucket=amzn-s3-demo-bucket2,TrafficDialPercentage=0
SDK for Java

Java 程式碼SDK的下列內容會更新您的多區域存取點路由組態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

S3ControlClient s3ControlClient = S3ControlClient.builder() .region(Region.ap-southeast-2) .credentialsProvider(credentialsProvider) .build(); SubmitMultiRegionAccessPointRoutesRequest request = SubmitMultiRegionAccessPointRoutesRequest.builder() .accountId("111122223333") .mrap("arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap") .routeUpdates( MultiRegionAccessPointRoute.builder() .region("eu-west-1") .trafficDialPercentage(100) .build(), MultiRegionAccessPointRoute.builder() .region("ca-central-1") .bucket("111122223333") .trafficDialPercentage(0) .build() ) .build(); SubmitMultiRegionAccessPointRoutesResponse response = s3ControlClient.submitMultiRegionAccessPointRoutes(request);
SDK for JavaScript

下列SDK JavaScript 程式碼會更新您的多區域存取點路由組態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

const REGION = 'ap-southeast-2' const s3ControlClient = new S3ControlClient({ region: REGION }) export const run = async () => { try { const data = await s3ControlClient.send( new SubmitMultiRegionAccessPointRoutesCommand({ AccountId: '111122223333', Mrap: 'arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap', RouteUpdates: [ { Region: 'eu-west-1', TrafficDialPercentage: 100, }, { Region: 'ca-central-1', Bucket: 'amzn-s3-demo-bucket1', TrafficDialPercentage: 0, }, ], }) ) console.log('Success', data) return data } catch (err) { console.log('Error', err) } } run()
SDK for Python

Python 程式碼SDK的下列內容會更新您的多區域存取點路由組態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

s3.submit_multi_region_access_point_routes( AccountId=111122223333, Mrap=arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap, RouteUpdates= [{ 'Bucket': amzn-s3-demo-bucket, 'Region': ap-southeast-2, 'TrafficDialPercentage': 10 }])

在您的多區域存取點中將物件新增至儲存貯體

若要將物件新增至與多區域存取點相關聯的儲存貯體,您可以使用 PutObject 操作。若要將多區域存取點中的所有儲存貯體保持同步,請啟用跨區域複寫

注意

若要使用這項操作,您必須具有多區域存取點的 s3:PutObject 許可。如需多區域存取點許可需求的詳細資訊,請參閱 許可

AWS CLI

下列範例資料平面請求上傳 example.txt 至指定的多區域存取點。若要使用此範例,請取代 使用者輸入預留位置 使用您自己的資訊。

aws s3api put-object --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap --key example.txt --body example.txt
SDK for Java
S3Client s3Client = S3Client.builder() .build(); PutObjectRequest objectRequest = PutObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example.txt") .build(); s3Client.putObject(objectRequest, RequestBody.fromString("Hello S3!"));
SDK for JavaScript
const client = new S3Client({}); async function putObjectExample() { const command = new PutObjectCommand({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", Key: "example.txt", Body: "Hello S3!", }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.put_object( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap', Key='example.txt', Body='Hello S3!' )

從您的多區域存取點中擷取物件

若要從多區域存取點擷取物件,您可以使用 GetObject 操作。

注意

若要使用此操作API,您必須擁有多區域存取點的s3:GetObject許可。如需多區域存取點許可需求的詳細資訊,請參閱 許可

AWS CLI

下列範例資料平面請求會擷取 example.txt 從指定的多區域存取點下載為 download_example.txt。 若要使用此範例,請取代 使用者輸入預留位置 使用您自己的資訊。

aws s3api get-object --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap --key example.txt downloaded_example.txt
SDK for Java
S3Client s3 = S3Client .builder() .build(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example.txt") .build(); s3Client.getObject(getObjectRequest);
SDK for JavaScript
const client = new S3Client({}) async function getObjectExample() { const command = new GetObjectCommand({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", Key: "example.txt" }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.get_object( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap', Key='example.txt' )

列出存放在以多區域存取點為基礎之儲存貯體的物件

若要傳回儲存在多區域存取點下儲存貯體中的物件清單,請使用 ListObjectsV2 操作。在下列範例命令中,指定多區域存取點的所有物件都會使用多區域存取點ARN的 列出。在此情況下,多區域存取點ARN為:

arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap

注意

若要使用此操作API,您必須擁有多區域存取點和基礎儲存貯體的s3:ListBucket許可。如需多區域存取點許可需求的詳細資訊,請參閱 許可

AWS CLI

下列範例資料平面請求會列出 指定的多區域存取點所屬儲存貯體中的物件ARN。若要使用此範例,請取代 使用者輸入預留位置 使用您自己的資訊。

aws s3api list-objects-v2 --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap
SDK for Java
S3Client s3Client = S3Client.builder() .build(); String bucketName = "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap"; ListObjectsV2Request listObjectsRequest = ListObjectsV2Request .builder() .bucket(bucketName) .build(); s3Client.listObjectsV2(listObjectsRequest);
SDK for JavaScript
const client = new S3Client({}); async function listObjectsExample() { const command = new ListObjectsV2Command({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.list_objects_v2( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap' )

使用預先簽章URL的多區域存取點

您可以使用預先簽章URL的 來產生 URL,允許其他人透過 Amazon S3 多區域存取點存取您的 Amazon S3 儲存貯體。當您建立預先簽章的 時URL,您可以將它與特定物件動作建立關聯,例如 S3 上傳 (PutObject) 或 S3 下載 ()GetObject。您可以共用預先簽署的 URL,而且具有其存取權的任何人都可以執行內嵌在 中的動作URL,就像他們是原始簽署使用者一樣。

預先簽章URLs具有過期日期。達到過期時間時, URL將無法再運作。

在搭配預先簽章的 使用 S3 多區域存取點之前URLs,請檢查與 SigV4A 演算法的AWS SDK相容性。確認您的SDK版本支援 SigV4A 作為簽署實作,用於簽署全域 AWS 區域 請求。如需搭配使用預先簽章URLs與 Amazon S3 的詳細資訊,請參閱使用預先簽章 來共用物件URLs

下列範例示範如何搭配預先簽章的 使用多區域存取點URLs。若要使用這些範例,請取代 使用者輸入預留位置 使用您自己的資訊。

AWS CLI
aws s3 presign arn:aws:s3::123456789012:accesspoint/MultiRegionAccessPoint_alias/example-file.txt
SDK for Python
import logging import boto3 from botocore.exceptions import ClientError s3_client = boto3.client('s3',aws_access_key_id='xxx',aws_secret_access_key='xxx') s3_client.generate_presigned_url(HttpMethod='PUT',ClientMethod="put_object", Params={'Bucket':'arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap','Key':'example-file'})
SDK for Java
S3Presigner s3Presigner = S3Presigner.builder() .credentialsProvider(StsAssumeRoleCredentialsProvider.builder() .refreshRequest(assumeRole) .stsClient(stsClient) .build()) .build(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example-file") .build(); GetObjectPresignRequest preSignedReq = GetObjectPresignRequest.builder() .getObjectRequest(getObjectRequest) .signatureDuration(Duration.ofMinutes(10)) .build(); PresignedGetObjectRequest presignedGetObjectRequest = s3Presigner.presignGetObject(preSignedReq);
注意

若要搭配臨時安全憑證使用 SigV4A,例如使用IAM角色時,請確定您向 AWS Security Token Service (AWS STS) 中的區域端點請求臨時憑證,而不是全域端點。如果您使用 AWS STS (sts.amazonaws.com) 的全域端點, AWS STS 會從全域端點產生臨時憑證,Sig4A 不支援此憑證。因此,您會收到錯誤。若要解決此問題,請使用 中列出的任何區域端點 AWS STS

使用以多區域存取點設定為請求者付款的儲存貯體

若與多區域存取點相關聯的 S3 儲存貯體設定為使用請求者付款,請求者將支付儲存貯體請求、下載和任何多區域存取點的相關費用。如需詳細資訊,請參閱 Simple Storage Service (Amazon S3) 定價

以下範例是多區域存取點的資料平面請求,該多區域存取點連接至請求者付款儲存貯體。

AWS CLI

若要從連線至請求者付款儲存貯體的多區域存取點下載物件,您必須指定 --request-payer requester作為 的一部分 get-object 請求。您也必須指定儲存貯體中檔案的名稱,以及應存放下載檔案的位置。

aws s3api get-object --bucket MultiRegionAccessPoint_ARN --request-payer requester --key example-file-in-bucket.txt example-location-of-downloaded-file.txt
SDK for Java

若要從連接至請求者付款儲存貯體的多區域存取點下載物件,您必須將 RequestPayer.REQUESTER 指定為 GetObject 請求的一部分。您也必須指定儲存貯體中檔案的名稱,以及儲存檔案的位置。

GetObjectResponse getObjectResponse = s3Client.getObject(GetObjectRequest.builder() .key("example-file.txt") .bucket("arn:aws:s3:: 123456789012:accesspoint/abcdef0123456.mrap") .requestPayer(RequestPayer.REQUESTER) .build() ).response();