지원되는 API 작업으로 다중 리전 액세스 포인트 사용 - Amazon Simple Storage Service

지원되는 API 작업으로 다중 리전 액세스 포인트 사용

Amazon S3는 다중 리전 액세스 포인트를 관리하기 위한 일련의 작업을 제공합니다. Amazon S3는 이러한 작업 중 일부를 동기적으로 처리하고 일부는 비동기적으로 처리합니다. 비동기 작업을 호출하면 Amazon S3가 먼저 요청된 작업을 동기적으로 승인합니다. 권한이 부여되면 Amazon S3는 요청한 작업의 진행 상황 및 결과를 추적하는 데 사용할 수 있는 토큰을 반환합니다.

참고

Amazon S3 콘솔을 통한 요청은 항상 동기적입니다. 콘솔은 요청이 완료될 때까지 기다렸다가 다른 요청을 제출할 수 있도록 합니다.

콘솔을 사용하여 비동기 작업의 현재 상태 및 결과를 보거나 AWS CLI, AWS SDK 또는 REST API에서 DescribeMultiRegionAccessPointOperation을 사용할 수 있습니다. Amazon S3는 비동기 작업에 대한 응답으로 추적 토큰을 제공합니다. 해당 추적 토큰을 DescribeMultiRegionAccessPointOperation에 대한 인수로 포함합니다. 추적 토큰을 포함하는 경우 Amazon S3는 다음 단계로 오류나 관련 리소스 정보를 포함하여 지정된 작업의 현재 상태 및 결과를 반환합니다. Amazon S3는 DescribeMultiRegionAccessPointOperation 작업을 동기적으로 수행합니다.

다중 리전 액세스 포인트를 생성하거나 유지하기 위한 모든 모든 컨트롤 플레인 요청은 US West (Oregon) 리전으로 라우팅되어야 합니다. 다중 리전 액세스 포인트 데이터 영역 요청의 경우 리전을 지정할 필요가 없습니다. 다중 리전 액세스 포인트 장애 조치 컨트롤 플레인의 경우 지원되는 다섯 개 리전 중 하나로 요청을 라우팅해야 합니다. 다중 리전 액세스 포인트 지원 리전에 대한 자세한 내용은 다중 리전 액세스 포인트 규제 및 제한 섹션을 참조하세요.

이 밖에도 다중 리전 액세스 포인트 관리를 요청하는 사용자, 역할 또는 기타 AWS Identity and Access Management(IAM) 엔터티에 s3:ListAllMyBuckets 권한을 부여해야 합니다.

다음 예시에서는 Amazon S3에서 호환되는 작업으로 다중 리전 액세스 포인트를 사용하는 방법을 보여줍니다.

AWS 서비스 및 AWS SDK와 다중 리전 액세스 포인트의 호환성

Amazon S3 버킷 이름이 필요한 애플리케이션과 함께 다중 리전 액세스 포인트를 사용하려면 AWS SDK를 사용하여 요청할 때 다중 리전 액세스 포인트의 Amazon 리소스 이름(ARN)을 사용합니다. 어떤 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

다음 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 for 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

다중 리전 액세스 포인트 라우팅 구성 업데이트

다음 예시 명령은 다중 리전 액세스 포인트 라우팅 구성을 업데이트합니다. 다중 리전 액세스 포인트 라우팅 명령은 다음 5개 리전에 대해 실행할 수 있습니다.

  • 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

다음 SDK for Java 코드는 다중 리전 액세스 포인트 라우팅 구성을 업데이트합니다. 이 예시 구문을 사용하려면 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 for 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

다음 SDK for Python 코드는 다중 리전 액세스 포인트 라우팅 구성을 업데이트합니다. 이 예시 구문을 사용하려면 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를 업로드합니다. 이 예제를 사용하려면 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을 사용하여 다른 사람이 Amazon S3 다중 리전 액세스 포인트를 통해 Amazon S3 버킷에 액세스하는 데 사용할 수 있는 URL을 생성할 수 있습니다. 미리 서명된 URL을 생성하면 S3 업로드(PutObject) 또는 S3 다운로드(GetObject)와 같은 특정 객체 작업과 연결됩니다. 미리 서명된 URL을 공유할 수 있으며 URL에 액세스할 수 있는 모든 사용자는 원래 서명 사용자인 것처럼 URL에 포함된 작업을 수행할 수 있습니다.

미리 서명된 URL에는 만료일이 있습니다. 만료 시간에 도달하면 URL이 더 이상 작동하지 않습니다.

미리 서명된 URL과 함께 S3 다중 리전 액세스 포인트를 사용하기 전에 SigV4A 알고리즘과의 AWS SDK 호환성을 확인하세요. 글로벌 AWS 리전 요청에 서명하는 데 사용되는 서명 구현으로 SigV4A 알고리즘을 지원하는 SDK 버전인지 확인하세요. 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);
참고

IAM 역할을 사용하는 경우와 같이 임시 보안 인증 정보와 함께 SigV4A를 사용하려면 글로벌 엔드포인트가 아닌 AWS Security Token Service(AWS STS)의 리전 엔드포인트에서 임시 보안 인증 정보를 요청해야 합니다. AWS STS(sts.amazonaws.com)에 대한 글로벌 엔드포인트를 사용하면 Sig4A에서 지원하지 않는 글로벌 엔드포인트에서 임시 보안 인증 정보가 생성됩니다. 따라서 오류가 발생합니다. 이 문제를 해결하려면 AWS STS 리전 엔드포인트에 나열된 것 중 하나를 사용하세요.

다중 리전 액세스 포인트와 함께 요청자 지불로 구성된 버킷을 사용합니다.

다중 리전 액세스 포인트와 연결된 S3 버킷이 요청자 지불을 사용하도록 구성된 경우 요청자는 버킷 요청과 다운로드, 다중 리전 액세스 포인트 관련 비용을 모두 지불합니다. 자세한 내용은 Amazon S3 요금을 참조하십시오.

다음은 요청자 지불 버킷에 연결된 다중 리전 액세스 포인트에 대한 데이터 영역 요청의 예입니다.

AWS CLI

요청자 지불 버킷에 연결된 다중 리전 액세스 포인트에서 객체를 다운로드하려면 get-object 요청의 일부로 --request-payer requester를 지정해야 합니다. 또한 버킷에 있는 파일의 이름과 다운로드되는 파일을 저장할 위치를 지정해야 합니다.

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

요청자 지불 버킷에 연결된 다중 리전 액세스 포인트에서 객체를 다운로드하려면 GetObject 요청의 일부로 RequestPayer.REQUESTER를 지정해야 합니다. 또한 버킷에 있는 파일의 이름과 파일을 저장할 위치를 지정해야 합니다.

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