AWS PrivateLink for Amazon S3 - Amazon Simple Storage Service

AWS PrivateLink for Amazon S3

Amazon S3용 AWS PrivateLink를 사용하면 인터넷을 통해 연결하지 않고 가상 프라이빗 클라우드(VPC)에서 인터페이스 VPC 엔드포인트(인터페이스 엔드포인트)를 프로비저닝할 수 있습니다. 이러한 엔드포인트는 VPN 및 AWS Direct Connect를 통해 온프레미스에 있거나 VPC 피어링을 통해 다른 AWS 리전에 있는 애플리케이션에서 직접 액세스할 수 있습니다.

인터페이스 엔드포인트는 VPC의 서브넷에서 프라이빗 IP 주소가 할당된 하나 이상의 탄력적 네트워크 인터페이스(ENI)로 표시됩니다. Amazon S3의 인터페이스 엔드포인트에 대한 요청은 Amazon 네트워크의 Amazon S3로 자동 라우팅됩니다. 또한 AWS Direct Connect 또는 AWS Virtual Private Network(AWS VPN)를 통해 온프레미스 애플리케이션에서 VPC의 인터페이스 엔드포인트에 액세스할 수 있습니다. VPC를 온프레미스 네트워크에 연결하는 방법에 대한 자세한 내용은 AWS Direct Connect 사용 설명서AWS 사이트 간 VPN 사용 설명서를 참조하세요.

인터페이스 엔드포인트에 대한 일반적인 정보는 AWS PrivateLink 가이드에서 인터페이스 VPC 엔드포인트(AWS PrivateLink)를 참조하세요.

Amazon S3용 VPC 엔드포인트 유형

두 가지 유형의 VPC 엔드포인트, 게이트웨이 엔드포인트인터페이스 엔드포인트를 사용하여 Amazon S3에 액세스할 수 있습니다. 게이트웨이 엔드포인트는 AWS 네트워크를 통해 VPC에서 Amazon S3에 액세스하기 위해 라우팅 테이블에 지정하는 게이트웨이입니다. 인터페이스 엔드포인트는 프라이빗 IP 주소를 사용하여 VPC, 온프레미스 또는 다른 AWS 리전에서 Amazon S3로 요청을 라우팅함으로써 게이트웨이 엔드포인트의 기능을 확장합니다. 인터페이스 엔드포인트는 게이트웨이 엔드포인트와 호환됩니다. VPC에 기존 게이트웨이 엔드포인트가 있는 경우, 동일한 VPC에서 두 가지 유형의 엔드포인트를 모두 사용할 수 있습니다.

Amazon S3용 게이트웨이 엔드포인트

Amazon S3용 인터페이스 엔드포인트

두 경우 모두, 네트워크 트래픽은 AWS 네트워크에 남아 있습니다.

Amazon S3 퍼블릭 IP 주소 사용

VPC의 프라이빗 IP 주소를 사용하여 Amazon S3에 액세스

온프레미스에서의 액세스 허용하지 않음

온프레미스에서의 액세스 허용

다른 AWS 리전에서의 액세스 허용하지 않음

다른 AWS 리전에서의 액세스 허용

미청구

청구

게이트웨이 엔드포인트에 대한 자세한 내용은 AWS PrivateLink 가이드에서 게이트웨이 VPC 엔드포인트를 참조하세요.

AWS PrivateLink for Amazon S3에는 VPC 제한이 적용됩니다. 자세한 내용은 AWS PrivateLink 가이드에서 인터페이스 엔드포인트 속성 및 제한AWS PrivateLink 할당량을 참조하세요. 또한 다음과 같은 제한 사항이 적용됩니다.

AWS PrivateLink for Amazon S3는 다음을 지원하지 않습니다.

Amazon S3 인터페이스 엔드포인트 액세스

중요

AWS PrivateLink를 사용하여 Amazon S3에 액세스하려면 애플리케이션을 업데이트하여 엔드포인트별 DNS 이름을 사용해야 합니다.

인터페이스 엔드포인트를 생성하면 Amazon S3는 두 가지 유형의 엔드포인트별 S3 DNS 이름인 Regionalzonal을 생성합니다.

  • Regional DNS 이름에는 고유한 VPC 엔드포인트 ID, 서비스 식별자, AWS 리전, vpce.amazonaws.com이(가) 해당 이름에 포함됩니다. 예를 들어, VPC 엔드포인트 ID vpce-1a2b3c4d의 경우, 생성된 DNS 이름은 vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com과(와) 비슷할 수 있습니다.

  • Zonal DNS 이름에는 가용 영역이 포함됩니다(예: vpce-1a2b3c4d-5e6f-us-east-1a.s3.us-east-1.vpce.amazonaws.com). 아키텍처가 가용 영역을 분리하는 경우 이 옵션을 사용할 수 있습니다. 예를 들어, 오류를 제한하거나 리전별 데이터 전송 비용을 줄이는 데 사용할 수 있습니다.

