Multi-Region Access Point를 지원되는 API 작업과 함께 사용

Multi-Region Access Point를 지원되는 API 작업과 함께 사용 (Using Multi-Region Access Points with supported API operations)

Amazon S3는 Multi-Region Access Point를 관리하는 일련의 작업을 제공해요. Amazon S3는 이러한 작업 중 일부를 동기적으로, 일부를 비동기적으로 처리해요. 비동기 작업을 호출하면 Amazon S3는 먼저 요청된 작업을 동기적으로 승인해요. 승인이 성공하면 Amazon S3는 요청된 작업의 진행 상황과 결과를 추적하는 데 사용할 수 있는 토큰을 반환해요.

참고 Amazon S3 콘솔을 통해 이루어진 요청은 항상 동기적이에요. 콘솔은 다른 요청을 제출할 수 있게 하기 전에 요청이 완료될 때까지 기다려요.

콘솔을 사용하거나 AWS CLI, AWS SDK 또는 REST API의 DescribeMultiRegionAccessPointOperation을 사용해 비동기 작업의 현재 상태와 결과를 볼 수 있어요. Amazon S3는 비동기 작업에 대한 응답으로 추적 토큰을 제공해요. 그 추적 토큰을 DescribeMultiRegionAccessPointOperation의 인수로 포함해요. 추적 토큰을 포함하면 Amazon S3는 오류나 관련 리소스 정보를 포함해 지정된 작업의 현재 상태와 결과를 반환해요. Amazon S3는 DescribeMultiRegionAccessPointOperation 작업을 동기적으로 수행해요.

Multi-Region Access Point를 만들거나 유지하는 모든 제어 평면 요청은 US West(Oregon) 리전으로 라우팅되어야 해요. Multi-Region Access Point 데이터 평면 요청의 경우 리전을 지정할 필요가 없어요. Multi-Region Access Point 장애 조치 제어 평면의 경우 요청이 지원되는 5개 리전 중 하나로 라우팅되어야 해요. Multi-Region Access Point 지원 리전에 대한 자세한 내용은 Multi-Region Access Point 제한 사항을 참고하세요.

또한 Multi-Region Access Point를 관리하는 요청을 하는 사용자, 역할 또는 기타 AWS Identity and Access Management(IAM) 엔터티에 s3:ListAllMyBuckets 권한을 부여해야 해요.

다음 예시는 Amazon S3에서 호환되는 작업과 함께 Multi-Region Access Point를 사용하는 방법을 보여줘요.

주제

  • AWS 서비스 및 AWS SDK와의 Multi-Region Access Point 호환성
  • S3 작업과의 Multi-Region Access Point 호환성
  • Multi-Region Access Point 라우팅 구성 보기
  • 기본 Amazon S3 버킷 정책 업데이트
  • Multi-Region Access Point 경로 구성 업데이트
  • Multi-Region Access Point의 버킷에 객체 추가
  • Multi-Region Access Point에서 객체 검색
  • Multi-Region Access Point의 기본 버킷에 저장된 객체 나열
  • Multi-Region Access Point와 사전 서명된 URL 사용
  • Multi-Region Access Point와 Requester Pays로 구성된 버킷 사용

본문

AWS 서비스 및 AWS SDK와의 Multi-Region Access Point 호환성

Amazon S3 버킷 이름을 요구하는 애플리케이션과 함께 Multi-Region Access Point를 사용하려면 AWS SDK를 사용해 요청할 때 Multi-Region Access Point의 Amazon Resource Name(ARN)을 사용해요. Multi-Region Access Point와 호환되는 AWS SDK를 확인하려면 AWS SDK와의 호환성을 참고하세요.

S3 작업과의 Multi-Region Access Point 호환성

Multi-Region Access Point와 연결된 버킷의 객체에 대해 작업을 수행하는 데 다음 Amazon S3 데이터 평면 API 작업을 사용할 수 있어요. 다음 S3 작업은 Multi-Region Access Point ARN을 허용할 수 있어요.

AbortMultipartUpload, CompleteMultipartUpload, CreateMultipartUpload, DeleteObject, DeleteObjectTagging, GetObject, GetObjectAcl, GetObjectLegalHold, GetObjectRetention, GetObjectTagging, HeadObject, ListMultipartUploads, ListObjectsV2, ListParts, PutObject, PutObjectAcl, PutObjectLegalHold, PutObjectRetention, PutObjectTagging, RestoreObject, UploadPart

