Google Cloud Storageの外部ボリュームを構成する

外部ボリュームを使用して、SnowflakeにGoogle Cloud Storage(GCS)バケットへの制限付きアクセスを許可します。

前提条件

外部ボリュームを構成する前に、以下のものが必要です。

  • Snowflakeアカウントをホストしているのと同じリージョンにあるGoogle Cloud Storageバケット。

  • IAM ポリシーとロールを作成および管理するためのGoogle Cloudの権限。Google Cloudの管理者でない場合は、Google Cloud管理者にこれらのタスクの実行を依頼します。

ステップ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')
      )
    );
Copy

ステップ2:Snowflakeアカウント用のGCSサービスアカウントを取得する

Snowflakeアカウント用に自動的に作成された GCS サービスアカウントの ID を取得するには、 DESCRIBE EXTERNAL VOLUME コマンドを使用します。以前に作成した外部ボリュームの名前を指定します。

例:

DESC EXTERNAL VOLUME my_gcs_external_volume;
Copy

出力に STORAGE_GCP_SERVICE_ACCOUNT プロパティの値を記録します(例えば、 service-account-id@project1-123456.iam.gserviceaccount.com)。

Snowflakeは、Snowflakeアカウント全体に単一のGCSサービスアカウントをプロビジョニングします。すべてのGCS外部ボリュームは、そのサービスアカウントを使用します。

ステップ3: バケットオブジェクトにアクセスするためのサービスアカウント権限を付与する

このステップでは、Google Cloud Platform ConsoleでSnowflakeの IAM アクセス許可を構成します。

カスタム IAM ロールを作成する

バケットにアクセスしてオブジェクトを取得するために必要な権限を持つカスタムロールを作成します。

  1. プロジェクトエディターとしてGoogle Cloud Platform Consoleにログインします。

  2. ホームダッシュボードから、 IAM & Admin » Roles を選択します。

  3. Create Role を選択します。

  4. カスタムロールの Title およびオプションの Description を入力します。

  5. Add Permissions を選択します。

  6. Service で、 storageFilter の順に選択します。

  7. 権限のリストをフィルターし、リストから次を追加します。

    • storage.buckets.get

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

  8. Add を選択します。

  9. Create を選択します。

GCSサービスアカウントにカスタムロールを割り当てる

  1. プロジェクトエディターとしてGoogle Cloud Platform Consoleにログインします。

  2. ホームダッシュボードから、 Cloud Storage » Buckets を選択します。

  3. バケットのリストをフィルタリングし、外部ボリュームの作成時に指定したバケットを選択します。

  4. Permissions » View by principals を選択してから、 Grant access を選択します。

  5. Add principals の下に、 ステップ2:Snowflakeアカウント用のGCSサービスアカウントを取得する に出力されたサービスアカウント名を貼り付けます。

  6. Assign roles で、以前に作成したカスタム IAM ロールを選択し、次に Save を選択します。

Google Cloud Key Management Serviceの鍵について、GCSサービスアカウントに権限を付与します。

注釈

この手順は、Google Cloud Key Management Service(Cloud KMS)に保存されているキーを使用して GCS バケットが暗号化されている 場合にのみ 必要です。

  1. プロジェクトエディターとしてGoogle Cloud Platform Consoleにログインします。

  2. ホームダッシュボードから、 Security » Key Management を検索して選択します。

  3. GCS バケットに割り当てられているキーリングを選択します。

  4. 右上隅の SHOW INFO PANEL を選択します。キーリングの情報パネルが表示されます。

  5. Add members フィールドで、 ステップ2:Snowflakeアカウント用のGCSサービスアカウントを取得する の DESCRIBE EXTERNAL VOLUME 出力からサービスアカウント名を検索します。

  6. Select a role ドロップダウンから、 Cloud KMS CryptoKey Encrypter/Decrypter ロールを選択します。

  7. Add を選択します。サービスアカウント名は、情報パネルの Cloud KMS CryptoKey Encrypter/Decrypter ロールドロップダウンに追加されます。

ステップ4: ストレージへのアクセスを確認する

Snowflakeがストレージプロバイダーに正常に認証できることを確認するには、 SYSTEM$VERIFY_EXTERNAL_VOLUME 関数を呼び出します。

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Copy

次のステップ

外部ボリュームを構成したら、Icebergテーブルを作成できます。