Google Cloud Storage용 통합 구성하기

이 항목에서는 Google Cloud Storage 버킷에 저장된 데이터 파일에 대한 보안 액세스를 구성하는 방법에 대해 설명합니다.

이 항목의 내용:

Snowflake 저장소 통합 구성하기

이 섹션에서는 Snowflake가 외부(즉, 클라우드 저장소) 스테이지에서 참조하는 Google Cloud Storage 버킷에서 읽고 쓸 수 있도록 저장소 통합을 사용하는 방법을 설명합니다. 통합은 시크릿 키 또는 액세스 토큰과 같은 명시적 클라우드 공급자 자격 증명을 전달할 필요가 없는 명명된 일급 Snowflake 오브젝트입니다. 대신에, 통합 오브젝트는 클라우드 저장소 서비스 계정을 참조합니다. 조직의 관리자가 클라우드 저장소 계정에서 서비스 계정 권한을 부여합니다.

또한, 관리자는 통합을 사용하는 외부 스테이지에서 액세스하는 특정 클라우드 저장소 버킷 세트(및 선택적 경로)으로 사용자를 제한할 수 있습니다.

참고

이 섹션의 지침을 완료하려면 클라우드 저장소 프로젝트에 프로젝트 편집자로 액세스해야 합니다. 프로젝트 편집자가 아닌 경우 클라우드 저장소 관리자에게 이러한 작업을 수행하도록 요청하십시오.

다음 다이어그램은 클라우드 저장소 스테이지의 통합 흐름을 보여줍니다.

Google Cloud Storage Stage Integration Flow
  1. 외부(즉, 클라우드 저장소) 스테이지는 정의에서 저장소 통합 오브젝트를 참조합니다.

  2. Snowflake는 저장소 통합을 계정에 대해 생성된 클라우드 저장소 서비스 계정과 자동으로 연결합니다. Snowflake는 Snowflake 계정의 모든 GCS 저장소 통합에서 참조하는 단일 서비스 계정을 생성합니다.

  3. 클라우드 저장소 프로젝트의 프로젝트 편집자는 스테이지 정의에서 참조된 버킷에 액세스할 수 있는 권한을 서비스 계정에 부여합니다. 많은 외부 스테이지 오브젝트가 다른 버킷과 경로를 참조하고 인증에서 동일한 통합을 사용할 수 있습니다.

사용자가 스테이지에서 데이터를 로드하거나 언로드할 때 Snowflake는 액세스를 허용 또는 거부하기 전 버킷의 서비스 계정에 부여된 권한을 확인합니다.

이 섹션의 내용:

1단계: Snowflake에서 클라우드 저장소 통합 만들기

CREATE STORAGE INTEGRATION 명령을 사용하여 통합을 생성합니다. 통합은 외부 클라우드 저장소에 대한 인증 책임을 Snowflake 생성 엔터티(예: 클라우드 서비스 계정)에 위임하는 Snowflake 오브젝트입니다. 클라우드 저장소 버킷에 액세스하기 위해 Snowflake는 데이터 파일을 저장하는 버킷에 액세스할 수 있는 권한을 부여할 수 있는 서비스 계정을 생성합니다.

단일 저장소 통합은 여러 외부(즉, GCS) 스테이지를 지원할 수 있습니다. 스테이지 정의의 URL은 STORAGE_ALLOWED_LOCATIONS 매개 변수에 대해 지정된 Azure 컨테이너GCS 버킷(및 선택적 경로)와 일치해야 합니다.

참고

계정 관리자(ACCOUNTADMIN 역할의 사용자) 또는 전역 CREATE INTEGRATION 권한이 있는 역할만 이 SQL 명령을 실행할 수 있습니다.

CREATE STORAGE INTEGRATION <integration_name>
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://<bucket>/<path>/', 'gcs://<bucket>/<path>/')
  [ STORAGE_BLOCKED_LOCATIONS = ('gcs://<bucket>/<path>/', 'gcs://<bucket>/<path>/') ]

여기서:

  • integration_name 은 새 통합의 이름입니다.

  • bucket 은 데이터 파일을 저장하는 클라우드 저장소 버킷의 이름입니다(예: mybucket). 필수 STORAGE_ALLOWED_LOCATIONS 매개 변수와 선택적 STORAGE_BLOCKED_LOCATIONS 매개 변수는 이 통합을 참조하는 스테이지가 생성되거나 수정될 때 이러한 버킷에 대한 액세스를 각각 제한하거나 차단합니다.

  • path 는 버킷의 오브젝트를 세부적으로 제어하기 위해 사용할 수 있는 선택적 경로입니다.

