외부 스테이지에 대한 AWS 비공개 연결¶
이 항목에서는 AWS 에서 외부 스테이지에 대한 아웃바운드 비공개 연결을 설정하는 구성 세부 정보를 제공합니다. 아웃바운드 공용 연결과 아웃바운드 비공개 연결의 주요 차이점은 저장소 통합 또는 스테이지를 구성하는 방식입니다. 예를 들어, 저장소 통합에 USE_PRIVATELINK_ENDPOINT
속성을 지정한 다음 외부 스테이지에서 이 저장소 통합을 참조할 수 있습니다. 외부 스테이지에서는 저장소 통합에서 프라이빗 엔드포인트 구성을 상속받습니다. 그 후 AWS S3 스테이지에 연결하면 AWS 내부 네트워크를 통해 연결됩니다. 아웃바운드 비공개 연결을 사용하도록 저장소 통합 및 스테이지를 구성하면 저장소 계정에 대한 공개 액세스를 차단하여 데이터 언로딩 작업에 보안을 한층 더 강화할 수 있습니다.
아웃바운드 비공개 연결 비용¶
처리된 총 데이터와 함께 각 비공개 연결 엔드포인트에 대한 비용을 지불합니다. 이러한 품목의 가격은 Snowflake서비스 사용 테이블 을 참조하십시오.
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
속성을 사용하는 경우 플로우를 수정해야 합니다.
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');
이 함수는 비공개 엔드포인트를 호스트 이름에 바인딩하여 저장소 통합에서 비공개 엔드포인트를 사용하여 스토리지 위치에 연결할 수 있도록 합니다.
Snowflake에서 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 함수를 호출합니다.
함수의 출력에
"status": "APPROVED
가 포함되면 Snowflake에서 저장소 계정으로의 연결이 비공개 연결을 사용할 수 있습니다(아웃바운드 비공개 연결을 위해 필요한 다른 Snowflake 오브젝트가 활성화된 후)."APPROVED"
상태를 대기하는 동안 다음 단계를 계속 진행할 수 있습니다.버킷 정책을 다음과 같이 업데이트하여 S3 버킷에 대한 액세스를 VPC 엔드포인트를 통해서만 액세스하도록 제한합니다.
{ "Sid": "Access-to-specific-VPCE-only", "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" }, }, }
제한적인
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;
저장소 통합을 참조하는 외부 스테이지를 만듭니다.
CREATE OR REPLACE STAGE my_storage_private_stage URL = 's3://mybucket1/path1/' STORAGE_INTEGRATION = outbound_private_link_int;
프라이빗 엔드포인트가 “APPROVED” 상태가 되면, Snowflake에서 외부 스테이지로 데이터를 언로딩하는 것을 테스트합니다.
COPY INTO @my_storage_private_stage FROM mytable FILE_FORMAT = (FORMAT_NAME = my_csv_format);
AWS 스테이지에서 결과를 봅니다.
엔드포인트 프로비저닝 해제¶
외부 스테이지에 비공개 연결 엔드포인트가 더 이상 필요하지 않은 경우 스테이지 또는 저장소 통합에서 USE_PRIVATELINK_ENDPOINT
속성을 설정 해제하고 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출하십시오.