Snowflake 전송을 위한 비공개 연결 구성
이 가이드에서는 비공개 연결을 구성하여 Snowflake에서 BigQuery로 비공개 데이터 전송을 만드는 방법을 보여줍니다. 비공개 데이터 전송을 사용하면 비공개 네트워크 내에서 한 소스에서 다른 소스로 데이터를 전송할 수 있으며, 공개 인터넷을 통해 데이터를 전송할 때 보안 위험을 줄일 수 있습니다.
다음 섹션에서는 Snowflake 전송을 만들기 전에 비공개 연결을 구성하는 데 필요한 단계를 보여줍니다.
비공개 전송은 Amazon Web Services (AWS), Microsoft Azure, Google Cloud에서 호스팅되는 Snowflake 인스턴스에 대해 지원됩니다.

Snowflake에 대한 비공개 링크 만들기
Snowflake 계정을 클라우드 제공업체에 연결하는 비공개 링크를 만듭니다. 자세한 내용은 다음 옵션 중 하나를 선택하세요.
AWS
Snowflake 계정을 AWS 계정에 연결하도록 AWS PrivateLink 구성 AWS 계정에 Snowflake 전송에 필요한 Amazon S3 스테이징 버킷이 포함되어 있어야 합니다.
Azure
Azure Private Link를 구성하여 Azure 가상 네트워크 (VNet)를 Azure의 Snowflake VNet에 연결합니다. Azure 계정에 Snowflake 전송에 필요한 Blob 스테이징 버킷이 포함되어야 합니다.
Google Cloud
Virtual Private Cloud (VPC) 네트워크 서브넷을 Google Cloud에 호스팅된 Snowflake 계정에 연결하도록 Private Service Connect를 구성합니다. Google Cloud Google Cloud Snowflake 전송에 필요한 Cloud Storage 스테이징 버킷이 있어야 합니다.
Cross-Cloud Interconnect 또는 HA VPN 설정
AWS 또는 Azure에서 Cross-Cloud Interconnect 또는 HA VPN을 설정합니다.Google Cloud에서 호스팅하는 Snowflake 계정에는 이 단계가 필요하지 않습니다.
AWS
고가용성 VPN을 사용하면 암호화된 VPN 터널을 통해 데이터를 전송할 수 있습니다. 비공개 Snowflake 전송에 HA VPN을 사용하려면 Google Cloud 와 AWS 간에 HA VPN 연결 만들기를 참고하세요.
Cross-Cloud Interconnect 연결은 클라우드 제공업체 간에 전용 비공개 링크를 만들며 지연 시간 요구사항이 낮은 대규모 데이터 전송에 적합합니다. 프라이빗 Snowflake 전송에 Cross-Cloud Interconnect를 사용하려면 AWS에 연결을 참고하세요.
Azure
고가용성 VPN을 사용하면 암호화된 VPN 터널을 통해 데이터를 전송할 수 있습니다. 비공개 Snowflake 전송에 HA VPN을 사용하려면 Google Cloud 와 Azure 간에 HA VPN 연결 만들기를 참고하세요.
Cross-Cloud Interconnect 연결은 클라우드 제공업체 간에 전용 비공개 링크를 만들며 지연 시간 요구사항이 낮은 대규모 데이터 전송에 적합합니다. 비공개 Snowflake 전송에 Cross-Cloud Interconnect를 사용하려면 Azure에 연결을 참고하세요.
프록시 VM 만들기
비공개 연결을 완료하려면 데이터가 공개 인터넷에 도달하지 않고 데이터 소스 간의 연결을 완료하는 프록시 VM이 필요합니다. 이 단계는 AWS, Azure 또는 Google Cloud에서 호스팅되는 Snowflake 인스턴스에 필요합니다.
Snowflake 비공개 전송을 위한 프록시 VM을 만들고 구성하려면 다음을 수행하세요.
- 소비자 VPC 네트워크 내에 하나 이상의 Compute Engine VM 인스턴스를 만듭니다.
- HAProxy 또는 Nginx와 같은 TCP 프록시 소프트웨어를 다운로드하고 다음을 구성합니다.
- 포트를 지정합니다. 예를 들면
443입니다. - 수신되는 모든 TCP 트래픽을 Snowflake 인스턴스의 비공개 호스트 이름과 포트로 전달합니다.
- 포트를 지정합니다. 예를 들면
- 소비자 VPC 네트워크에 구성된 DNS를 통해 Snowflake 비공개 호스트 이름을 확인하도록 VM을 구성합니다.
- 다음과 같이 내부 패스 스루 부하 분산기를 설정합니다.
서비스 연결 만들기
Private Service Connect를 사용하여 네트워크 연결을 만들고 서비스를 게시합니다. 이 단계는 AWS, Azure 또는 Google Cloud에서 호스팅되는 Snowflake 인스턴스에 필요합니다.
서비스 연결은 BigQuery 데이터 세트와 동일한 리전에 있어야 합니다.
서비스에서 명시적 승인 (connection-preference이 ACCEPT_MANUAL로 설정됨)을 사용하는 경우 Snowflake 비공개 데이터 전송에 사용되는 서비스 계정에 다음 IAM 권한이 있어야 합니다.
compute.serviceAttachments.getcompute.serviceAttachments.updatecompute.regionOperations.get
서비스 연결을 만든 후 서비스 연결 URI를 기록해 둡니다. Snowflake 전송 구성을 만들 때 이 URI가 필요합니다.
엔드포인트 만들기
AWS 또는 Azure 계정에서 엔드포인트를 만듭니다. Google Cloud에서 호스팅하는 Snowflake 계정에는 이 단계가 필요하지 않습니다.
AWS
AWS에서 Amazon S3에 연결되는 VPC 엔드포인트를 만듭니다. 자세한 내용은 인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스에 액세스를 참고하세요.
Azure
Azure의 스토리지 계정에서 비공개 엔드포인트를 구성합니다. 자세한 내용은 Azure Storage에 비공개 엔드포인트 사용을 참고하세요.
Storage Transfer Service에는 *.blob.core.windows.net 엔드포인트가 필요합니다. *.dfs.core.windows.net 엔드포인트는 지원되지 않습니다.
생성되면 엔드포인트의 IP 주소를 기록해 둡니다. 다음 섹션에서 부하 분산기를 만들 때 IP 주소를 지정해야 합니다.
네트워크 부하 분산기 만들기
Google Cloud에서 하이브리드 연결로 리전 내부 프록시 네트워크 부하 분산기를 설정합니다. 이렇게 하면 부하 분산기와 동일한 VPC 네트워크에서 실행되는 클라이언트로 제한되고 이전 섹션에서 만든 S3 VPC 엔드포인트 또는 Azure Storage 비공개 엔드포인트로 트래픽을 라우팅하는 내부 IP 주소가 제공됩니다.
Cloud Interconnect와 인터페이스하는 VLAN 연결과 동일한 프로젝트 및 VPC 네트워크에 부하 분산기를 만들어야 합니다. 인터커넥트 자체는 동일한 조직 내의 다른 프로젝트에 있을 수 있지만 연결은 부하 분산기와 동일한 VPC 및 리전에 있어야 합니다.
하이브리드 연결 NEG에 엔드포인트 추가 단계에 도달하면 S3 VPC 엔드포인트 또는 Azure Storage 비공개 엔드포인트 IP 주소를 지정합니다.
다음 섹션에서 지정해야 하므로 NLB의 프런트엔드 IP 주소와 포트를 기록해 둡니다.
연결 유효성 검사
계속하기 전에 부하 분산기가 원격 스토리지 엔드포인트에 연결할 수 있는지 확인하는 것이 좋습니다.
방법은 다음과 같습니다.
- 부하 분산기와 동일한 VPC 네트워크에 Compute Engine VM을 만듭니다.
VM에서
curl을 사용하여 부하 분산기의 IP 주소와 포트에 대한 연결을 테스트합니다.curl -v --resolve HOSTNAME:PORT:LOAD_BALANCER_IP https://HOSTNAME다음을 바꿉니다.
- HOSTNAME은 소스 스토리지 제공업체의 호스트 이름입니다.
- AWS S3의 경우 버킷의 리전에 해당하는 S3 API 엔드포인트(예:
s3.us-west-1.amazonaws.com)를 사용합니다. - Azure Storage의 경우 스토리지 계정의 blob 엔드포인트(예:
mystorageaccount.blob.core.windows.net)를 사용합니다.
- AWS S3의 경우 버킷의 리전에 해당하는 S3 API 엔드포인트(예:
- PORT은 부하 분산기의 전달 규칙에 구성된 포트입니다(일반적으로
443). - LOAD_BALANCER_IP는 부하 분산기의 프런트엔드 IP 주소입니다.
- HOSTNAME은 소스 스토리지 제공업체의 호스트 이름입니다.
원격 엔드포인트의 응답(오류 포함)은 연결이 성공했음을 나타냅니다. 연결 제한 시간은 계속하기 전에 해결해야 하는 네트워크 설정의 잘못된 구성을 나타냅니다.
NLB 등록
서비스 디렉터리에 NLB를 등록합니다. BigQuery는 서비스 디렉터리를 사용하여 부하 분산기의 주소를 확인하고 직접 연결합니다.
안내에 따라 내부 부하 분산기를 등록합니다. 전달 규칙을 지정할 때 만든 부하 분산기의 IP 주소와 포트를 사용합니다.
생성된 후에는 서비스의 자체 링크를 기록해 둡니다. projects/{project_id}/locations/{location}/namespaces/{namespace}/services/{service} 형식을 사용합니다.
전송 작업을 만들 때 이 값이 필요합니다.
스테이징 버킷 준비
Snowflake 데이터 전송을 완료하려면 스테이징 버킷을 만든 후 Snowflake에서 쓰기 액세스를 허용하도록 구성해야 합니다.
다음 옵션 중 하나를 선택합니다.
AWS
AWS 호스팅 Snowflake 계정의 경우 Snowflake 데이터를 BigQuery에 로드하기 전에 스테이징할 Amazon S3 버킷을 만듭니다.
Snowflake에서 Amazon S3 버킷에 데이터를 외부 단계로 쓸 수 있도록 Snowflake 스토리지 통합 객체를 만들고 구성합니다.
Amazon S3 버킷에 대한 읽기 액세스를 허용하려면 다음도 수행해야 합니다.
전용 Amazon IAM 사용자를 만들고
AmazonS3ReadOnlyAccess정책을 부여합니다.IAM 사용자의 Amazon 액세스 키 쌍을 만듭니다.
Azure
Azure 호스팅 Snowflake 계정의 경우 Snowflake 데이터가 BigQuery에 로드되기 전에 스테이징할 Azure Blob Storage 컨테이너를 만듭니다.
- Azure 스토리지 계정과 그 안에 스토리지 컨테이너를 만듭니다.
- Snowflake에서 Azure 스토리지 컨테이너에 데이터를 외부 단계로 쓸 수 있도록 Snowflake 스토리지 통합 객체를 만들고 구성합니다. 외부 스테이지를 만드는 단계는 건너뛰어도 됩니다.
Azure 컨테이너에 대한 읽기 액세스를 허용하려면 컨테이너에 대해 SAS 토큰을 생성하세요.
Google Cloud
Google Cloud호스팅 Snowflake 계정의 경우 BigQuery에 로드하기 전에 Snowflake 데이터를 스테이징할 Cloud Storage 버킷을 만듭니다.
- Cloud Storage 버킷 생성
- Snowflake에서 Cloud Storage 버킷에 데이터를 외부 단계로 쓸 수 있도록 Snowflake 스토리지 통합 객체를 만들고 구성합니다.
스테이징 버킷에 대한 액세스를 허용하려면 다음 명령어를 사용하여 DTS 서비스 에이전트에
roles/storage.objectViewer역할을 부여합니다.gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com \ --role=roles/storage.objectViewer
비공개 Snowflake 전송 구성 만들기
Snowflake 전송 만들기 전송 구성을 설정할 때 다음을 수행합니다.
콘솔
- 비공개 네트워크 사용에서 True를 선택합니다.
- PSC 서비스 연결에 서비스 연결 URI를 입력합니다. 서비스 연결 URI를 찾는 방법에 대한 자세한 내용은 게시된 서비스의 세부정보 보기를 참고하세요.
서비스 연결 URI는
projects/PROJECT_ID/regions/REGION/serviceAttachments/SERVICE_ATTACHMENT형식입니다. - 비공개 네트워크 서비스의 경우 NLB 서비스의 자체 링크를 입력합니다.
projects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE/services/SERVICE_NAME형식을 사용합니다. - 전송에 사용할 스테이징 버킷의 URI:
- AWS 호스팅 Snowflake 계정의 경우 액세스 사용자 인증 정보와 함께 Amazon S3 버킷 URI가 필요합니다.
- Azure에서 호스팅되는 Snowflake의 경우 Azure Blob Storage 계정 및 컨테이너가 필요합니다.
- Google Cloud에서 호스팅되는 Snowflake 계정의 경우 Cloud Storage 버킷 URI가 필요합니다.
클라우드 제공업체에서 Snowflake 계정을 호스팅하는 클라우드 제공업체에 따라
AWS,AZURE또는GCP를 선택합니다.AWS
- Amazon S3 URI에 스테이징 버킷으로 사용할 Amazon S3 버킷의 URI를 입력합니다.
- 액세스 키 ID 및 보안 비밀 액세스 키에 액세스 키 쌍을 입력합니다.
Azure
- Azure Storage 계정 이름 및 Azure Storage 계정의 컨테이너에 스테이징 버킷으로 사용할 Azure Blob Storage의 스토리지 계정 및 컨테이너 이름을 입력합니다.
- SAS 토큰에 컨테이너에 대해 생성된 SAS 토큰을 입력합니다.
Google Cloud
- GCS URI에 스테이징 버킷으로 사용할 Cloud Storage의 URI를 입력합니다.
bq
use_private_network매개변수의 경우TRUE로 설정합니다.service_attachment매개변수에는 서비스 연결 URI를 지정합니다. 서비스 연결 URI를 찾는 방법에 대한 자세한 내용은 게시된 서비스의 세부정보 보기를 참고하세요. 서비스 연결 URI는projects/PROJECT_ID/regions/REGION/serviceAttachments/SERVICE_ATTACHMENT형식입니다.private_network_service매개변수의 경우 NLB 서비스의 자체 링크를 제공합니다.projects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE/services/SERVICE_NAME형식을 사용합니다.cloud_provider: Snowflake 계정을 호스팅하는 클라우드 제공업체에 따라AWS,AZURE또는GCP을 입력합니다.staging_s3_uri: 스테이징 버킷으로 사용할 S3 버킷의 URI를 입력합니다.cloud_provider이AWS인 경우에만 필요합니다.aws_access_key_id: 액세스 키 쌍을 입력합니다.cloud_provider이AWS인 경우에만 필요합니다.aws_secret_access_key: 액세스 키 쌍을 입력합니다.cloud_provider이AWS인 경우에만 필요합니다.azure_storage_account: 스테이징 버킷으로 사용할 스토리지 계정 이름을 입력합니다.cloud_provider이AZURE인 경우에만 필요합니다.staging_azure_container: 스테이징 버킷으로 사용할 Azure Blob Storage 내 컨테이너를 입력합니다.cloud_provider이AZURE인 경우에만 필요합니다.azure_sas_token: SAS 토큰을 입력합니다.cloud_provider이AZURE인 경우에만 필요합니다.staging_gcs_uri: 스테이징 버킷으로 사용할 Cloud Storage URI를 입력합니다.cloud_provider이GCP인 경우에만 필요합니다.