S3 Tables용 VPC 연결

S3 Tables용 VPC 연결

VPC 엔드포인트(gateway 엔드포인트와 interface 엔드포인트)를 사용해 S3 Tables에 접근하는 방법을 설명해요.

출처: VPC connectivity for S3 Tables

본문

S3 Tables의 모든 테이블은 Apache Iceberg 형식이며, 두 가지 유형의 S3 객체로 이루어져 있어요. 두 유형은 데이터를 저장하는 데이터 파일(data files)과 서로 다른 시점의 데이터 파일 정보를 추적하는 메타데이터 파일(metadata files)이에요. 모든 테이블 버킷·네임스페이스·테이블 작업(예: CreateNamespace, CreateTable 등)은 S3 Tables 엔드포인트(s3tables.region.amazonaws.com)를 통해 라우팅되고, 데이터·메타데이터 파일을 읽거나 쓰는 모든 객체 수준 작업은 S3 서비스 엔드포인트(s3.region.amazonaws.com)를 통해 계속 라우팅돼요.

S3 Tables에 접근하기 위해 Amazon S3는 AWS PrivateLink를 사용한 두 가지 유형의 VPC 엔드포인트, 즉 gateway 엔드포인트와 interface 엔드포인트를 지원해요. gateway 엔드포인트는 AWS 네트워크를 통해 VPC에서 S3에 접근하도록 라우트 테이블에 지정하는 게이트웨이예요. interface 엔드포인트는 private IP 주소를 사용해 VPC 내부, 온프레미스, 또는 VPC 피어링이나 AWS Transit Gateway로 다른 AWS 리전의 VPC에서 Amazon S3로 요청을 라우팅해 gateway 엔드포인트의 기능을 확장해요.

VPC에서 S3 Tables에 접근하려면 두 개의 VPC 엔드포인트(S3용 하나, S3 Tables용 하나)를 만드는 것을 권장해요. 파일(객체) 수준 작업을 S3로 라우팅하려면 gateway 또는 interface 엔드포인트를 만들고, 버킷·테이블 수준 작업을 S3 Tables로 라우팅하려면 interface 엔드포인트를 만들면 돼요. S3를 사용해 파일 수준 요청에 VPC 엔드포인트를 만들고 사용할 수 있어요. 자세한 내용은 AWS PrivateLink User Guide의 Gateway endpoints를 참고해 주세요.

AWS PrivateLink로 S3 Tables용 엔드포인트를 만들고 작업하는 방법에 대한 자세한 내용은 다음 주제를 참고해 주세요. VPC interface 엔드포인트를 만드는 방법은 AWS PrivateLink Guide의 Create a VPC endpoint를 참고해 주세요.

  • S3 Tables용 VPC 엔드포인트 만들기
  • AWS CLI로 엔드포인트를 통해 테이블 버킷과 테이블 접근하기
  • 쿼리 엔진 사용 시 VPC 네트워크 구성하기
  • 이중 스택 엔드포인트로 테이블과 테이블 버킷 접근하기
  • 테이블 버킷 정책과 함께 VPC 엔드포인트 정책 조건 사용하기
  • VPC 네트워크 안에서 S3 Tables에 대한 접근 제한하기

S3 Tables용 VPC 엔드포인트 만들기 (Creating VPC endpoints for S3 Tables)

VPC 엔드포인트를 만들면 S3 Tables는 리전별(Regional)과 가용 영역별(Zonal) 두 가지 유형의 엔드포인트별 DNS 이름을 생성해요.

  • 리전별 DNS 이름 형식: VPCendpointID.s3tables.AWSregion.vpce.amazonaws.com. 예를 들어 VPC 엔드포인트 ID vpce-1a2b3c4d의 경우 생성된 DNS 이름은 vpce-1a2b3c4d-5e6f.s3tables.us-east-1.vpce.amazonaws.com과 비슷해요.
  • 가용 영역별 DNS 이름 형식: VPCendpointID-AvailabilityZone.s3tables.AWSregion.vpce.amazonaws.com. 예를 들어 VPC 엔드포인트 ID vpce-1a2b3c4d-5e6f.의 경우 생성된 DNS 이름은 vpce-1a2b3c4d-5e6f-us-east-1a.s3tables.us-east-1.vpce.amazonaws.com과 비슷해요. 가용 영역별 DNS 이름에는 여러분의 Availability Zone이 포함돼요. 아키텍처가 가용 영역을 분리하는 경우 가용 영역별 DNS 이름을 사용할 수도 있어요. 엔드포인트별 S3 DNS 이름은 S3 퍼블릭 DNS 도메인에서 확인할 수 있어요.