엔드포인트별 S3 DNS 이름은 S3 퍼블릭 DNS 도메인에서 확인할 수 있습니다.

참고

Amazon S3 인터페이스 엔드포인트는 인터페이스 엔드포인트의 프라이빗 DNS 기능을 지원하지 않습니다. 인터페이스 엔드포인트의 프라이빗 DNS에 대한 자세한 내용은 AWS PrivateLink 가이드를 참조하세요.

S3 인터페이스 엔드포인트에서 버킷 및 S3 액세스 포인트에 액세스

AWS CLI 또는 AWS SDK를 사용하여 S3 인터페이스 엔드포인트를 통해 버킷, S3 액세스 포인트, S3 제어 API에 액세스할 수 있습니다.

다음 이미지는 VPC 엔드포인트의 DNS 이름을 찾을 수 있는 VPC 콘솔 세부 정보 탭을 보여줍니다. 이 예에서 VPC 엔드포인트 ID(vpce-id)vpce-0e25b8cdd720f900e이고 DNS 이름vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com입니다.


        VPC 콘솔의 세부 정보 탭의 스크린샷입니다.

엔드포인트별 DNS 이름을 보는 방법에 대한 자세한 내용은 VPC 사용 설명서에서 엔드포인트 서비스 프라이빗 DNS 이름 구성 보기를 참조하세요.

--region--endpoint-url 파라미터를 사용하여 S3 인터페이스 엔드포인트를 통해 S3 버킷, S3 액세스 포인트 또는 S3 제어 API에 액세스합니다.

예제: 엔드포인트 URL을 사용하여 버킷의 객체 나열

다음 예에서 리전 us-east-1, VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com 및 버킷 이름 my-bucket을(를) 해당하는 정보로 바꿉니다.

aws s3 --region us-east-1 --endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com ls s3://my-bucket/

예제: 엔드포인트 URL을 사용하여 액세스 포인트의 객체 나열

다음 예에서 ARN us-east-1:123456789012:accesspoint/test, 리전 us-east-1 및 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을(를) 해당하는 정보로 바꿉니다.

aws s3api list-objects-v2 --bucket arn:aws:s3:us-east-1:123456789012:accesspoint/test --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com

예제: 엔드포인트 URL을 사용하여 S3 컨트롤이 있는 작업 나열

다음 예에서 리전 us-east-1, VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com 및 계정 ID 12345678을(를) 해당하는 정보로 바꿉니다.

aws s3control --region us-east-1 --endpoint-url https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com list-jobs --account-id 12345678

SDK를 최신 버전으로 업데이트하고, S3 인터페이스 엔드포인트를 통해 버킷, 액세스 포인트 또는 S3 제어 API에 액세스하기 위해 엔드포인트 URL을 사용하도록 클라이언트를 구성합니다.

SDK for Python (Boto3)

예: 엔드포인트 URL을 사용하여 S3 버킷에 액세스

다음 예에서 리전 us-east-1 및 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을(를) 해당하는 정보로 바꿉니다.

