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

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

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

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

注意

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

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

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

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

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

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

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

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

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

注意

使用「多區域存取點」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

下列適用於 Java 的 SDK 程式碼會擷取您的多區域存取點路由組態,以便您可以查看儲存貯體目前的路由狀態。若要使用此範例語法,請以您自己的資訊取代 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

下列程 JavaScript 式碼 SDK 會擷取您的「多區域存取點」路由設定,以便您查看值區目前的路由狀態。若要使用此範例語法,請以您自己的資訊取代 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

下列適用於 Python 的 SDK 程式碼會擷取您的多區域存取點路由組態,以便您可以查看儲存貯體目前的路由狀態。若要使用此範例語法,請以您自己的資訊取代 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:::DOC-EXAMPLE-BUCKET"], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "444455556666" } } } }

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

aws s3api put-bucket-policy --bucket DOC-EXAMPLE-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

下列範例命令會更新您的多區域存取點路由組態。在此範例中,DOC-EXAMPLE-BUCKET1 會設為主動狀態,而 DOC-EXAMPLE-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=DOC-EXAMPLE-BUCKET1,TrafficDialPercentage=100 Bucket=DOC-EXAMPLE-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

下列 JavaScript 程式碼 SDK 會更新您的多區域存取點路由設定。若要使用此範例語法,請以您自己的資訊取代 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: 'DOC-EXAMPLE-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': DOC-EXAMPLE-BUCKET, 'Region': ap-southeast-2, 'TrafficDialPercentage': 10 }])

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

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

注意

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

AWS CLI

下列範例資料平面請求會將 example.txt 上傳至指定的多區域存取點。若要使用此範例,請以您自己的資訊取代 user input placeholders

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,並將其下載為 downloaded_example.txt。若要使用此範例,請以您自己的資訊取代 user input placeholders

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 所指定多區域存取點為基礎之儲存貯體中的物件。若要使用此範例,請以您自己的資訊取代 user input placeholders

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 中的動作,如同原始簽章使用者一樣。

預先簽章的 URL 具有到期日。過了到期時間,URL 將不再運作起作用。

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

下列範例示範如何搭配預先簽章的 URL 使用多區域存取點。若要使用這些範例,請以您自己的資訊取代 user input placeholders

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();