참고 Multi-Region Access Point는 Multi-Region Access Point ARN을 사용할 때 대상으로만 Multi-Region Access Point를 사용하는 복사 작업을 지원해요.

다음 Amazon S3 제어 평면 작업을 사용해 Multi-Region Access Point를 만들고 관리할 수 있어요.

CreateMultiRegionAccessPoint, DescribeMultiRegionAccessPointOperation, GetMultiRegionAccessPoint, GetMultiRegionAccessPointPolicy, GetMultiRegionAccessPointPolicyStatus, GetMultiRegionAccessPointRoutes, ListMultiRegionAccessPoints, PutMultiRegionAccessPointPolicy, SubmitMultiRegionAccessPointRoutes

Multi-Region Access Point 라우팅 구성 보기

AWS CLI

다음 예시 명령은 Multi-Region Access Point 경로 구성을 검색해 버킷의 현재 라우팅 상태를 확인할 수 있게 해줘요. 이 예시 명령을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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 코드는 Multi-Region Access Point 경로 구성을 검색해 버킷의 현재 라우팅 상태를 확인할 수 있게 해줘요. 이 예시 구문을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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 코드는 Multi-Region Access Point 경로 구성을 검색해 버킷의 현재 라우팅 상태를 확인할 수 있게 해줘요. 이 예시 구문을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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

다음 AWS SDK for Python(Boto3) 코드는 Multi-Region Access Point 경로 구성을 검색해 버킷의 현재 라우팅 상태를 확인할 수 있게 해줘요. 이 예시 구문을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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

기본 Amazon S3 버킷 정책 업데이트

적절한 액세스를 부여하려면 기본 Amazon S3 버킷 정책도 업데이트해야 해요. 다음 예시는 액세스 제어를 Multi-Region Access Point 정책에 위임해요. Multi-Region Access Point 정책에 액세스 제어를 위임한 후에는 Multi-Region Access Point를 통해 요청할 때 버킷 정책이 더 이상 액세스 제어에 사용되지 않아요.

다음은 액세스 제어를 Multi-Region Access Point 정책에 위임하는 예시 버킷 정책이에요. 이 예시 버킷 정책을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요. 이 정책을 다음 예시의 put-bucket-policy 명령처럼 AWS CLI를 통해 적용하려면 정책을 policy.json 같은 파일에 저장해요.

JSON

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::444455556666:root"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "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

Multi-Region Access Point 경로 구성 업데이트

다음 예시 명령은 Multi-Region Access Point 경로 구성을 업데이트해요. Multi-Region Access Point 경로 명령은 다음 5개 리전에서 실행할 수 있어요: ap-southeast-2, ap-northeast-1, us-east-1, us-west-2, eu-west-1.

Multi-Region Access Point 라우팅 구성에서 버킷을 활성(active) 또는 수동(passive) 라우팅 상태로 설정할 수 있어요. 활성 버킷은 트래픽을 받고 수동 버킷은 받지 않아요. 버킷의 TrafficDialPercentage 값을 활성의 경우 100, 수동의 경우 0으로 설정해 버킷의 라우팅 상태를 설정할 수 있어요.

AWS CLI

다음 예시 명령은 Multi-Region Access Point 라우팅 구성을 업데이트해요. 이 예시에서 amzn-s3-demo-bucket1은 활성 상태로, amzn-s3-demo-bucket2는 수동 상태로 설정돼요. 이 예시 명령을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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 코드는 Multi-Region Access Point 라우팅 구성을 업데이트해요. 이 예시 구문을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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 코드는 Multi-Region Access Point 경로 구성을 업데이트해요. 이 예시 구문을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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

다음 AWS SDK for Python(Boto3) 코드는 Multi-Region Access Point 경로 구성을 업데이트해요. 이 예시 구문을 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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
        }
    ])

Multi-Region Access Point의 버킷에 객체 추가

Multi-Region Access Point와 연결된 버킷에 객체를 추가하려면 PutObject 작업을 사용할 수 있어요. Multi-Region Access Point의 모든 버킷을 동기화 상태로 유지하려면 교차 리전 복제를 활성화해요.

참고 이 작업을 사용하려면 Multi-Region Access Point에 대해 s3:PutObject 권한이 있어야 해요. Multi-Region Access Point 권한 요구 사항에 대한 자세한 내용은 권한을 참고하세요.

AWS CLI

다음 예시 데이터 평면 요청은 example.txt를 지정된 Multi-Region Access Point에 업로드해요. 이 예시를 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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

import boto3