다음은 통합을 사용하여 두 버킷과 경로 중 하나를 참조하는 외부 스테이지를 명시적으로 제한하는 통합을 만드는 예입니다. 이후 단계에서 이러한 버킷과 경로 중 하나를 참조하는 외부 스테이지를 생성합니다.

이 통합도 사용하는 추가 외부 스테이지는 허용되는 버킷과 경로를 참조할 수 있습니다.

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/', 'gcs://mybucket2/path2/')
  STORAGE_BLOCKED_LOCATIONS = ('gcs://mybucket1/path1/sensitivedata/', 'gcs://mybucket2/path2/sensitivedata/');

2단계: Snowflake 계정에 대한 클라우드 저장소 서비스 계정 검색

DESCRIBE INTEGRATION 명령을 실행하여 Snowflake 계정에 대해 자동으로 생성된 클라우드 저장소 서비스 계정에 대한 ID를 검색합니다.

DESC STORAGE INTEGRATION <integration_name>;

여기서:

예:

DESC STORAGE INTEGRATION gcs_int;

+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
| property                    | property_type | property_value                                                              | property_default |
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------|
| ENABLED                     | Boolean       | true                                                                        | false            |
| STORAGE_ALLOWED_LOCATIONS   | List          | gcs://mybucket1/path1/,gcs://mybucket2/path2/                               | []               |
| STORAGE_BLOCKED_LOCATIONS   | List          | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/   | []               |
| STORAGE_GCP_SERVICE_ACCOUNT | String        | service-account-id@project1-123456.iam.gserviceaccount.com                  |                  |
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+

출력의 STORAGE_GCP_SERVICE_ACCOUNT 속성은 Snowflake 계정에 대해 생성된 클라우드 저장소 서비스 계정을 보여줍니다(예: service-account-id@project1-123456.iam.gserviceaccount.com). 전체 Snowflake 계정에 대해 단일 클라우드 저장소 서비스 계정을 프로비저닝합니다. 모든 클라우드 저장소 통합은 해당 서비스 계정을 사용합니다.

3단계: 서비스 계정에 버킷 오브젝트 액세스 권한 부여

다음 단계별 지침에서는 클라우드 저장소 버킷을 사용하여 데이터를 로드 및 언로드할 수 있도록 Google Cloud Platform 콘솔에서 Snowflake에 대한 IAM 액세스 허가를 구성하는 방법을 설명합니다.

사용자 지정 IAM 역할 만들기

버킷에 액세스하고 오브젝트를 가져오기 위해 필요한 권한이 있는 사용자 지정 역할을 생성합니다.

  1. Google Cloud Platform Console에 프로젝트 편집자로 로그인합니다.

  2. 홈 대시보드에서 IAM & admin » Roles 를 선택합니다.

  3. Create Role 을 클릭합니다.

  4. 사용자 지정 역할의 이름과 설명을 입력합니다.

  5. Add Permissions 를 클릭합니다.

  6. 권한 목록을 필터링하고 목록에 다음을 추가합니다.

    데이터 로딩 전용
    • storage.buckets.get

    • storage.objects.get

    • storage.objects.list

    삭제 옵션 포함 데이터 로딩

    참고

    이 권한을 사용하면 스테이지에서 REMOVE 명령을 실행할 수도 있습니다.

    • storage.buckets.get

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

    데이터 로딩 및 언로딩
    • storage.buckets.get

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

    데이터 언로딩 전용
    • storage.buckets.get

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.list

  7. Create 를 클릭합니다.

클라우드 저장소 서비스 계정에 사용자 지정 역할 할당하기

  1. Google Cloud Platform Console에 프로젝트 편집자로 로그인합니다.

  2. 홈 대시보드에서 Cloud Storage » Browser 를 선택합니다.

    Bucket List in Google Cloud Platform Console
  3. 액세스를 구성할 버킷을 선택합니다.

  4. 오른쪽 상단 모서리에서 SHOW INFO PANEL 를 클릭합니다. 버킷에 대한 정보 패널이 표시됩니다.

  5. ADD PRINCIPAL 버튼을 클릭합니다.

  6. New principals 필드에서 이 항목의 2단계: Snowflake 계정에 대한 클라우드 저장소 서비스 계정 검색 의 DESCRIBE INTEGRATION 출력에서 서비스 계정 이름을 검색합니다.

    Bucket Information Panel in Google Cloud Platform Console
  7. Select a role 드롭다운에서 Custom » <역할> 을 선택합니다. 여기서 <역할> 은 이 항목의 사용자 지정 IAM 역할 만들기 에서 생성한 사용자 지정 클라우드 저장소 역할입니다.

  8. Save 버튼을 클릭합니다. 서비스 계정 이름이 정보 패널의 Storage Object Viewer 역할 드롭다운에 추가됩니다.

    Storage Object Viewer role list in Google Cloud Platform Console