s3_client = session.client( service_name='s3', region_name='us-east-1', endpoint_url='https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )

예: 엔드포인트 URL을 사용하여 S3 액세스 포인트에 액세스

다음 예에서 리전 us-east-1 및 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을(를) 해당하는 정보로 바꿉니다.

ap_client = session.client( service_name='s3', region_name='us-east-1', endpoint_url='https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )

예: 엔드포인트 URL을 사용하여 S3 제어 API에 액세스

다음 예에서 리전 us-east-1 및 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을(를) 해당하는 정보로 바꿉니다.

control_client = session.client( service_name='s3control', region_name='us-east-1', endpoint_url='https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )
SDK for Java 1.x

예: 엔드포인트 URL을 사용하여 S3 버킷에 액세스

다음 예에서 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을 해당하는 정보로 바꿉니다.

// bucket client final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); List<Bucket> buckets = s3.listBuckets();

예: 엔드포인트 URL을 사용하여 S3 액세스 포인트에 액세스

다음 예에서 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com과 ARN us-east-1:123456789012:accesspoint/prod를 해당하는 정보로 바꿉니다.

// accesspoint client final AmazonS3 s3accesspoint = AmazonS3ClientBuilder.standard().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); ObjectListing objects = s3accesspoint.listObjects("arn:aws:s3:us-east-1:123456789012:accesspoint/prod");

예: 엔드포인트 URL을 사용하여 S3 제어 API에 액세스

다음 예에서 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을 해당하는 정보로 바꿉니다.

// control client final AWSS3Control s3control = AWSS3ControlClient.builder().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); final ListJobsResult jobs = s3control.listJobs(new ListJobsRequest());
SDK for Java 2.x

예: 엔드포인트 URL을 사용하여 S3 버킷에 액세스

다음 예에서 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com과 리전 Region.US_EAST_1을 해당하는 정보로 바꿉니다.

// bucket client Region region = Region.US_EAST_1; s3Client = S3Client.builder().region(region) .endpointOverride(URI.create("https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

예: 엔드포인트 URL을 사용하여 S3 액세스 포인트에 액세스

다음 예에서 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com과 리전 Region.US_EAST_1을 해당하는 정보로 바꿉니다.

// accesspoint client Region region = Region.US_EAST_1; s3Client = S3Client.builder().region(region) .endpointOverride(URI.create("https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

예: 엔드포인트 URL을 사용하여 S3 제어 API에 액세스

다음 예에서 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com과 리전 Region.US_EAST_1을 해당하는 정보로 바꿉니다.

// control client Region region = Region.US_EAST_1; s3ControlClient = S3ControlClient.builder().region(region) .endpointOverride(URI.create("https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

온프레미스 DNS 구성 업데이트

엔드포인트별 DNS 이름을 사용하여 Amazon S3의 인터페이스 엔드포인트에 액세스할 때는 온프레미스 DNS 확인자를 업데이트할 필요가 없습니다. 퍼블릭 Amazon S3 DNS 도메인의 인터페이스 엔드포인트의 프라이빗 IP 주소로 엔드포인트별 DNS 이름을 확인할 수 있습니다.

인터페이스 엔드포인트를 사용하여 VPC의 게이트웨이 엔드포인트 또는 인터넷 게이트웨이 없이 Amazon S3에 액세스

다음 다이어그램과 같이 VPC의 인터페이스 엔드포인트는 Amazon 네트워크를 통해 VPC 내 애플리케이션과 온프레미스 애플리케이션을 모두 Amazon S3로 라우팅할 수 있습니다.


          데이터 흐름 다이어그램은 인터페이스 엔드포인트 및 AWS PrivateLink를 사용하여 온프레미스 및 VPC 내 앱에서 S3로 액세스하는 방법을 보여줍니다.

다이어그램은 다음을 보여 줍니다.

  • 온프레미스 네트워크는 AWS Direct Connect 또는 AWS VPN을 사용하여 VPC A에 연결합니다.

  • 온프레미스 및 VPC A의 애플리케이션은 엔드포인트별 DNS 이름을 사용하여 S3 인터페이스 엔드포인트를 통해 Amazon S3에 액세스합니다.

  • 온프레미스 애플리케이션은 AWS Direct Connect(또는 AWS VPN)를 통해 VPC의 인터페이스 엔드포인트로 데이터를 전송합니다. AWS PrivateLink는 AWS 네트워크를 통해 인터페이스 엔드포인트에서 Amazon S3로 데이터를 이동합니다.

  • VPC 내 애플리케이션도 인터페이스 엔드포인트로 트래픽을 전송합니다. AWS PrivateLink는 AWS 네트워크를 통해 인터페이스 엔드포인트에서 Amazon S3로 데이터를 이동합니다.

동일한 VPC에서 게이트웨이 엔드포인트와 인터페이스 엔드포인트를 함께 사용하여 Amazon S3에 액세스

다음 다이어그램과 같이 인터페이스 엔드포인트를 생성하고 기존 게이트웨이 엔드포인트를 동일한 VPC에 유지할 수 있습니다. 이렇게 하면 VPC 내 애플리케이션이 게이트웨이 엔드포인트를 통해 Amazon S3에 계속 액세스할 수 있으며, 요금은 청구되지 않습니다. 그런 다음 온프레미스 애플리케이션만 인터페이스 엔드포인트를 사용하여 Amazon S3에 액세스합니다. 이러한 방식으로 S3에 액세스하려면 Amazon S3에 대한 엔드포인트별 DNS 이름을 사용하도록 온프레미스 애플리케이션을 업데이트해야 합니다.


            데이터 흐름 다이어그램은 게이트웨이 엔드포인트와 인터페이스 엔드포인트를 함께 사용하여 S3에 액세스하는 방법을 보여줍니다.

다이어그램은 다음을 보여 줍니다.

  • 온프레미스 애플리케이션은 엔드포인트별 DNS 이름을 사용하여 AWS Direct Connect(또는 AWS VPN)를 통해 VPC 내의 인터페이스 엔드포인트로 데이터를 전송합니다. AWS PrivateLink는 AWS 네트워크를 통해 인터페이스 엔드포인트에서 Amazon S3로 데이터를 이동합니다.

  • VPC 내 애플리케이션은 기본 리전 Amazon S3 이름을 사용하여 AWS 네트워크를 통해 Amazon S3에 연결하는 게이트웨이 엔드포인트로 데이터를 전송합니다.

게이트웨이 엔드포인트에 대한 자세한 내용은 VPC 사용 설명서에서 게이트웨이 VPC 엔드포인트를 참조하세요.

Amazon S3에 대한 VPC 엔드포인트 정책 생성

Amazon S3에 대한 액세스를 제어하는 VPC 엔드포인트에 엔드포인트 정책을 연결할 수 있습니다. 이 정책은 다음 정보를 지정합니다.

  • 작업을 수행할 수 있는 AWS Identity and Access Management(IAM) 보안 주체

  • 수행할 수 있는 작업

  • 작업을 수행할 수 있는 리소스

Amazon S3 버킷 정책을 사용하여 버킷 정책의 aws:sourceVpce 조건을 사용하는 특정 VPC 엔드포인트의 특정 버킷에 대한 액세스를 제한할 수도 있습니다. 다음 예에서는 버킷 또는 엔드포인트에 대한 액세스를 제한하는 정책을 보여줍니다.

중요
  • 이 단원에서 설명하는 VPC 엔드포인트에 Amazon S3 버킷 정책을 적용할 경우 의도치 않게 버킷에 대한 액세스를 차단할 수 있습니다. VPC 종단점에서 시작하는 연결에 대한 버킷 액세스를 특별히 제한하기 위한 버킷 권한은 버킷에 대한 모든 연결을 차단할 수 있습니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 버킷 정책의 VPC 또는 VPC 엔드포인트 ID가 올바르지 않습니다. 버킷에 액세스할 수 있도록 정책을 수정하는 방법은 무엇입니까?(AWS 지원 지식 센터)를 참조하십시오.

  • 다음 예제 정책을 사용하기 전에 VPC 종단점 ID를 사용 사례에 적합한 값으로 바꾸십시오. 그렇지 않으면 버킷에 액세스할 수 없습니다.

  • 콘솔 요청은 지정된 VPC 종단점에서 발생하지 않으므로 이 정책은 지정된 버킷에 대한 콘솔 액세스를 비활성화합니다.

특정 Amazon S3 버킷에 대한 액세스만 제한하는 엔드포인트 정책을 생성할 수 있습니다. 이러한 정책은 VPC에 버킷을 사용하는 다른 AWS 서비스가 있는 경우에 유용합니다. 다음 버킷 정책은 DOC-EXAMPLE-BUCKET1에 대한 액세스만 제한합니다. DOC-EXAMPLE-BUCKET1을 버킷의 이름으로 바꿉니다.

{ "Version": "2012-10-17", "Id": "Policy1415115909151", "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*"] } ] }

