Google Cloud Storageの外部ボリュームを構成する¶
外部ボリュームを使用して、SnowflakeにGoogle Cloud Storage(GCS)バケットへの制限付きアクセスを許可します。
前提条件¶
外部ボリュームを構成する前に、以下のものが必要です。
- Google Cloud Storageのバケット。 - 外部で管理されているIcebergテーブルに外部ボリュームを使用するには、すべてのテーブルデータとメタデータファイルがバケットに配置されている必要があります。 
- データ復旧をサポートするには、 外部クラウドストレージの場所のバージョン管理を有効にします。 
 
- 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')
      )
    );
ステップ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 を選択します。 
- Service で、 storage、 Filter の順に選択します。 
- 権限のリストをフィルターし、リストから次を追加します。 - storage.buckets.get
- storage.objects.create
- storage.objects.delete
- storage.objects.get
- storage.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 Key Management Serviceの鍵について、GCSサービスアカウントに権限を付与します。¶
注釈
この手順は、Google Cloud Key Management Service(Cloud 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 を選択します。サービスアカウント名は、情報パネルの 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 を管理する をご参照ください。
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.
次のステップ¶
外部ボリュームを構成したら、Icebergテーブルを作成できます。
- 外部カタログを使用する読み取り専用のIcebergテーブルを作成するには、 カタログ統合の構成 をご参照ください。 
- SnowflakeプラットフォームをフルサポートするIcebergテーブルを作成するには、 Snowflake管理のテーブルを作成する を参照してください。