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>/') ]
Copy

여기서

  • 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/');
Copy

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

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

DESC STORAGE INTEGRATION <integration_name>;
Copy

여기서

예:

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                  |                  |
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
Copy

출력의 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단계: 외부 스테이지 만들기

생성한 통합을 참조하는 외부 스테이지를 생성합니다.

참고

  • 데이터베이스와 스키마에 대한 USAGE 권한과 스키마에 대한 CREATE STAGE 권한이 부여되거나 이러한 권한을 상속하는 역할을 사용해야 합니다. 스테이지 소유자(즉, 스테이지에서 OWNERSHIP 권한 역할)는 저장소 통합에 대한 USAGE 권한도 있어야 합니다.

    CREATE STAGE 에 대해서는 액세스 제어 요구 사항 섹션을 참조하십시오.

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

SQL을 사용하여 외부 스테이지 만들기

사용 중인 역할에 저장소 통합을 사용하는 스테이지를 생성하는 데 필요한 권한이 부여되거나 상속되도록 하십시오. 예:

GRANT USAGE ON DATABASE mydb TO ROLE myrole;
GRANT USAGE ON SCHEMA mydb.stages TO ROLE myrole;
GRANT CREATE STAGE ON SCHEMA mydb.stages TO ROLE myrole;
GRANT USAGE ON INTEGRATION gcs_int TO ROLE myrole;
Copy

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

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

USE SCHEMA mydb.stages;

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

참고

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

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

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

Snowsight를 사용하여 외부 스테이지 만들기

Snowsight 를 사용하여 명명된 외부 스테이지를 만들려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. 탐색 메뉴에서 Data » Databases 를 선택합니다.

  3. 스테이지를 만들려는 데이터베이스와 스키마를 선택합니다.

  4. Create » Stage 를 선택합니다.

  5. Google Cloud Platform 을 선택합니다.

  6. Stage Name 을 입력합니다.

  7. Google Cloud Storage 버킷의 URL 을 입력합니다.

  8. 기본적으로 Enable Directory Table 가 선택되어 있습니다. 그러면 스테이지에서 파일을 볼 수 있지만, 웨어하우스가 필요하므로 비용이 발생합니다. 지금은 이 옵션을 선택 취소하고 나중에 디렉터리 테이블을 활성화하도록 할 수 있습니다.

  9. Authentication 을 활성화합니다.

  10. 메뉴에서 저장소 통합을 선택합니다.

  11. 선택적으로, SQL Preview 를 확장하여 생성된 SQL 문을 봅니다. AUTO_REFRESH와 같은 스테이지에 대한 추가 옵션을 지정하려면 워크시트에서 이 SQL 미리 보기를 열 수 있습니다.

  12. Create 를 선택합니다.

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

SQL 또는 웹 인터페이스를 사용하여 저장소 통합을 사용하도록 기존의 외부 스테이지 구성을 편집할 수 있습니다.

참고

  • 스테이지에 대한 인증 또는 암호화 설정을 비활성화할 수 없습니다.

  • 인증에 저장소 통합을 사용하도록 스테이지를 업데이트할 수 있습니다. 하지만 스테이지에서 저장소 통합을 이미 사용하는 경우 인증 유형을 자격 증명으로 변경할 수 없습니다. 인증 유형을 변경하려면 스테이지를 삭제하고 다시 생성할 수 있습니다.

SQL을 사용하여 스테이지 편집하기

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

ALTER STAGE my_gcs_stage
  SET STORAGE_INTEGRATION = gcs_int;
Copy

Snowsight를 사용하여 스테이지 편집하기

  1. Snowsight 에 로그인합니다.

  2. 탐색 메뉴에서 Data » Databases 를 선택합니다.

  3. 편집하려는 스테이지를 선택합니다.

  4. More options » Edit 를 선택합니다.

  5. 스테이지에 대해 변경 작업을 수행합니다.

  6. Save 를 선택합니다.