Private connectivity to external stages for Amazon Web Services

Private connectivity to external stages for Amazon Web Services (AWS 외부 스테이지에 대한 사설 연결)

이 주제는 AWS의 외부 스테이지에 대한 아웃바운드 사설 연결을 설정하는 구성 세부 정보를 제공해요. 아웃바운드 공용 연결과 아웃바운드 사설 연결의 주요 차이는 저장 통합이나 스테이지를 어떻게 구성하는가예요.

출처: Snowflake Documentation

본문

Business Critical 기능

이 기능은 Business Critical(또는 그 이상)이 필요해요. 업그레이드 문의는 Snowflake Support에 연락해요.

기능 — 일반 공개(Generally Available)

이 기능은 AWS Government 리전(Commercial Gov 및 SnowGov)에서 Federal Information Processing Standard(FIPS) 준수 적용 때문에 사용할 수 없어요. AWS S3용 PrivateLink는 S3 FIPS 엔드포인트를 지원하지 않아요. FIPS가 적용되는 AWS 리전은 지원 클라우드 리전을 참고해요.

예를 들어 저장 통합에 USE_PRIVATELINK_ENDPOINT 속성을 지정한 다음 이 저장 통합을 외부 스테이지에서 참조할 수 있어요. 외부 스테이지는 저장 통합에서 사설 엔드포인트 구성을 상속해요. 이후 AWS S3 스테이지에 대한 연결은 AWS 내부 네트워크를 통해 진행돼요. 저장 통합과 스테이지가 아웃바운드 사설 연결을 사용하도록 구성하면 저장소 계정에 대한 공용 접근을 차단해 데이터 언로드 작업에 추가 보안을 더해요.

아웃바운드 사설 연결 비용

각 사설 연결 엔드포인트와 처리된 총 데이터에 대해 비용을 지불해요. 이 항목들의 가격은 Snowflake Service Consumption Table을 참고해요.

ACCOUNT_USAGE 및 ORGANIZATION_USAGE 스키마의 청구 뷰를 쿼리할 때 다음 서비스 유형으로 필터링해 이 항목들의 비용을 탐색할 수 있어요.

  • OUTBOUND_PRIVATELINK_ENDPOINT
  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

예를 들어 USAGE_IN_CURRENCY_DAILY 뷰를 쿼리하고 이 서비스 유형들로 필터링할 수 있어요.

고려 사항

같은 저장소 계정에 대해 아웃바운드 공용 연결과 아웃바운드 사설 연결을 구성할 수 있어요. 이렇게 하려면 아웃바운드 공용 연결 전용 저장 통합을 만들고 USE_PRIVATELINK_ENDPOINT = FALSE를 지정해요.

구문 업데이트

저장 통합

하나 이상의 위치가 있는 저장 통합을 만들 때 USE_PRIVATELINK_ENDPOINT 속성을 지정할 수 있어요:

CREATE OR REPLACE STORAGE INTEGRATION my_int
  ...
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

저장 통합을 수정하고 USE_PRIVATELINK_ENDPOINT 속성을 설정할 수 있어요:

ALTER STORAGE INTEGRATION my_int
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

외부 스테이지

USE_PRIVATELINK_ENDPOINT 속성을 지정하는 저장 통합을 참조하는 스테이지는 사설 엔드포인트 구성을 상속해요. 그 결과 스테이지에서 USE_PRIVATELINK_ENDPOINT 속성을 지정할 필요가 없고, 스테이지를 수정해 USE_PRIVATELINK_ENDPOINT 속성을 설정할 수도 없어요.

저장 통합을 참조하는 대신 스테이지의 CREDENTIALS 속성을 사용한다면, 스테이지를 만들거나 수정할 때 USE_PRIVATELINK_ENDPOINT 속성을 지정해야 해요.

CREATE OR REPLACE STAGE my_sas_private_stage
  URL = '...'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

ALTER STAGE my_sas_private_stage
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