Private DNS 옵션을 사용해 VPC 엔드포인트를 통한 S3 트래픽 라우팅을 단순화하고, 애플리케이션이 사용할 수 있는 최저 비용 네트워크 경로를 활용할 수도 있어요. Private DNS는 S3 Tables의 퍼블릭 엔드포인트(예: s3tables.region.amazonaws.com)를 VPC의 private IP에 매핑해요. Private DNS 옵션을 사용하면 S3 클라이언트를 interface 엔드포인트의 엔드포인트별 DNS 이름을 사용하도록 업데이트하지 않고도 리전별 S3 트래픽을 라우팅할 수 있어요.

AWS CLI로 엔드포인트를 통해 테이블 버킷과 테이블 접근하기

AWS Command Line Interface(AWS CLI)를 사용해 interface 엔드포인트를 통해 테이블 버킷과 테이블에 접근할 수 있어요. AWS CLI에서 aws s3 명령은 Amazon S3 엔드포인트로 트래픽을 라우팅해요. aws s3tables AWS CLI 명령은 Amazon S3 Tables 엔드포인트를 사용해요.

s3tables VPC 엔드포인트 예시는 vpce-0123456afghjipljw-nmopsqea.s3tables.region.vpce.amazonaws.com이에요.

s3tables VPC 엔드포인트는 버킷 이름을 포함하지 않아요. aws s3tables AWS CLI 명령으로 s3tables VPC 엔드포인트에 접근할 수 있어요.

s3 VPC 엔드포인트 예시는 amzn-s3-demo-bucket.vpce-0123456afghjipljw-nmopsqea.s3.region.vpce.amazonaws.com이에요.

aws s3 AWS CLI 명령으로 s3 VPC 엔드포인트에 접근할 수 있어요.

AWS CLI로 interface 엔드포인트를 통해 테이블 버킷과 테이블에 접근하려면 --region과 --endpoint-url 파라미터를 사용해요. 테이블 버킷·테이블 수준 작업에는 S3 Tables 엔드포인트 URL을, 객체 수준 작업에는 Amazon S3 엔드포인트 URL을 사용해요.

다음 예시에서는 사용자 입력 플레이스홀더를 여러분의 정보로 바꿔 넣으세요.

예시 1: 엔드포인트 URL로 계정의 테이블 버킷 나열하기

aws s3tables list-table-buckets --endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com --region us-east-1

예시 2: 엔드포인트 URL로 버킷의 테이블 나열하기

aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789301:bucket/amzn-s3-demo-bucket --endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com --region us-east-1

쿼리 엔진 사용 시 VPC 네트워크 구성하기

쿼리 엔진을 사용할 때 VPC 네트워크를 구성하려면 다음 단계를 따르세요.

  1. 시작하려면 VPC를 만들거나 업데이트할 수 있어요. 자세한 내용은 Create a VPC를 참고해 주세요.
  2. S3 Tables로 라우팅되는 테이블·테이블 버킷 수준 작업을 위해 새 interface 엔드포인트를 만듭니다. 자세한 내용은 Access an AWS service using an interface VPC endpoint를 참고해 주세요.
  3. Amazon S3로 라우팅되는 모든 객체 수준 작업을 위해 gateway 엔드포인트 또는 interface 엔드포인트를 만듭니다. gateway 엔드포인트에 대한 자세한 내용은 Create a gateway endpoint를 참고해 주세요.
  4. 다음으로 데이터 리소스를 구성하고 Amazon EMR 클러스터를 시작합니다. 자세한 내용은 Getting started with Amazon EMR을 참고해 주세요.
  5. 그런 다음 VPC 엔드포인트에서 DNS 이름을 선택해 추가 구성으로 Spark 애플리케이션을 제출할 수 있습니다. 예를 들어 spark.sql.catalog.ice_catalog.s3tables.endpoint와 https://interface-endpoint.s3tables.us-east-1.vpce.amazonaws.com입니다. 자세한 내용은 Submit work to your Amazon EMR cluster를 참고해 주세요.

이중 스택 엔드포인트로 테이블과 테이블 버킷 접근하기

S3 Tables는 AWS PrivateLink용 이중 스택(dual-stack) 연결을 지원해요. 이중 스택 엔드포인트는 네트워크가 지원하는 경우 IPv4 프로토콜에 더해 Internet Protocol version 6(IPv6)로 S3 테이블 버킷에 접근할 수 있게 해줘요. 다음 명명 규칙으로 이중 스택 엔드포인트를 통해 S3 버킷에 접근할 수 있어요.

