Amazon S3용 AWS PrivateLink - Amazon Simple Storage Service

Amazon S3용 AWS PrivateLink

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

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

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

Amazon S3용 VPC 엔드포인트 유형

두 가지 유형의 VPC 엔드포인트, 즉 게이트웨이 엔드포인트인터페이스 엔드포인트(AWS PrivateLink 사용)를 사용하여 Amazon S3에 액세스할 수 있습니다. 게이트웨이 엔드포인트는 AWS 네트워크를 통해 VPC에서 Amazon S3에 액세스하기 위해 라우팅 테이블에 지정하는 게이트웨이입니다. 인터페이스 엔드포인트는 프라이빗 IP 주소를 통해 온프레미스의 VPC 내에서 또는 VPC 피어링이나 AWS Transit Gateway를 사용하여 다른 AWS 리전의 VPC에서 Amazon S3로 요청을 라우팅함으로써 게이트웨이 엔드포인트의 기능을 확장합니다. 자세한 내용은 VPC 피어링이란?Transit Gateway 및 VPC 피어링을 참조하십시오.

인터페이스 엔드포인트는 게이트웨이 엔드포인트와 호환됩니다. VPC에 기존 게이트웨이 엔드포인트가 있는 경우, 동일한 VPC에서 두 가지 유형의 엔드포인트를 모두 사용할 수 있습니다.

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

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

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

Amazon S3 퍼블릭 IP 주소 사용

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

동일한 Amazon S3 DNS 이름 사용

엔드포인트별 Amazon S3 DNS 이름 필요

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

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

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

VPC 피어링 또는 AWS Transit Gateway를 사용하여 다른 AWS 리전의 VPC에서 액세스 허용

미청구

청구

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

Amazon S3용 AWS PrivateLink에는 VPC 제한이 적용됩니다. 자세한 내용은 AWS PrivateLink 가이드의 인터페이스 엔드포인트 고려 사항AWS PrivateLink 할당량을 참조하십시오. 또한 다음과 같은 제한 사항이 적용됩니다.

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

VPC 엔드포인트 생성

VPC 인터페이스 엔드포인트를 생성하려면 AWS PrivateLink 설명서 VPC 엔드포인트 생성을 참조하십시오.

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

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

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

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

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

프라이빗 DNS

VPC 인터페이스 엔드포인트의 프라이빗 DNS 옵션은 VPC 엔드포인트를 통한 S3 트래픽 라우팅을 단순화하고 애플리케이션에서 사용할 수 있는 가장 저렴한 네트워크 경로를 활용할 수 있도록 도와줍니다. 프라이빗 DNS 옵션을 사용하면 인터페이스 엔드포인트의 엔드포인트별 DNS 이름을 사용하도록 S3 클라이언트를 업데이트하거나 DNS 인프라를 관리하지 않고도 리전별 S3 트래픽을 라우팅할 수 있습니다. 프라이빗 DNS 이름을 활성화하면 리전별 S3 DNS 쿼리는 다음 엔드포인트에 대한 AWS PrivateLink 프라이빗 IP 주소로 해결됩니다.

  • 리전quf 버킷 엔드포인트(예: s3.us-east-1.amazonaws.com)

  • 제어 엔드포인트(예: s3-control.us-east-1.amazonaws.com)

  • 액세스 포인트 엔드포인트(예: s3-accesspoint.us-east-1.amazonaws.com)

VPC에 게이트웨이 엔드포인트가 있는 경우 VPC 내 요청은 기존 S3 게이트웨이 엔드포인트를 통해, 온프레미스 요청은 인터페이스 엔드포인트를 통해 자동으로 라우팅할 수 있습니다. 이 접근 방식을 사용하면 VPC 내 트래픽에 대해 요금이 청구되지 않는 게이트웨이 엔드포인트를 사용하여 네트워킹 비용을 최적화할 수 있습니다. 온프레미스 애플리케이션은 인바운드 해석기 엔드포인트의 도움을 받아 AWS PrivateLink를 사용할 수 있습니다. Amazon은 Route 53 Resolver라고 하는 VPC용 DNS 서버를 제공합니다. 인바운드 Resolver 엔드포인트는 온프레미스 네트워크 상의 DNS 쿼리를 Route 53 Resolver로 전달합니다.

중요

인바운드 엔드포인트에만 프라이빗 DNS 활성화를 사용할 때 가장 저렴한 네트워크 경로를 활용하려면 VPC 게이트웨이 엔드포인트가 있어야 합니다. 게이트웨이 엔드포인트가 있으면 인바운드 엔드포인트에만 프라이빗 DNS 활성화 옵션을 선택한 경우 VPC 내 트래픽이 항상 AWS 프라이빗 네트워크를 통해 라우팅되도록 할 수 있습니다. 인바운드 엔드포인트에만 프라이빗 DNS 활성화 옵션을 선택한 상태에서 이 게이트웨이 엔드포인트를 유지 관리해야 합니다. 게이트웨이 엔드포인트를 삭제하려면 먼저 인바운드 엔드포인트에만 프라이빗 DNS 활성화를 선택 해제해야 합니다.

