Azureの外部ボリュームを構成する¶
外部ボリュームを使用して、自分のMicrosoft AzureコンテナーにSnowflakeの制限付きアクセスを許可します。Snowflakeは、外部ボリュームで次のAzureクラウドストレージサービスをサポートしています。
BLOBストレージ
Data Lake Storage Gen2
汎用v1
汎用v2
Microsoft Fabric OneLake
注釈
セキュリティ体制を強化するため、ネットワークトラフィックにパブリックインターネットではなくプライベート接続を使用するように外部ボリュームを構成できます。詳細については、 Microsoft Azure の外部ボリュームへのプライベート接続 をご参照ください。
Azureの外部ボリュームを構成するには、 SQL を使用 するか、 Snowsightを使用 できます。
前提条件¶
外部ボリュームを構成する前に、以下のものが必要です。
Azureストレージコンテナー。
外部で管理されるIcebergテーブルに外部ボリュームを使用するには、すべてのテーブルデータとメタデータファイルをコンテナー内に配置する必要があります。
データ復旧をサポートするには、 外部クラウドストレージの場所のバージョン管理を有効にします。
IAM ポリシーとロールを作成および管理するためのAzureにおける権限。Azure管理者でない場合は、Azure管理者にこれらのタスクを実行するよう依頼します。
Azureストレージファイアウォールを使用してストレージアカウントへの不正なトラフィックをブロックしている場合は、 Allow the VNet subnet IDs の説明に従って、SnowflakeにAzureストレージアカウントへのアクセスを明示的に許可してください。
Configure an external volume by using SQL¶
ステップ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_URLMicrosoftのアクセス許可リクエストページへの URL。
AZURE_MULTI_TENANT_APP_NAMEアカウント用に作成されたSnowflakeクライアントアプリケーションの名前。このセクションの後半のステップでは、このアプリケーションに許可されたストレージの場所でアクセストークンを取得するための権限を付与します。
これらの値は次のステップで使用します。
ウェブブラウザーで、Microsoftの許可リクエストページ(
AZURE_CONSENT_URL)に移動します。Accept を選択します。このアクションは、Snowflakeアカウント用に作成されたAzureサービスプリンシパルが、テナント内の指定したリソースでアクセストークンを取得できるようにします。アクセストークンの取得が成功するのは、サービスプリンシパルにストレージアカウントレベルで適切な権限を付与した場合のみです(次のステップを参照)。
Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。
Microsoft Azureポータルにログインします。
Azure Services » Storage Accounts に移動します。Snowflakeサービスプリンシパルがアクセスする必要があるストレージアカウント名を選択します。
注釈
外部ボリュームの IAM 権限はコンテナレベルではなく、ストレージアカウントレベルで設定する必要があります。
Access Control (IAM) » Add role assignment を選択します。
Storage Blob Data Contributorロールを選択して、Snowflakeサービスプリンシパルに読み取りと書き込みのアクセスを許可します。注釈
Storage Blob Data Contributorロールは外部ボリュームの場所への書き込みアクセスを許可します。書き込みアクセスを完全に構成するには、外部ボリュームのALLOW_WRITESパラメーターをTRUE(デフォルト値)に設定します。
Select + Select members.
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.
Configure an external volume in Snowsight¶
Snowsight にサインインします。
左下隅にある自身の名前 » Switch role を選択し、次に ACCOUNTADMIN または CREATE EXTERNAL VOLUME 権限を持つロールを選択します。
詳細については、 プライマリロールの変更 をご参照ください。
ナビゲーションメニューで Catalog » External data を選択します。
External volumes タブを選択します。
Select + Create.
Select Microsoft Azure & OneLake and then select Next.
Prerequisites ページから、 Azure tenant ID に、Azureテナント ID を指定します。
Azureテナント ID を見つけるには、Microsoft Entraドキュメント内の Microsoft Entraテナント ID を見つける方法 をご参照ください。
Select Next.
From the Grant storage access page, to grant Snowflake access to the storage location, follow these steps:
Snowflakeがお使いのAzureストレージまたはMicrosoft OneLake に接続することに同意するには、 Provide consent を選択します。
The Microsoft permissions request page opens in a new browser tab.
From the Microsoft permissions request page, select Accept. This action allows the Azure service principal created for your Snowflake account to obtain an access token on a specified resource inside your tenant. Obtaining an access token succeeds only if you grant the service principal the appropriate permissions on the storage account level (see the next step).
Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。
In Snowflake, from the Multi-tenant app name field, copy the name of the Snowflake client application created for your account into a text editor. In the next step, you grant this application permission to obtain an access token on your allowed storage location.
許可されたストレージの場所でアクセストークンを取得する権限をアプリケーションに付与するには、次のステップに従います。
Microsoft Azureポータルにログインします。
Azure Services » Storage Accounts に移動します。Snowflakeサービスプリンシパルがアクセスする必要があるストレージアカウント名を選択します。
注釈
外部ボリュームの IAM 権限はコンテナレベルではなく、ストレージアカウントレベルで設定する必要があります。
Access Control (IAM) » Add role assignment を選択します。
Storage Blob Data Contributorロールを選択して、Snowflakeサービスプリンシパルに読み取りと書き込みのアクセスを許可します。注釈
Storage Blob Data Contributorロールは外部ボリュームの場所への書き込みアクセスを許可します。書き込みアクセスを完全に構成するには、外部ボリュームのALLOW_WRITESパラメーターをTRUE(デフォルト値)に設定します。Select + Select members.
Snowflakeサービスプリンシパルを検索します。
これは、前のステップでSnowflakeからコピーした マルチテナントアプリ名 です。
重要
このセクションのMicrosoftリクエストページでリクエストされたSnowflakeサービスプリンシパルをAzureが作成するのに、1時間以上かかる場合があります。サービスプリンシパルがすぐに利用できない場合は、1~2時間待ってから、もう一度検索してください。
サービスプリンシパルを削除すると、外部ボリュームは機能しなくなります。
Review + assign を選択します。
注釈
ロールを割り当てると、変更が有効になるまで最大10分かかることがあります。詳細については、Microsoft Azureドキュメントの 症状 - ロールの割り当て変更が検出されない をご参照ください。
Snowflakeで、 Next を選択します。
Snowflakeで外部ボリュームを構成するには、 Configure external volume ページで次のフィールドに入力します。
フィールド
説明
External volume name
外部ボリュームの名前を入力します。
Storage base URL
クラウドストレージの場所のベース URL を指定します。
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
セキュリティ体制を強化するためにアウトバウンドプライベート接続を使用するかどうかを指定します。アウトバウンドプライベート接続の使用に関する情報については、 Microsoft Azure の外部ボリュームへのプライベート接続 をご参照ください。可能な値は次のとおりです。
Public (default):公共のインターネットを使用します。
Private (Azure Private Endpoint):アウトバウンドプライベート接続を使用します。
Select Next.
Verify connection & create volume ページでは、SnowflakeはAzureへの接続を確認し、「正常に接続されました」メッセージを表示します。
注釈
Snowflakeが接続を確認できない場合は、権限または外部ボリュームの構成を確認して、 Verify again を選択してください。
Select Create.
次のステップ¶
外部ボリュームを構成したら、Icebergテーブルを作成できます。
外部カタログを使用する読み取り専用のIcebergテーブルを作成するには、 カタログ統合の構成 をご参照ください。
SnowflakeプラットフォームをフルサポートするIcebergテーブルを作成するには、 Snowflake管理のテーブルを作成する を参照してください。