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

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

前提条件

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

  • Google Cloud Storageのバケット。

  • IAM ポリシーとロールを作成および管理するためのGoogle Cloudの権限。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')
      )
    );
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 console でSnowflakeの IAM アクセス許可を構成します。

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

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

  1. プロジェクトエディターとして Google Cloud 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 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 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_external_volume');
Copy

注釈

次のエラーを受け取った場合は、アカウント管理者がSnowflakeデプロイメントリージョンで AWS STS をアクティブ化する必要があります。手順については、AWS ドキュメントで AWS リージョンで AWS STS を管理する をご参照ください。

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 サービスアカウントを取得する

  1. Snowsight にサインインします。

  2. 左下隅にある自身の名前 » Switch role を選択し、次に ACCOUNTADMIN または CREATE EXTERNAL VOLUME 権限を持つロールを選択します。

    詳細については、 プライマリロールの変更 をご参照ください。

  3. ナビゲーションメニューで Catalog » External data を選択します。

  4. External volumes タブを選択します。

  5. + Create を選択します。

  6. Select Google Cloud Storage and then select Next.

  7. Grant storage access ページから、 GCS service account の値をテキストエディターにコピーします。

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

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

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

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

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

  1. プロジェクトエディターとして Google Cloud 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 console にログインします。

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

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

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

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

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

ステップ3: 外部ボリュームを作成する

Snowsight を使用してSnowflakeで外部ボリュームを作成するには、次のステップに従います。

  1. Snowsight にサインインします。

  2. 左下隅にある自身の名前 » Switch role を選択し、次に ACCOUNTADMIN または CREATE EXTERNAL VOLUME 権限を持つロールを選択します。

    手順については、 プライマリロールの変更 をご参照ください。

  3. ナビゲーションメニューで Catalog » External data を選択します。

  4. External volumes タブを選択します。

  5. + Create を選択します。

  6. Select Google Cloud Storage and then select Next.

  7. Next を選択します。

    注釈

    以前に Snowflakeアカウントの GCS サービスアカウントを取得 し、 その GCS サービスアカウントにカスタムロールを割り当てた ときに、既にストレージアクセスを許可しています。

  8. 外部ボリュームを構成するには、 Configure external volume ページで次のフィールドに入力します。

    フィールド

    説明

    External volume name

    外部ボリュームの名前を入力します。

    Storage base URL

    クラウドストレージの場所のベース URL を指定します。

    Encryption (optional)

    使用される暗号化タイプを指定します。可能な値は次のとおりです。

    • None (default):暗号化なし。

    • SSE-KMS (enter key):KMS に格納されたキーを使用したサーバー側の暗号化。詳細については、 顧客管理暗号化キー をご覧ください。

    Access scope

    外部ボリュームに対して書き込み操作を許可するかどうかを指定します。次のテーブルの場合 Allow writes に設定する必要があります。

    • Snowflakeをカタログとして使用するIcebergテーブル。

    • 外部カタログを使用し、書き込み可能なIcebergテーブル。外部で管理されているIcebergテーブルは、 ALLOWED_WRITE_OPERATIONS パラメーターが TRUE に設定された、カタログにリンクされたデータベースを通じてアクセスすると書き込み可能です。

    Deltaテーブルファイルから作成されたIcebergテーブルの場合、このパラメーターを Allow writes に設定すると、SnowflakeがIcebergメタデータを外部ストレージに書き込めるようになります。詳細については、 Deltaベーステーブル をご参照ください。

    このフィールドの値は、指定した各ストレージの場所のクラウドストレージアカウントに設定した権限と一致する必要があります。

    注釈

    外部管理Icebergテーブルの読み込みに外部ボリュームを使用する場合は、このフィールドをOffに設定します。外部Icebergカタログのテーブルを読み取る場合、SnowflakeはデータやIcebergメタデータファイルをクラウドストレージに書き込みません。

    Scope

    この外部ボリュームを、将来のIcebergテーブルのデフォルト保存先として設定する場所を選んでください。可能な値は次のとおりです。

    • Do not set a default:外部ボリュームをどこでもデフォルトとして設定しないでください。

    • Account:アカウント全体の下で作成されるIcebergテーブルのデフォルトとして外部ボリュームを設定します。

    • Specific database:指定したデータベース下に作成されるIcebergテーブルのデフォルトとして外部ボリュームを設定します。このデータベースを指定するには、 Specific database を選択したときに表示される Database ドロップダウンを使用します。

    • Specific schema:指定したスキーマ下に作成されるIcebergテーブルのデフォルトとして外部ボリュームを設定します。このスキーマを指定するには、表示される Database ドロップダウンを使用して、最初にスキーマの親データベースを選択してからスキーマを選択します。

    Comment (optional)

    外部ボリュームのコメントを指定します。

    Connectivity

    セキュリティ体制を強化するためにアウトバウンドプライベート接続を使用するかどうかを指定します。このパラメーターの使用に関する情報については、 Google Cloud の外部ボリュームへのプライベート接続 をご参照ください。可能な値は次のとおりです。

    • Public (default):公共のインターネットを使用します。

    • Private (Private Service Connect):アウトバウンドプライベート接続を使用します。

  9. Next を選択します。

    Verify connection & create volume ページでは、SnowflakeはGoogle Cloud Storageへの接続を確認し、「正常に接続されました」メッセージを表示します。

    注釈

    Snowflakeが接続を確認できない場合は、権限または外部ボリュームの構成を確認して、 Verify again を選択してください。

  10. Create を選択します。

次のステップ

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