기존 인터페이스 엔드포인트를 인바운드 엔드포인트에만 프라이빗 DNS 활성화로 업데이트하려면 먼저 VPC에 S3 게이트웨이 엔드포인트가 있는지 확인하십시오. 게이트웨이 엔드포인트와 프라이빗 DNS 이름 관리에 대한 자세한 내용은 AWS PrivateLink 가이드의 게이트웨이 VPC 엔드포인트DNS 이름 관리를 각각 참조하십시오.

인바운드 엔드포인트에만 프라이빗 DNS 활성화 옵션은 게이트웨이 엔드포인트를 지원하는 서비스에서만 사용할 수 있습니다.

인바운드 엔드포인트에만 프라이빗 DNS 활성화를 사용하는 VPC 엔드포인트를 만드는 방법에 대한 자세한 내용은 AWS PrivateLink 가이드의 인터페이스 엔드포인트 생성을 참조하십시오.

VPC 콘솔 사용

콘솔에는 DNS 이름 활성화인바운드 엔드포인트에만 프라이빗 DNS 활성화라는 두 가지 옵션이 있습니다. DNS 이름 활성화는 AWS PrivateLink에서 지원하는 옵션입니다. DNS 이름 활성화 옵션을 사용하면 기본 퍼블릭 엔드포인트 DNS 이름에 요청을 수행하면서 Amazon S3에 대한 Amazon의 프라이빗 연결을 사용할 수 있습니다. 이 옵션을 활성화하면 고객은 애플리케이션에서 사용할 수 있는 가장 저렴한 네트워크 경로를 활용할 수 있습니다.

Amazon S3에 대한 기존 또는 신규 VPC 인터페이스 엔드포인트에서 프라이빗 DNS 이름을 활성화하면 인바운드 엔드포인트에만 프라이빗 DNS 활성화 옵션이 기본적으로 선택됩니다. 이 옵션을 선택하면 애플리케이션은 온프레미스 트래픽에 인터페이스 엔드포인트만 사용합니다. 이 VPC 내 트래픽은 비용이 상대적으로 저렴한 게이트웨이 엔드포인트를 자동으로 사용합니다. 또는 인바운드 엔드포인트에만 프라이빗 DNS 활성화를 선택 해제하여 인터페이스 엔드포인트를 통해 모든 S3 요청을 라우팅할 수 있습니다.

AWS CLI 사용하기

PrivateDnsOnlyForInboundResolverEndpoint의 값을 지정하지 않으면 true이 기본값으로 사용됩니다. 그러나 VPC는 설정을 적용하기 전에 VPC에 게이트웨이 엔드포인트가 있는지 확인합니다. VPC 게이트웨이 엔드포인트가 있는 경우 호출은 성공합니다. 없다면 다음과 같은 오류 메시지가 나타납니다.

PrivateDnsOnlyForInboundResolverEndpoint를 참으로 설정하려면 VPC vpce_id에 해당 서비스의 게이트웨이 엔드포인트가 있어야 합니다.

신규 VPC 인터페이스 엔드포인트의 경우

private-dns-enableddns-options 특성을 사용하여 명령줄을 통해 프라이빗 DNS를 활성화합니다. dns-options 특성의 PrivateDnsOnlyForInboundResolverEndpoint 옵션은 true으로 설정해야 합니다. user input placeholders를 사용자의 정보로 대체합니다.

aws ec2 create-vpc-endpoint \ --region us-east-1 \ --service-name s3-service-name \ --vpc-id client-vpc-id \ --subnet-ids client-subnet-id \ --vpc-endpoint-type Interface \ --private-dns-enabled \ --ip-address-type ip-address-type \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=true \ --security-group-ids client-sg-id

기존 VPC 엔드포인트의 경우

기존 VPC 엔드포인트에 프라이빗 DNS를 사용하려면 다음 예시 명령을 사용하되 user input placeholders를 실제 정보로 대체하십시오.

aws ec2 modify-vpc-endpoint \ --region us-east-1 \ --vpc-endpoint-id client-vpc-id \ --private-dns-enabled \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=false

인바운드 해석기에서만 프라이빗 DNS를 사용하도록 기존 VPC 엔드포인트를 업데이트하려면 다음 예시를 사용하되 샘플 값을 실제 값으로 바꾸십시오.

aws ec2 modify-vpc-endpoint \ --region us-east-1 \ --vpc-endpoint-id client-vpc-id \ --private-dns-enabled \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=true

S3 인터페이스 엔드포인트에서 버킷, 액세스 포인트, Amazon S3 제어 API 작업에 액세스

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

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

VPC 콘솔의 세부 정보 탭입니다.

DNS 이름을 사용하여 리소스에 액세스할 때는 *를 적절한 값으로 바꾸십시오. * 대신 사용할 적절한 값은 다음과 같습니다.

  • bucket

  • accesspoint

  • control

