Azureの外部ボリュームを構成する

外部ボリュームを使用して、自分のMicrosoft AzureコンテナーにSnowflakeの制限付きアクセスを許可します。Snowflakeは、外部ボリュームで次のAzureクラウドストレージサービスをサポートしています。

  • BLOBストレージ

  • Data Lake Storage Gen2

  • 汎用v1

  • 汎用v2

前提条件

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

  • Snowflakeアカウントをホストしているのと同じリージョンにあるAzureストレージコンテナー。

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

Azureストレージファイアウォールを使用してストレージアカウントへの不正なトラフィックをブロックしている場合は、 VNet サブネット IDs の許可 の説明に従って、SnowflakeにAzureストレージアカウントへのアクセスを明示的に許可してください。

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

CREATE EXTERNAL VOLUME コマンドを使用して外部ボリュームを作成します。

注釈

アカウント管理者(ACCOUNTADMIN ロールを持つユーザー)のみが、この SQL コマンドを実行できます。

次の例は、暗号化されたAzureストレージの場所を定義する外部ボリュームを作成しています。

CREATE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-azure-northeurope'
        STORAGE_PROVIDER = 'AZURE'
        STORAGE_BASE_URL = 'azure://exampleacct.blob.core.windows.net/my_container_northeurope/'
        AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
      )
    );
Copy

注釈

STORAGE_BASE_URL の値を指定するときは、 https:// ではなく azure:// のプレフィックスを使用してください。

ステップ2: Snowflakeにストレージの場所へのアクセスを許可する

  1. Microsoftの許可リクエストページへの URL を取得するには、 DESCRIBE EXTERNAL VOLUME コマンドを使用します。以前に作成した外部ボリュームの名前を指定します。

    DESC EXTERNAL VOLUME exvol;
    
    Copy

    次のプロパティの値を記録します。

    プロパティ

    説明

    AZURE_CONSENT_URL

    Microsoftのアクセス許可リクエストページへの URL。

    AZURE_MULTI_TENANT_APP_NAME

    アカウント用に作成されたSnowflakeクライアントアプリケーションの名前。このセクションの後半のステップでは、このアプリケーションに許可されたストレージの場所でアクセストークンを取得するための権限を付与します。

    これらの値は次のステップで使用します。

  2. ウェブブラウザーで、Microsoftの許可リクエストページ(AZURE_CONSENT_URL)に移動します。

  3. Accept を選択します。このアクションは、Snowflakeアカウント用に作成されたAzureサービスプリンシパルが、テナント内の指定したリソースでアクセストークンを取得できるようにします。アクセストークンの取得が成功するのは、サービスプリンシパルにストレージアカウントレベルで適切な権限を付与した場合のみです(次のステップを参照)。

    Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。

  4. Microsoft Azureポータルにログインします。

  5. Azure Services » Storage Accounts に移動します。Snowflakeサービスプリンシパルがアクセスする必要があるストレージアカウント名を選択します。

    注釈

    外部ボリュームの IAM 権限はコンテナレベルではなく、ストレージアカウントレベルで設定する必要があります。

  6. Access Control (IAM) » Add role assignment を選択します。

  7. Storage Blob Data Contributor ロールを選択して、Snowflakeサービスプリンシパルに読み取りと書き込みのアクセスを許可します。

    注釈

    Storage Blob Data Contributor ロールは外部ボリュームの場所への書き込みアクセスを許可します。書き込みアクセスを完全に構成するには、外部ボリュームの ALLOW_WRITES パラメーターを TRUE (デフォルト値)に設定します。

  8. Snowflakeサービスプリンシパルを検索します。これは DESC EXTERNAL VOLUME 出力(ステップ1)の AZURE_MULTI_TENANT_APP_NAME プロパティにあるIDです。AZURE_MULTI_TENANT_APP_NAME プロパティで、アンダースコアの 前にある 文字列を検索します。

    重要

    • このセクションのMicrosoftリクエストページでリクエストされたSnowflakeサービスプリンシパルをAzureが作成するのに、1時間以上かかる場合があります。サービスプリンシパルがすぐに利用できない場合は、1~2時間待ってから、もう一度検索してください。

    • サービスプリンシパルを削除すると、外部ボリュームは機能しなくなります。

    Azure Storage Consoleでロールの割り当てを追加する
  9. Review + assign を選択します。

    注釈

    ロールを割り当てると、変更が有効になるまで最大10分かかることがあります。詳細については、Microsoft Azureドキュメントの 症状 - ロールの割り当て変更が検出されない をご参照ください。

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

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

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Copy

次のステップ

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