Google Cloud용 외부 스테이지에 대한 프라이빗 연결
Google Cloud용 외부 스테이지에 대한 프라이빗 연결
Business Critical 기능 — 이 기능은 Business Critical(또는 그 이상)이 필요해요. 업그레이드 문의는 Snowflake 지원에 연락해 주세요.
이 주제는 Google Cloud의 외부 스테이지에 대한 아웃바운드 프라이빗 연결을 구성하는 방법을 설명해요. 아웃바운드 공용 연결과 아웃바운드 프라이빗 연결의 주요 차이는 스토리지 통합을 구성하는 방법이에요. 예를 들어 스토리지 통합에 USE_PRIVATELINK_ENDPOINT 속성을 지정한 다음 외부 스테이지에서 이 스토리지 통합을 참조할 수 있어요. 외부 스테이지는 스토리지 통합에서 프라이빗 엔드포인트 구성을 상속해요. 이후 Google Cloud 스테이지에 대한 연결은 Google Cloud 내부 네트워크를 통과해요. 스토리지 통합과 스테이지를 아웃바운드 프라이빗 연결을 사용하도록 구성하면 스토리지 계정에 대한 공용 액세스를 차단해 데이터 언로드 작업에 추가 보안을 제공해요.
출처: Documentation
본문
아웃바운드 프라이빗 연결 비용
처리된 총 데이터와 함께 각 프라이빗 연결 엔드포인트에 대해 비용을 지불해요. 이 항목의 요금은 Snowflake 서비스 소비 테이블을 참고해요.
ACCOUNT_USAGE 및 ORGANIZATION_USAGE 스키마의 청구 뷰를 조회할 때 다음 서비스 유형으로 필터링해 이 항목의 비용을 확인할 수 있어요.
OUTBOUND_PRIVATELINK_ENDPOINTOUTBOUND_PRIVATELINK_DATA_PROCESSED
예를 들어 USAGE_IN_CURRENCY_DAILY 뷰를 조회하고 이러한 서비스 유형으로 필터링할 수 있어요.
고려 사항
같은 스토리지 계정에 대해 아웃바운드 공용 연결과 아웃바운드 프라이빗 연결을 모두 구성할 수 있어요. 이렇게 하려면 아웃바운드 공용 연결 전용 스토리지 통합을 만들고 USE_PRIVATELINK_ENDPOINT = FALSE를 지정해요.
제한 사항
Google Cloud 스테이지에 대한 아웃바운드 프라이빗 연결은 멀티 리전 버킷을 지원하지 않아요.
스토리지 통합에 프라이빗 연결 지정
스토리지 통합을 만들거나, 교체하거나, 수정할 때 프라이빗 연결을 지정하려면 다음 예제처럼 USE_PRIVATELINK_ENDPOINT 속성을 포함해요. 프라이빗 연결을 사용하려면 통합에 USE_PRIVATELINK_ENDPOINT = TRUE를 설정해요.
스토리지 통합
다음 예제는 위치가 하나 이상인 스토리지 통합을 만들 때 USE_PRIVATELINK_ENDPOINT 속성을 지정하는 방법을 보여줘요.
CREATE OR REPLACE STORAGE INTEGRATION my_int
TYPE=EXTERNAL_STAGE
STORAGE_PROVIDER='gcs'
STORAGE_ALLOWED_LOCATIONS=('gcs://<bucket>/<prefix>/')
USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
다음 예제는 스토리지 통합을 수정하고 USE_PRIVATELINK_ENDPOINT 속성을 설정하는 방법을 보여줘요.
ALTER STORAGE INTEGRATION my_int
SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
외부 스테이지
스테이지를 만들거나 수정할 때 USE_PRIVATELINK_ENDPOINT 문법 업데이트는 지원되지 않아요. 다음 예제는 새 스테이지 또는 수정된 스테이지의 URL을 사용하려면 스토리지 통합을 어떻게 변경해야 하는지 보여줘요.
CREATE OR REPLACE STAGE my_gcs_stage
URL = 'gcs://<bucket>/<prefix>/'
STORAGE_INTEGRATION=my_int
외부 스테이지 액세스 구성
이 단계는 스토리지 통합과 함께 아웃바운드 프라이빗 연결을 사용해 Google Cloud의 외부 스테이지로 데이터를 언로드할 때만 해당해요.
- Snowflake에서 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출해요. 인자로 리전 Storage API 엔드포인트와 호스트 이름을 제공해요. 예를 들어:
USE ROLE ACCOUNTADMIN;
SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'storage.us-east4.rep.googleapis.com',
'storage.us-east4.rep.googleapis.com');
참고 — Snowflake는 Google Cloud 리전 Storage API 엔드포인트만 지원해요. Google Cloud 멀티 리전 버킷은 지원되지 않아요.
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT를 사용해 Snowflake VNet에 프라이빗 엔드포인트를 프로비저닝하면 프라이빗 엔드포인트가 호스트 이름에 바인딩돼요. 이를 통해 스토리지 통합이 프라이빗 연결을 사용해 외부 Google Cloud 스테이지에 연결할 수 있어요.
- Snowflake에서 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 함수를 호출해요.
SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO의 출력에 "status": "APPROVED"가 포함되면, Snowflake에서 스토리지 계정으로의 연결이 (다른 필요한 Snowflake 객체가 아웃바운드 프라이빗 연결에 대해 활성화된 후) 프라이빗 연결을 사용할 수 있어요.
"APPROVED" 상태를 기다리는 동안 다음 단계를 계속 진행할 수 있어요.
- 스토리지 통합을 만들고 USE_PRIVATELINK_ENDPOINT 속성의 값으로 TRUE를 지정해요. 예를 들어:
CREATE OR REPLACE STORAGE INTEGRATION outbound_private_link_int
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = 'gcs'
STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/')
USE_PRIVATELINK_ENDPOINT = true
ENABLED = true;
스토리지 통합용 역할 만들기에 대한 자세한 내용은 Google Cloud Storage용 통합 구성을 참고해요.
- 스토리지 통합을 참조하는 외부 스테이지를 만들어요. 예를 들어:
CREATE OR REPLACE STAGE my_gcs_stage
URL = 'gcs://mybucket1/path1/'
STORAGE_INTEGRATION = outbound_private_link_int;
- 프라이빗 엔드포인트가 "APPROVED" 상태가 된 후, Snowflake에서 외부 스테이지로 데이터를 언로드하는 것을 테스트해요. 예를 들어:
COPY INTO @my_gcs_stage
FROM mytable
FILE_FORMAT = (FORMAT_NAME = my_csv_format);
- Google Cloud 스테이지에서 결과를 확인해요.
프라이빗 연결 비활성화
외부 스테이지에 더 이상 프라이빗 연결이 필요하지 않으면 스토리지 통합의 USE_PRIVATELINK_ENDPOINT 속성을 FALSE로 설정한 다음 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출해 엔드포인트를 프로비저닝 해제해요. 예를 들어:
USE ROLE ACCOUNTADMIN;
ALTER STORAGE INTEGRATION my_int
SET USE_PRIVATELINK_ENDPOINT = false;
SELECT SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT('storage.us-east4.rep.googleapis.com');