예를 들어, 버킷에 액세스하려면 다음과 같은 DNS 이름을 사용합니다.

bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com

DNS 이름을 사용하여 버킷, 액세스 포인트 및 Amazon S3 제어 API 작업에 액세스하는 방법의 예는 AWS CLI 예제AWS SDK 예제의 다음 섹션을 참조하십시오.

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

AWS CLI 명령에서 S3 인터페이스 엔드포인트를 통해 S3 버킷, S3 액세스 포인트 또는 S3 제어 API 작업에 액세스하려면 --region--endpoint-url 파라미터를 사용합니다.

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

다음 예시에서 버킷 이름 my-bucket, 리전 us-east-1, VPC 엔드포인트 ID의 DNS 이름 vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을 실제 정보로 바꿉니다.

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

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

  • 방법 1 - 액세스 포인트의 Amazon 리소스 이름(ARN)을 액세스 포인트 엔드포인트에 사용

    ARN us-east-1:123456789012:accesspoint/accesspointexamplename, 리전 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/accesspointexamplename --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com

    명령을 성공적으로 실행할 수 없는 경우 AWS CLI를 최신 버전으로 업데이트하고 다시 시도하십시오. 업데이트 지침에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 AWS CLI의 최신 버전 설치 또는 업데이트를 참조하십시오.

  • 방법 2 - 액세스 포인트의 별칭을 리전 버킷 엔드포인트와 함께 사용

    다음 예시에서 액세스 포인트 별칭 accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias, 리전 us-east-1, VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을 실제 정보로 바꿉니다.

    aws s3api list-objects-v2 --bucket accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias --region us-east-1 --endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
  • 방법 2 - 액세스 포인트의 별칭을 액세스 포인트 엔드포인트와 함께 사용

    먼저 호스트 이름에 버킷이 포함된 S3 엔드포인트를 구성하려면 aws s3api가 사용할 주소 지정 스타일을 virtual로 설정합니다. AWS configure에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 구성 및 자격 증명 파일 설정을 참조하십시오.

    aws configure set default.s3.addressing_style virtual

    그런 다음, 아래 예시에서 액세스 포인트 별칭 accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias, 리전 us-east-1, VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com을 실제 정보로 바꿉니다. 액세스 포인트 별칭에 대한 자세한 내용은 S3 버킷 액세스 지점에 버킷 스타일 별칭 사용 섹션을 참조하세요.

    aws s3api list-objects-v2 --bucket accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
예: 엔드포인트 URL을 사용하여 S3 제어 API 작업이 있는 작업 나열

다음 예시에서 리전 us-east-1, VPC 엔드포인트 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

AWS SDK를 사용하여 S3 인터페이스 엔드포인트를 통해 S3 버킷, S3 액세스 포인트, Amazon S3 제어 API 작업에 액세스하려면 SDK를 최신 버전으로 업데이트하십시오. 그런 다음, S3 인터페이스 엔드포인트를 통해 버킷, 액세스 포인트 또는 Amazon 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을 사용하여 Amazon 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을 사용하여 Amazon 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을 사용하여 Amazon 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를 사용한 Amazon 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에 액세스합니다. 이러한 방식으로 Amazon S3에 액세스하려면 Amazon S3에 대한 엔드포인트별 DNS 이름을 사용하도록 온프레미스 애플리케이션을 업데이트해야 합니다.

게이트웨이 엔드포인트 및 인터페이스 엔드포인트를 사용한 Amazon 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 엔드포인트의 특정 버킷에 대한 액세스를 제한할 수도 있습니다. 다음 예에서는 버킷 또는 엔드포인트에 대한 액세스를 제한하는 정책을 보여줍니다.

특정 Amazon S3 버킷에 대한 액세스만 제한하는 엔드포인트 정책을 생성할 수 있습니다. 이 정책 유형은 VPC에 버킷을 사용하는 다른 AWS 서비스가 있을 경우 유용합니다. 다음 버킷 정책은 example-s3-bucket1에 대한 액세스만 제한합니다. 이 엔드포인트 정책을 사용하려면 example-s3-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:::example-s3-bucket1", "arn:aws:s3:::example-s3-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": { "aws:ResourceAccount": "111122223333" } } } ] }
참고

액세스되는 리소스의 AWS 계정 ID를 지정하려면 IAM 정책에서 aws:ResourceAccount 또는 s3:ResourceAccount 키를 사용하면 됩니다. 그러나 일부 AWS 서비스는 AWS 관리형 버킷에 대한 액세스에 의존합니다. 따라서 IAM 정책에서 aws:ResourceAccount 또는 s3:ResourceAccount 키를 사용하면 이러한 리소스에 대한 액세스에도 영향을 미칠 수 있습니다.

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

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

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

  • 다음 예제 정책을 사용하기 전에 VPC 엔드포인트 ID를 사용 사례에 적합한 값으로 바꾸세요. 그렇지 않으면 버킷에 액세스할 수 없습니다.

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

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

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

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