클라우드 키 관리 서비스 암호화 키에 클라우드 저장소 서비스 계정 권한 부여하기

참고

이 단계는 Google Cloud Key Management Service(클라우드 KMS)에 저장된 키를 사용하여 GCS 버킷을 암호화하는 경우에만 필요합니다.

  1. Google Cloud Platform Console에 프로젝트 편집자로 로그인합니다.

  2. 홈 대시보드에서 Security » Cryptographic keys 를 선택합니다.

  3. GCS 버킷에 할당된 키 링을 선택합니다.

  4. 오른쪽 상단 모서리에서 SHOW INFO PANEL 를 클릭합니다. 키 링에 대한 정보 패널이 표시됩니다.

  5. ADD PRINCIPAL 버튼을 클릭합니다.

  6. New principals 필드에서 이 항목의 2단계: Snowflake 계정에 대한 클라우드 저장소 서비스 계정 검색 의 DESCRIBE INTEGRATION 출력에서 서비스 계정 이름을 검색합니다.

  7. Select a role 드롭다운에서 Cloud KMS CrytoKey Encryptor/Decryptor 역할을 선택합니다.

  8. Save 버튼을 클릭합니다. 서비스 계정 이름이 정보 패널의 Cloud KMS CrytoKey Encryptor/Decryptor 역할 드롭다운에 추가됩니다.

4단계: 외부 스테이지 만들기

생성한 통합을 참조하는 외부(예: 클라우드 저장소) 스테이지를 생성합니다.

참고

  • 통합을 사용하는 스테이지를 생성하려면 스키마에 대한 CREATE STAGE 권한과 저장소 통합에 대한 USAGE 권한이 있는 역할이 필요합니다. 예:

    GRANT CREATE STAGE ON SCHEMA public TO ROLE myrole;
    
    GRANT USAGE ON INTEGRATION gcs_int TO ROLE myrole;
    
  • CREATE STAGE 문에서 저장소 통합을 참조하려면 역할에 저장소 통합 오브젝트에 대한 USAGE 권한이 있어야 합니다.

  • 지정된 폴더 경로로 필터링할 URL 값에 슬래시(/)를 추가합니다. 슬래시를 생략하면 지정된 경로의 접두사로 시작하는 모든 파일과 폴더가 포함됩니다.

    스테이지에서 비정형 데이터 파일에 액세스하고 검색하려면 슬래시가 필수적입니다.

CREATE STAGE 명령을 사용하여 외부 스테이지를 생성합니다.

예를 들어, mydb.public 을 사용자 세션의 현재 데이터베이스 및 스키마로 설정한 후 이름이 my_gcs_stage 인 스테이지를 생성합니다. 이 예에서 스테이지는 통합에서 지원하는 클라우드 저장소 버킷 및 경로 mybucket1/path1 을 참조합니다. 이 스테이지는 이름이 my_csv_format 인 명명된 파일 형식 오브젝트도 참조합니다.

USE SCHEMA mydb.public;

CREATE STAGE my_gcs_stage
  URL = 'gcs://mybucket1/path1'
  STORAGE_INTEGRATION = gcs_int
  FILE_FORMAT = my_csv_format;

참고

  • 스테이지 소유자(즉, 스테이지에서 OWNERSHIP 권한 역할)는 저장소 통합에 대한 USAGE 권한이 있어야 합니다.

  • 통합을 사용하는 스테이지에서 데이터를 로드하거나 언로드하려면 역할에 해당 스테이지에 대한 USAGE 권한이 있어야 합니다. 저장소 통합에 대한 USAGE 권한도 가질 필요는 없습니다.

  • STORAGE_INTEGRATION 매개 변수는 FILE_FORMAT과 같은 다른 스테이지 매개 변수와 별도로 처리됩니다. 이러한 다른 매개 변수는 GCS 버킷에 액세스하기 위해 사용하는 통합에 관계없이 동일하게 지원됩니다.

저장소 통합을 사용하도록 기존 스테이지 수정하기

클라우드 저장소 액세스에 저장소 통합을 사용하도록 기존 외부(예: 클라우드 저장소) 스테이지를 수정하려면 다음 안내를 따릅니다.

  1. 명명된 저장소 통합을 생성합니다. 이 항목의 1단계: Snowflake에서 클라우드 저장소 통합 만들기 에서 제공되는 지침을 참조하십시오.

  2. ALTER STAGE 를 사용하여 스테이지를 수정합니다. 예:

    ALTER STAGE my_gcs_stage
      SET STORAGE_INTEGRATION = gcs_int;
    
맨 위로 이동