DESCRIBE STAGE 명령은 USE_PRIVATELINK_ENDPOINT 속성과 그 값을 포함해요.

외부 스테이지 접근 구성

이 단계들은 AWS의 외부 스테이지로 데이터를 언로드하기 위해 저장 통합과 함께 아웃바운드 사설 연결을 사용하는 데 특화된 것이에요. 저장 통합을 참조하는 대신 스테이지의 CREDENTIALS 속성을 사용한다면 흐름을 수정해야 해요.

  1. Snowflake에서 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출해 Snowflake VNet에 사설 연결 엔드포인트를 프로비저닝해 Snowflake가 사설 연결로 외부 AWS S3 저장소에 연결할 수 있게 해요.

아래 예시에서 보듯이 개별 AWS S3 버킷을 지정하는 대신 와일드카드 문자(*)를 사용해야 해요. 와일드카드를 사용한다고 해서 모든 S3 버킷이 사설 연결로 접근되는 것은 아니에요. 사설 연결용으로 구성된 외부 스테이지로 참조되는 버킷만 VPC 엔드포인트를 통해 접근할 수 있어요.

USE ROLE ACCOUNTADMIN;

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
 'com.amazonaws.us-west-2.s3',
 '*.s3.us-west-2.amazonaws.com');

이 함수는 사설 엔드포인트를 호스트 이름에 바인딩해 저장 통합이 사설 엔드포인트를 사용해 저장 위치에 연결할 수 있게 해요.

  1. Snowflake에서 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 함수를 호출해요.

함수 출력에 "status": "APPROVED"가 포함되면(다른 필요한 Snowflake 객체가 아웃바운드 사설 연결에 활성화된 후) 저장 계정으로의 연결이 사설 연결을 사용할 수 있게 돼요.

"APPROVED" 상태를 기다리는 동안 다음 단계를 계속할 수 있어요.

  1. 다음으로 S3 버킷 정책을 업데이트해 VPC 엔드포인트를 통해서만 버킷에 접근하도록 제한해요.
{
  "Sid": "AccesstospecificVPCEonly",
  "Effect": "Deny",
  "Principal": {
 "AWS": "arn:aws:iam::001234567890:role/myrole"
  },
  "Action": "s3:*",
  "Resource": [
 "arn:aws:s3:::mybucket1",
 "arn:aws:s3:::mybucket1/*"
  ],
  "Condition": {
 "StringNotEquals": {
   "aws:SourceVpce": "vpce-01c31eb5f4a1e817d"
 }
  }
}
  1. 제한된 STORAGE_AWS_ROLE_ARN 역할과 USE_PRIVATELINK_ENDPOINT 속성 둘 다를 지정하는 저장 통합을 만들어요:
CREATE OR REPLACE STORAGE INTEGRATION outbound_private_link_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
  STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/')
  USE_PRIVATELINK_ENDPOINT = TRUE
  ENABLED = TRUE;

Note

저장 통합용 역할 생성 정보는 Amazon S3 접근용 Snowflake 저장 통합 구성을 참고해요.

  1. 저장 통합을 참조하는 외부 스테이지를 만들어요:
CREATE OR REPLACE STAGE my_storage_private_stage
  URL = 's3://mybucket1/path1/'
  STORAGE_INTEGRATION = outbound_private_link_int;
  1. 사설 엔드포인트가 "APPROVED" 상태가 된 후 Snowflake에서 외부 스테이지로 데이터를 언로드하는 것을 테스트해요:
COPY INTO @my_storage_private_stage
  FROM mytable
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);
  1. AWS 스테이지에서 결과를 확인해요.

엔드포인트 프로비저닝 해제

외부 스테이지에 대한 사설 연결 엔드포인트가 더 이상 필요 없으면 스테이지나 저장 통합에서 USE_PRIVATELINK_ENDPOINT 속성을 해제한 다음 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출해요.

더 알아보기 (Learn more)