Azureの外部ボリュームを構成する¶
外部ボリュームを使用して、自分のMicrosoft AzureコンテナーにSnowflakeの制限付きアクセスを許可します。Snowflakeは、外部ボリュームで次のAzureクラウドストレージサービスをサポートしています。
- BLOBストレージ 
- Data Lake Storage Gen2 
- 汎用v1 
- 汎用v2 
- Microsoft Fabric OneLake 
注釈
セキュリティ体制を強化するため、ネットワークトラフィックにパブリックインターネットではなくプライベート接続を使用するように外部ボリュームを構成できます。詳細については、 Microsoft Azure の外部ボリュームへのプライベート接続 をご参照ください。
前提条件¶
外部ボリュームを構成する前に、以下のものが必要です。
- Azureストレージコンテナー。 - 外部で管理されるIcebergテーブルに外部ボリュームを使用するには、すべてのテーブルデータとメタデータファイルをコンテナー内に配置する必要があります。 
- データ復旧をサポートするには、 外部クラウドストレージの場所のバージョン管理を有効にします。 
 
- 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'
      )
    );
注釈
- STORAGE_BASE_URL の値を指定するときは、 - https://ではなく- azure://のプレフィックスを使用してください。
- OneLake の場所の指定(プレビュー機能)については、 CREATE EXTERNAL VOLUME リファレンスページをご参照ください。 
- Microsoft Fabric OneLake のストレージロケーションにリージョンのエンドポイントを使用する場合は、Microsoft Fabricの容量と同じリージョンを使用します。これは、Snowflakeアカウントをホストしているリージョンとも同じにする必要があります。 
ステップ2:Snowflakeにストレージの場所へのアクセスを許可する¶
- Microsoftの許可リクエストページへの URL を取得するには、 DESCRIBE EXTERNAL VOLUME コマンドを使用します。以前に作成した外部ボリュームの名前を指定します。 - DESC EXTERNAL VOLUME exvol; - 次のプロパティの値を記録します。 - プロパティ - 説明 - AZURE_CONSENT_URL- Microsoftのアクセス許可リクエストページへの URL。 - AZURE_MULTI_TENANT_APP_NAME- アカウント用に作成されたSnowflakeクライアントアプリケーションの名前。このセクションの後半のステップでは、このアプリケーションに許可されたストレージの場所でアクセストークンを取得するための権限を付与します。 - これらの値は次のステップで使用します。 
- ウェブブラウザーで、Microsoftの許可リクエストページ( - AZURE_CONSENT_URL)に移動します。
- Accept を選択します。このアクションは、Snowflakeアカウント用に作成されたAzureサービスプリンシパルが、テナント内の指定したリソースでアクセストークンを取得できるようにします。アクセストークンの取得が成功するのは、サービスプリンシパルにストレージアカウントレベルで適切な権限を付与した場合のみです(次のステップを参照)。 - Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。 
- Microsoft Azureポータルにログインします。 
- Go to Azure Services » Storage Accounts. Select the name of the storage account that the Snowflake service principal needs to access. - 注釈 - 外部ボリュームの IAM 権限はコンテナレベルではなく、ストレージアカウントレベルで設定する必要があります。 
- Access Control (IAM) » Add role assignment を選択します。 
- Storage Blob Data Contributorロールを選択して、Snowflakeサービスプリンシパルに読み取りと書き込みのアクセスを許可します。- 注釈 - Storage Blob Data Contributorロールは外部ボリュームの場所への書き込みアクセスを許可します。書き込みアクセスを完全に構成するには、外部ボリュームの- ALLOW_WRITESパラメーターを- TRUE(デフォルト値)に設定します。
- Snowflakeサービスプリンシパルを検索します。これは DESC EXTERNAL VOLUME 出力(ステップ1)の AZURE_MULTI_TENANT_APP_NAME プロパティにあるIDです。AZURE_MULTI_TENANT_APP_NAME プロパティで、アンダースコアの 前にある 文字列を検索します。 - 重要 - このセクションのMicrosoftリクエストページでリクエストされたSnowflakeサービスプリンシパルをAzureが作成するのに、1時間以上かかる場合があります。サービスプリンシパルがすぐに利用できない場合は、1~2時間待ってから、もう一度検索してください。 
- サービスプリンシパルを削除すると、外部ボリュームは機能しなくなります。 
   
- Review + assign を選択します。 - 注釈 - ロールを割り当てると、変更が有効になるまで最大10分かかることがあります。詳細については、Microsoft Azureドキュメントの 症状 - ロールの割り当て変更が検出されない をご参照ください。 
ステップ3: ストレージへのアクセスを確認する¶
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管理のテーブルを作成する を参照してください。