특정 AWS 계정의 S3 버킷에 대해서만 액세스를 제한하는 정책을 생성할 수 있습니다. VPC 내의 클라이언트가 자신이 소유하지 않은 버킷에 액세스하지 못하게 하려면 이 옵션을 사용합니다. 다음 예에서는 단일 AWS 계정 ID, 111122223333이 소유한 리소스에 대한 액세스를 제한하는 정책을 생성합니다.

{ "Statement": [ { "Sid": "Access-to-bucket-in-specific-account-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "111122223333" } } } ] }

예제: S3 버킷 정책의 특정 VPC 엔드포인트에 대한 액세스 제한

다음 Amazon S3 버킷 정책은 엔드포인트 vpce-1a2b3c4d에서 특정 버킷, DOC-EXAMPLE-BUCKET2에 대한 액세스만 허용합니다. 이 정책은 지정된 엔드포인트가 사용되지 않으면 버킷에 대한 모든 액세스를 거부합니다. aws:sourceVpce 조건은 엔드포인트를 지정하는 데 사용되며 VPC 엔드포인트 리소스에 대한 Amazon 리소스 이름(ARN)이 필요하지 않고 엔드포인트 ID만 필요합니다. DOC-EXAMPLE-BUCKET2vpce-1a2b3c4d을(를) 실제 버킷 이름과 엔드포인트로 교체합니다.

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET2", "arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*"], "Condition": {"StringNotEquals": {"aws:sourceVpce": "vpce-1a2b3c4d"}} } ] }

자세한 정책 예는 VPC 사용 설명서에서 Amazon S3용 엔드포인트를 참조하세요.

VPC 연결에 대한 자세한 내용은 AWS 백서, Amazon Virtual Private Cloud(VPC) 연결 옵션에서 네트워크와 VPC 연결 옵션을 참조하세요.