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ストレージアカウントへのアクセスを明示的に許可してください。
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 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.
Snowsight で外部ボリュームを構成する¶
Snowsight にサインインします。
左下隅にある自身の名前 » Switch role を選択し、次に ACCOUNTADMIN または CREATE EXTERNAL VOLUME 権限を持つロールを選択します。
詳細については、 プライマリロールの変更 をご参照ください。
ナビゲーションメニューで Catalog » External data を選択します。
External volumes タブを選択します。
+ Create を選択します。
Select Microsoft Azure & OneLake and then select Next.
Prerequisites ページから、 Azure tenant ID に、Azureテナント ID を指定します。
Azureテナント ID を見つけるには、Microsoft Entraドキュメント内の Microsoft Entraテナント ID を見つける方法 をご参照ください。
Next を選択します。
Grant storage access ページから、Snowflakeにストレージの場所へのアクセス権を付与するには、次のステップに従います。
Snowflakeがお使いのAzureストレージまたはMicrosoft OneLake に接続することに同意するには、 Provide consent を選択します。
Microsoftの権限リクエストページが、新しいブラウザのタブに開きます。
Microsoftの権限リクエストページから、 Accept を選択します。このアクションは、Snowflakeアカウント用に作成されたAzureサービスプリンシパルが、テナント内の指定したリソースでアクセストークンを取得できるようにします。アクセストークンの取得が成功するのは、サービスプリンシパルにストレージアカウントレベルで適切な権限を付与した場合のみです(次のステップを参照)。
Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。
Snowflakeで、 Multi-tenant app name フィールドから、アカウント用に作成されたSnowflakeクライアントアプリケーションの名前をテキストエディターにコピーします。次のステップでは、このアプリケーションに許可されたストレージの場所でアクセストークンを取得するための権限を付与します。
許可されたストレージの場所でアクセストークンを取得する権限をアプリケーションに付与するには、次のステップに従います。
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 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):アウトバウンドプライベート接続を使用します。
Next を選択します。
Verify connection & create volume ページでは、SnowflakeはAzureへの接続を確認し、「正常に接続されました」メッセージを表示します。
注釈
Snowflakeが接続を確認できない場合は、権限または外部ボリュームの構成を確認して、 Verify again を選択してください。
Create を選択します。
次のステップ¶
外部ボリュームを構成したら、Icebergテーブルを作成できます。
外部カタログを使用する読み取り専用のIcebergテーブルを作成するには、 カタログ統合の構成 をご参照ください。
SnowflakeプラットフォームをフルサポートするIcebergテーブルを作成するには、 Snowflake管理のテーブルを作成する を参照してください。