Google Cloud Storage용 외부 볼륨 구성하기¶
외부 볼륨을 사용하여 Snowflake에게 Google Cloud Storage(GCS) 버킷에 대한 제한된 액세스 권한을 부여합니다. Google Cloud Storage의 외부 볼륨을 구성하려면 :ref:`SQL을 사용 <label-configure_external_volume_gcs_create_sql>`하거나:ref:`Snowsight를 사용 <label-configure_external_volume_gcs_create_snowsight>`하면 됩니다.
전제 조건¶
외부 볼륨을 구성하기 전에 다음을 수행해야 합니다.
Google Cloud Storage 버킷.
외부에서 관리되는 Iceberg 테이블에 외부 볼륨을 사용하려면 모든 테이블 데이터와 메타데이터 파일이 버킷에 있어야 합니다.
데이터 복구를 지원하려면 외부 클라우드 저장소 위치에 대한 버전 관리를 활성화하십시오.
Google Cloud에서 IAM 정책 및 역할을 만들고 관리할 수 있는 권한. Google Cloud 관리자가 아닌 경우 Google Cloud 관리자에게 이러한 작업을 수행하도록 요청합니다.
외부 볼륨을 구성하려면 SQL 또는 Snowsight 를 사용하면 됩니다.
SQL을 사용하여 외부 볼륨 구성¶
1단계: Snowflake에서 외부 볼륨 만들기¶
CREATE EXTERNAL VOLUME 명령을 사용하여 외부 볼륨을 생성합니다.
참고
계정 관리자(ACCOUNTADMIN 역할을 가진 사용자)만 이 SQL 명령을 실행할 수 있습니다.
다음 예에서는 암호화로 단일 GCS 저장소 위치를 정의하는 외부 볼륨을 생성합니다.
CREATE EXTERNAL VOLUME my_gcs_external_volume
STORAGE_LOCATIONS =
(
(
NAME = 'my-us-west-2'
STORAGE_PROVIDER = 'GCS'
STORAGE_BASE_URL = 'gcs://mybucket1/path1/'
ENCRYPTION=(TYPE='GCS_SSE_KMS' KMS_KEY_ID = '1234abcd-12ab-34cd-56ef-1234567890ab')
)
);
2단계: Snowflake 계정에 대한 GCS 서비스 계정 검색¶
Snowflake 계정에 대해 자동으로 생성된 GCS 서비스 계정에 대한 ID를 검색하려면 DESCRIBE EXTERNAL VOLUME 명령을 사용합니다. 이전에 생성한 외부 볼륨의 이름을 지정합니다.
예:
DESC EXTERNAL VOLUME my_gcs_external_volume;
출력에 STORAGE_GCP_SERVICE_ACCOUNT 속성 값을 기록합니다(예: service-account-id@project1-123456.iam.gserviceaccount.com).
Snowflake는 전체 Snowflake 계정에 대해 단일 GCS 서비스 계정을 프로비저닝합니다. 모든 GCS 외부 볼륨은 해당 서비스 계정을 사용합니다.
3단계: 서비스 계정에 버킷 오브젝트 액세스 권한 부여¶
이 단계에서는 Google Cloud console 에서 Snowflake에 대한 IAM 액세스 허가를 구성합니다.
사용자 지정 IAM 역할 만들기¶
버킷에 액세스하고 오브젝트를 가져오기 위해 필요한 권한이 있는 사용자 지정 역할을 생성합니다.
프로젝트 편집기로 Google Cloud console 에 로그인합니다.
홈 대시보드에서 IAM & Admin » Roles 를 선택합니다.
Create Role 을 선택합니다.
사용자 지정 역할에 Title 및 선택 사항 Description 을 입력합니다.
Add Permissions 를 선택합니다.
Filter 에서, Service 를 선택한 다음 storage 를 선택합니다.
권한 목록을 필터링하고 목록에 다음을 추가합니다.
storage.buckets.getstorage.objects.createstorage.objects.deletestorage.objects.getstorage.objects.list
Add 를 선택합니다.
Create 를 선택합니다.
GCS 서비스 계정에 사용자 지정 역할 할당¶
프로젝트 편집기로 Google Cloud console 에 로그인합니다.
홈 대시보드에서 Cloud Storage » Buckets 를 선택합니다.
버킷 목록을 필터링하고 외부 볼륨을 생성할 때 지정한 버킷을 선택합니다.
Permissions » View by principals 을 선택한 다음 Grant access 를 선택합니다.
Add principals 아래에 출력된 서비스 계정 이름의 이름을 2단계: Snowflake 계정에 대한 GCS 서비스 계정 검색 에 붙여넣습니다.
Assign roles 에서, 이전에 만든 사용자 지정 IAM 역할을 선택한 다음 Save 를 선택합니다.
Google Cloud 키 관리 서비스 키에 대한 GCS 서비스 계정 권한 부여¶
참고
이 단계는 Google Cloud Key Management Service(클라우드 KMS)에 저장된 키를 사용하여 GCS 버킷을 암호화하는 경우에만 필요합니다.
프로젝트 편집기로 Google Cloud console 에 로그인합니다.
홈 대시보드에서 Security » Key Management 를 검색하여 선택합니다.
GCS 버킷에 할당된 키 링을 선택합니다.
오른쪽 위 모서리에서 SHOW INFO PANEL 을 선택합니다. 키 링에 대한 정보 패널이 나타납니다.
Add members 필드에서 2단계: Snowflake 계정에 대한 GCS 서비스 계정 검색 의 DESCRIBE EXTERNAL VOLUME 출력에서 서비스 계정 이름을 검색합니다.
Select a role 드롭다운에서 Cloud KMS CryptoKey Encrypter/Decrypter 역할을 선택합니다.
Add`를 선택합니다. 서비스 계정 이름이 정보 패널의 :extui:`Cloud KMS CryptoKey Encrypter/Decrypter 역할 드롭다운에 추가됩니다.
4단계: 저장소 액세스 확인¶
Snowflake가 저장소 공급자를 성공적으로 인증할 수 있는지 확인하려면 SYSTEM$VERIFY_EXTERNAL_VOLUME 함수를 호출합니다.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_external_volume');
참고
다음 오류가 발생하면 계정 관리자가 Snowflake 배포 리전에서 AWS STS를 활성화해야 합니다. 지침은 AWS 설명서의 `AWS 리전에서 AWS STS 관리<https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html>`_를 참조하세요.
Error assuming AWS_ROLE:
STS is not activated in this region for account:<external volume id>. Your account administrator can activate STS in this region using the IAM Console.
Snowsight 에서 외부 볼륨 구성¶
1단계: Snowflake 계정에 대한 GCS 서비스 계정 검색¶
Snowsight 에 로그인합니다.
왼쪽 하단에서 이름 » :ui:`Switch role`을 선택하고 :ui:`ACCOUNTADMIN`을 선택하거나 CREATE EXTERNAL VOLUME 권한이 있는 역할을 선택합니다.
자세한 내용은 기본 역할 전환 섹션을 참조하십시오.
탐색 메뉴에서 Catalog » External data 를 선택합니다.
External volumes 탭을 선택합니다.
+ Create 을 선택합니다.
Google Cloud Storage 을 선택한 다음 Next 를 선택합니다.
Grant storage access 페이지에서 :ui:`GCS service account`의 값을 텍스트 편집기로 복사합니다.
Snowflake는 전체 Snowflake 계정에 대해 단일 GCS 서비스 계정을 프로비저닝합니다. 모든 GCS 외부 볼륨은 해당 서비스 계정을 사용합니다.
2단계: 서비스 계정에 버킷 오브젝트 액세스 권한 부여¶
이 단계에서는 Google Cloud console 에서 Snowflake에 대한 IAM 액세스 허가를 구성합니다.
사용자 지정 IAM 역할 만들기¶
버킷에 액세스하고 오브젝트를 가져오기 위해 필요한 권한이 있는 사용자 지정 역할을 생성합니다.
프로젝트 편집기로 Google Cloud console 에 로그인합니다.
홈 대시보드에서 IAM & Admin » Roles 를 선택합니다.
Create Role 을 선택합니다.
사용자 지정 역할에 Title 및 선택 사항 Description 을 입력합니다.
Add Permissions 를 선택합니다.
Filter 에서, Service 를 선택한 다음 storage 를 선택합니다.
권한 목록을 필터링하고 목록에 다음을 추가합니다.
storage.buckets.getstorage.objects.createstorage.objects.deletestorage.objects.getstorage.objects.list
Add 를 선택합니다.
Create 를 선택합니다.
GCS 서비스 계정에 사용자 지정 역할 할당¶
프로젝트 편집기로 Google Cloud console 에 로그인합니다.
홈 대시보드에서 Cloud Storage » Buckets 를 선택합니다.
버킷 목록을 필터링하고 외부 볼륨을 생성할 때 지정한 버킷을 선택합니다.
Permissions » View by principals 을 선택한 다음 Grant access 를 선택합니다.
Add principals 아래에 출력된 서비스 계정 이름의 이름을 1단계: Snowflake 계정에 대한 GCS 서비스 계정 검색 에 붙여넣습니다.
Assign roles 에서, 이전에 만든 사용자 지정 IAM 역할을 선택한 다음 Save 를 선택합니다.
3단계: 외부 볼륨 만들기¶
Snowsight 를 사용하여 Snowflake에서 외부 볼륨을 생성하려면 다음 단계를 따릅니다.
Snowsight 에 로그인합니다.
왼쪽 하단에서 이름 » :ui:`Switch role`을 선택하고 :ui:`ACCOUNTADMIN`을 선택하거나 CREATE EXTERNAL VOLUME 권한이 있는 역할을 선택합니다.
자세한 지침은 기본 역할 전환 섹션을 참조하십시오.
탐색 메뉴에서 Catalog » External data 를 선택합니다.
External volumes 탭을 선택합니다.
+ Create 을 선택합니다.
Google Cloud Storage 을 선택한 다음 Next 를 선택합니다.
Next 을 선택합니다.
외부 볼륨을 구성하려면 Configure external volume 페이지에서 필드를 완성합니다.
필드
설명
External volume name
외부 볼륨의 이름을 입력합니다.
Storage base URL
클라우드 저장소 위치의 기본 URL을 지정합니다.
Encryption (optional)
사용되는 암호화 유형을 지정합니다. 가능한 값은 다음과 같습니다.
None (default): 암호화가 없습니다.
SSE-KMS (enter key): KMS에 저장된 키를 사용하는 서버 측 암호화입니다. 자세한 내용은 고객 관리 암호화 키 를 참조하십시오.
Access scope
외부 볼륨에 대해 쓰기 작업이 허용되는지 여부를 지정합니다. 다음 테이블의 경우 :ui:`Allow writes`로 설정해야 합니다.
Snowflake를 카탈로그로 사용하는 Iceberg 테이블.
외부 카탈로그를 사용하고 쓰기 가능한 Iceberg 테이블. 외부 관리 Iceberg 테이블은 ALLOWED_WRITE_OPERATIONS 매개 변수가 TRUE로 설정된 카탈로그 연결 데이터베이스를 통해 액세스하는 경우에 쓰기 가능합니다.
Delta 테이블 파일에서 생성된 Iceberg 테이블의 경우 이 매개 변수를 Allow writes`로 설정하면 Snowflake가 외부 저장소에 Iceberg 메타데이터를 쓸 수 있습니다. 자세한 내용은 :ref:`label-tables_iceberg_metadata_delta 섹션을 참조하십시오.
이 필드의 값은 지정된 각 저장소 위치에 대해 클라우드 저장소 계정에 설정한 권한과도 일치해야 합니다.
참고
외부 관리형 Iceberg 테이블을 읽는 데 외부 볼륨을 사용하려는 경우 이 필드를 사용 안 함으로 설정할 수 있습니다. 외부 Iceberg 카탈로그에서 테이블을 읽을 때 Snowflake는 클라우드 저장소에 데이터나 Iceberg 메타데이터 파일을 쓰지 않습니다.
Scope
이 외부 볼륨을 향후 Iceberg 테이블의 기본 위치로 설정할 위치를 선택합니다. 가능한 값은 다음과 같습니다.
Do not set a default: 어느 곳에서도 외부 볼륨을 기본값으로 설정하지 않습니다.
Account: 전체 계정에서 생성되는 Iceberg 테이블의 기본값으로 이 외부 볼륨을 설정합니다.
Specific database: 지정하는 데이터베이스 아래에 생성되는 Iceberg 테이블의 기본값으로 이 외부 볼륨을 설정합니다. 이 데이터베이스를 지정하려면 Specific database`를 선택할 때 표시되는 :ui:`Database 드롭다운을 사용합니다.
Specific schema: 지정하는 스키마 아래에 생성되는 Iceberg 테이블의 기본값으로 이 외부 볼륨을 설정합니다. 이 스키마를 지정하려면 표시되는 Database 드롭다운을 사용하여 먼저 스키마의 상위 데이터베이스를 선택한 다음 스키마를 선택합니다.
Comment (optional)
외부 볼륨에 대한 설명을 지정합니다.
Connectivity
보안 태세를 강화하기 위해 아웃바운드 비공개 연결을 사용할지 여부를 지정합니다. 이 매개 변수 사용에 대한 자세한 내용은 Google Cloud 용 외부 볼륨에 대한 비공개 연결 섹션을 참조하십시오. 가능한 값은 다음과 같습니다.
Public (default): 공용 인터넷을 사용합니다.
Private (Private Service Connect): 아웃바운드 비공개 연결을 사용합니다.
Next 을 선택합니다.
Verify connection & create volume 페이지에서 Snowflake는 Google Cloud Storage에 대한 연결을 확인한 다음 “Successfully connected” 메시지를 표시합니다.
참고
Snowflake가 연결을 확인할 수 없는 경우 권한 또는 외부 볼륨 구성을 확인한 다음 :ui:`Verify again`을 선택합니다.
Create 을 선택합니다.
다음 단계¶
외부 볼륨을 구성하면 Iceberg 테이블을 생성할 수 있습니다.
외부 카탈로그를 사용하는 읽기 전용 Iceberg 테이블을 만들려면 카탈로그 통합 구성하기 섹션을 참조하십시오.
Snowflake 플랫폼이 완벽하게 지원되는 Iceberg 테이블을 만들려면 Snowflake 관리 테이블 만들기 를 참조하십시오.