client = boto3.client('s3')
client.put_object(
    Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap',
    Key='example.txt',
    Body='Hello S3!'
)

Multi-Region Access Point에서 객체 검색

Multi-Region Access Point에서 객체를 검색하려면 GetObject 작업을 사용할 수 있어요.

참고 이 API 작업을 사용하려면 Multi-Region Access Point에 대해 s3:GetObject 권한이 있어야 해요. Multi-Region Access Point 권한 요구 사항에 대한 자세한 내용은 권한을 참고하세요.

AWS CLI

다음 예시 데이터 평면 요청은 지정된 Multi-Region Access Point에서 example.txt를 검색해 downloaded_example.txt로 다운로드해요. 이 예시를 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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

import boto3

client = boto3.client('s3')
client.get_object(
    Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap',
    Key='example.txt'
)

Multi-Region Access Point의 기본 버킷에 저장된 객체 나열

Multi-Region Access Point의 기본 버킷에 저장된 객체 목록을 반환하려면 ListObjectsV2 작업을 사용해요. 다음 예시 명령에서 지정된 Multi-Region Access Point의 모든 객체는 Multi-Region Access Point의 ARN을 사용해 나열돼요. 이 경우 Multi-Region Access Point ARN은 arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap이에요.

참고 이 API 작업을 사용하려면 Multi-Region Access Point와 기본 버킷에 대해 s3:ListBucket 권한이 있어야 해요. Multi-Region Access Point 권한 요구 사항에 대한 자세한 내용은 권한을 참고하세요.

AWS CLI

다음 예시 데이터 평면 요청은 ARN으로 지정된 Multi-Region Access Point의 기본 버킷에 있는 객체를 나열해요. 이 예시를 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

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

import boto3

client = boto3.client('s3')
client.list_objects_v2(
    Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap'
)

Multi-Region Access Point와 사전 서명된 URL 사용

사전 서명된 URL을 사용해 다른 사람이 Amazon S3 Multi-Region Access Point를 통해 Amazon S3 버킷에 접근할 수 있는 URL을 생성할 수 있어요. 사전 서명된 URL을 만들 때 S3 업로드(PutObject)나 S3 다운로드(GetObject) 같은 특정 객체 작업과 연결해요. 사전 서명된 URL을 공유할 수 있으며, 이를 사용할 수 있는 사람은 누구나 원래 서명한 사용자인 것처럼 URL에 포함된 작업을 수행할 수 있어요.

사전 서명된 URL에는 만료 날짜가 있어요. 만료 시간에 도달하면 URL은 더 이상 작동하지 않아요.

Multi-Region Access Point를 사전 서명된 URL과 함께 사용하기 전에 AWS SDK가 SigV4A 알고리즘과 호환되는지 확인해요. 전역 AWS 리전 요청을 서명하는 데 사용되는 서명 구현으로 SigV4A를 지원하는 SDK 버전을 확인해요. Amazon S3에서 사전 서명된 URL 사용에 대한 자세한 내용은 사전 서명된 URL로 객체 공유를 참고하세요.

다음 예시는 Multi-Region Access Point를 사전 서명된 URL과 함께 사용하는 방법을 보여줘요. 이 예시를 사용하려면 user input 자리 표시자를 자신의 정보로 바꿔요.

AWS CLI

aws s3 presign arn:aws:s3::123456789012:accesspoint/MultiRegionAccessPoint_alias/example-file.txt

SDK for Python (Boto3)

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가 전역 엔드포인트에서 임시 자격 증명을 생성하는데, 이는 SigV4A에서 지원되지 않아요. 결과적으로 오류가 발생해요. 이 문제를 해결하려면 나열된 AWS STS 리전별 엔드포인트 중 하나를 사용해요.

Multi-Region Access Point와 Requester Pays로 구성된 버킷 사용

Multi-Region Access Point와 연결된 S3 버킷이 Requester Pays를 사용하도록 구성된 경우, 요청자가 버킷 요청, 다운로드 및 Multi-Region Access Point 관련 비용을 지불해요. 자세한 내용은 Amazon S3 pricing을 참고하세요.

다음은 Requester Pays 버킷에 연결된 Multi-Region Access Point에 대한 데이터 평면 요청의 예시예요.

AWS CLI

Requester Pays 버킷에 연결된 Multi-Region Access Point에서 객체를 다운로드하려면 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

Requester Pays 버킷에 연결된 Multi-Region Access Point에서 객체를 다운로드하려면 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();

출처: 문서

더 알아보기