s3tables.<region>.api.aws

VPC에서 IPv6로 S3 테이블과 테이블 버킷에 접근하기 전에 알아야 할 사항은 다음과 같아요.

  • 테이블에 접근하는 클라이언트와 S3 클라이언트 모두 이중 스택이 활성화되어 있어야 해요.
  • IPv6 인바운드는 VPC 보안 그룹에서 기본적으로 활성화되어 있지 않아요. IPv6 접근을 허용하려면 보안 그룹에 HTTPS(TCP 포트 443)를 허용하는 새 규칙을 추가해야 해요. 자세한 내용은 Amazon EC2 사용자 가이드의 Configure security group rules를 참고해 주세요.
  • VPC에 IPv6 CIDR이 할당되어 있지 않다면 VPC에 IPv6 CIDR 블록을 수동으로 추가해야 해요. 자세한 내용은 AWS PrivateLink 사용자 가이드의 Add IPv6 support for your VPC를 참고해 주세요.
  • IP 주소 필터링 IAM 정책을 사용한다면 IPv6 주소를 처리하도록 업데이트해야 해요. IAM으로 접근 권한을 관리하는 방법은 Identity and Access Management for Amazon S3를 참고해 주세요.

S3 Tables용 이중 스택 엔드포인트를 사용하는 새 VPC 엔드포인트를 만들려면 예시 CLI 명령을 사용해요.

aws ec2 create-vpc-endpoint \
  --vpc-id vpc-id \
  --service-name com.amazonaws.aws-region.s3tables \
  --subnet-ids subnet-1 subnet-2 \
  --vpc-endpoint-type Interface \
  --ip-address-type dualstack \
  --dns-options "DnsRecordIpType=dualstack" \
  --security-group-ids sg-id \
  --region aws-region

VPC 엔드포인트 만들기에 대한 자세한 내용은 VPC 사용자 가이드의 Create an interface endpoint를 참고해 주세요.

네트워크가 IPv6를 지원하고 VPC를 업데이트해 IPv6를 활성화하려면 다음 CLI 명령을 사용할 수 있어요.

aws ec2 modify-vpc-endpoint \
  --vpc-endpoint-id vpce-id \
  --ip-address-type dualstack \
  --dns-options "DnsRecordIpType=dualstack" \
  --region aws-region

테이블 버킷 정책과 함께 VPC 엔드포인트 정책 조건 사용하기

테이블 버킷 정책에서 aws:SourceVpce, aws:SourceVpc, aws:VpcSourceIp 조건 키를 사용해 특정 VPC나 VPC 엔드포인트에서 테이블 버킷 리소스로의 접근을 제한할 수 있어요. 이 조건 키에 대한 자세한 내용은 IAM User Guide의 AWS global condition context keys를 참고해 주세요.

Iceberg REST API를 사용할 때 S3 Tables는 테이블 메타데이터를 읽고 쓰기 위해 여러분을 대신해 Amazon S3에 요청을 보내요. Iceberg REST API 요청이 VPC 엔드포인트를 통해 이루어지면, 초기 요청의 소스 VPC가 Amazon S3에 대한 테이블 메타데이터 요청에서 보존되지 않아요. 테이블 버킷 정책이 이 조건 키들로 접근을 제한한다면, aws:CalledVia에 대한 조건도 추가해 S3 Tables의 테이블 메타데이터 요청을 허용해야 해요.

다음 예시 테이블 버킷 정책은 요청이 지정된 VPC 엔드포인트에서 오지 않거나 Amazon S3 Tables Iceberg REST 엔드포인트가 여러분을 대신해 만든 요청이 아니면 모든 S3 Tables 작업을 거부해요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RestrictToVPCe",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3tables:*",
            "Resource": [
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket",
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/*"
            ],
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:SourceVpce": "vpce-1a2b3c4d",
                    "aws:CalledViaLast": "s3tables.amazonaws.com"
                }
            }
        }
    ]
}

VPC 네트워크 안에서 S3 Tables에 대한 접근 제한하기

리소스 기반 정책과 유사하게, 테이블과 테이블 버킷에 대한 접근을 제어하는 엔드포인트 정책을 VPC 엔드포인트에 연결할 수 있어요. 다음 예시에서 interface 엔드포인트 정책은 특정 테이블 버킷에만 접근을 제한해요.

{
    "Version": "2012-10-17",
    "Id": "Policy141511512309",
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": "s3tables:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket",
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/*"
            ]
        }
    ]
}

더 알아보기 (Learn more)