
Snowflake Private Listing で AWSアカウント から Azureアカウント へクロスクラウドデータ共有してみた
かわばたです。
Snowflake の Private Listing は、特定の Snowflake アカウントに対してデータを安全に共有できる機能です。同一リージョン内の共有では Secure Data Sharing によりデータコピーなしでほぼ即時に参照できますが、異なるリージョンやクラウド間では Auto-fulfillment により Snowflake 管理の Secure Share Area(SSA)へデータが自動レプリケートされます。
本記事では、AWS 基盤のプロバイダーアカウント から Azure 基盤のコンシューマーアカウント へ、Private Listing を使ってクロスクラウドでデータを共有する手順を検証します。
概要
背景
企業のデータ活用では、以下のようなニーズが増えています。
- 組織間・部署間でデータを安全に共有したい
- 異なるクラウド・リージョンのアカウントへデータを提供したい
- データコピーや個別 ETL を最小限にし、Snowflake ネイティブな仕組みでデータ共有したい
Snowflake データ共有の基本概念
Snowflake のデータ共有(Secure Data Sharing)は、プロバイダー(データ提供者)が作成した Share オブジェクトを通じて、コンシューマー(データ利用者)にデータへのアクセスを許可する仕組みです。
同一リージョン内の共有では、実際のデータはアカウント間でコピー・転送されない のが大きな特徴です。Snowflake のサービスレイヤーとメタデータストアを通じてアクセスが制御されるため、コンシューマー側のストレージは消費せず、コンシューマーが負担するのはクエリ実行時のコンピュートコストのみです。
| 用語 | 説明 |
|---|---|
| プロバイダー | データを提供する側のアカウント。Share を作成し、アクセスを管理する |
| コンシューマー | データを利用する側のアカウント。Share からデータベースを作成してクエリを実行する |
| Share | データベースオブジェクトへのアクセス権限をカプセル化した Snowflake オブジェクト |
リスティングとは
リスティングは、Share にメタデータ(タイトル、説明、利用規約など)を付加したデータプロダクトです。直接 Share を共有するよりも、管理性と可視性に優れています。
| 項目 | Private Listing | Public Listing(Marketplace) |
|---|---|---|
| 対象 | 特定のアカウントを指定 | 全 Snowflake ユーザー |
| 公開範囲 | 指定コンシューマーのみ | Snowflake Marketplace 上で公開 |
| 承認プロセス | 不要 | Snowflake による審査・承認が必要 |
| ユースケース | 組織内共有、パートナー間共有 | データプロダクトの販売・公開 |
リスティングのアクセスタイプは以下の3種類があります。
| タイプ | 内容 |
|---|---|
| 無料(Free) | 支払いなしでデータにアクセス可能 |
| 限定トライアル | 1〜90日間の期間限定アクセス(Marketplace のみ) |
| 有料(Paid) | 対価を設定して提供(使用量ベースまたは固定料金) |
Cross-Cloud Auto-Fulfillment(以下、Auto-fulfillment)
通常の Secure Data Sharing は同一リージョン内でデータのコピーなしに動作しますが、異なるリージョンや異なるクラウド間 で共有する場合は Auto-fulfillment が必要になります。
Auto-fulfillment では、Snowflake が管理する Secure Share Area(SSA) というアカウントにデータが自動的にレプリケートされます。
| 項目 | 内容 |
|---|---|
| 仕組み | プロバイダーのデータを SSA に自動レプリケート |
| リフレッシュ | インターバルベース(最短1分〜最長8日)またはスケジュールベースで設定可能 |
| コスト負担 | SSA へのデータ複製・保存・同期・転送コストはプロバイダーが負担。コンシューマーのクエリ実行コンピュートコストはコンシューマー側で発生 |
| 制約 | データサイズ上限 10TB(超過時はサポート対応)。Auto-fulfillment はトライアルアカウントでは利用不可(クロスクラウドの Private Listing には full account が必要) |
なお、Private Listing を別リージョン / 別クラウドの指定コンシューマーに共有する場合、Snowsight が対象アカウントのリージョンを検出し、Auto-fulfillment を有効化します。Private Listing では、リモートリージョン向けに手動レプリケーションで代替することはできません。
今回の検証では AWS → Azure のクロスクラウド共有のため、Auto-fulfillment を使用します。
検証環境
| 項目 | プロバイダーアカウント | コンシューマーアカウント |
|---|---|---|
| クラウド | AWS | Azure |
| リージョン | AWS_AP_NORTHEAST_1 | AZURE_JAPANEAST |
| エディション | Enterprise エディション | Business Critical エディション |
| ロール | ACCOUNTADMIN | ACCOUNTADMIN |
| データベース | PRIVATE_LISTING_TEST_DB | (リスティング取得時に自動作成) |
Private Listing の基本操作検証
プロバイダー側の事前準備
Private Listing を作成するには、事前に以下の準備が必要です。
利用規約への同意
無料の Private Listing を作成する場合、Snowflake Provider and Consumer Terms の受諾は必須ではありません。代わりに、Snowflake Customer-Controlled Data Sharing Functionality Terms の確認・受諾が必要です。
- Snowsight にサインイン
- Admin > Terms を選択
- Snowflake Customer-Controlled Data Sharing Functionality Terms を確認・受諾

補足:
Snowflake 上で課金する Paid Listing や Snowflake Marketplace への公開では、Snowflake Provider and Consumer Terms への同意や Provider Profile の作成が必要です。一方、無料 Private Listing やオフプラットフォームで契約・課金する Private Listing では、Provider and Consumer Terms ではなく、Snowflake Customer-Controlled Data Sharing Functionality Terms の確認・同意が必要です。
グローバルデータ共有の有効化確認
クロスクラウド / クロスリージョンの Private Listing で Auto-fulfillment を利用する場合、プロバイダーアカウントでグローバルデータ共有の有効化がされている必要があります。
必要に応じて、ORGADMIN ロールで以下を実行します。
USE ROLE ORGADMIN;
SELECT SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT('<account_name>');
また、ACCOUNTADMIN またはカスタムロールで Auto-fulfillment を管理するための権限委任が必要になる場合があります。
共有データの準備(プロバイダー側)
リスティングで共有するデータベース、テーブル、セキュアビューを作成します。
-- プロバイダーアカウントで実行
USE ROLE ACCOUNTADMIN;
-- テスト用データベース作成
CREATE OR REPLACE DATABASE PRIVATE_LISTING_TEST_DB;
-- テスト用テーブル作成
CREATE OR REPLACE TABLE PRIVATE_LISTING_TEST_DB.PUBLIC.SAMPLE_SALES (
SALE_ID INT,
PRODUCT_NAME VARCHAR(100),
SALE_DATE DATE,
AMOUNT DECIMAL(10, 2),
REGION VARCHAR(50)
);
-- テストデータ挿入
INSERT INTO PRIVATE_LISTING_TEST_DB.PUBLIC.SAMPLE_SALES VALUES
(1, 'Product A', '2026-04-01', 15000.00, 'Tokyo'),
(2, 'Product B', '2026-04-02', 23000.00, 'Osaka'),
(3, 'Product C', '2026-04-03', 8000.00, 'Nagoya'),
(4, 'Product D', '2026-04-04', 42000.00, 'Tokyo'),
(5, 'Product E', '2026-04-05', 11000.00, 'Fukuoka');
-- セキュアビューの作成
CREATE OR REPLACE SECURE VIEW PRIVATE_LISTING_TEST_DB.PUBLIC.V_SAMPLE_SALES AS
SELECT * FROM PRIVATE_LISTING_TEST_DB.PUBLIC.SAMPLE_SALES;
-- データ確認
SELECT * FROM PRIVATE_LISTING_TEST_DB.PUBLIC.V_SAMPLE_SALES;

セキュアビューを使う理由:
Snowflake の公式ドキュメントでは、共有オブジェクトにはセキュアビューの使用が推奨されています。通常のビューではビュー定義(SQL)がコンシューマーに見える可能性がありますが、セキュアビューではビュー定義が隠蔽され、データアクセスをより安全に制御できます。なお、Auto-fulfillment ではアカウントロールは複製されません。そのため、INVOKER_ROLE などアカウントロールに依存するポリシーやセキュアビューは、SSA 上で想定と異なる評価結果になる可能性があります。クロスクラウド共有を前提にする場合は、データベースロールを中心に権限設計することを推奨します。
Private Listing の作成と公開(プロバイダー側)
Snowsight の Provider Studio から Private Listing を作成します。
- Snowsight にサインインし、Marketplace > Provider Studio を選択
- Listings タブで 「+ Create Listing」 をクリック
- 「Specified Consumers」 を選択(Private Listing)

- リスティング名を入力(例:
Private Sales Data Listing)

- 「Add data product」 をクリックし、「+ Select」 で共有するオブジェクトを選択
- データベース:
PRIVATE_LISTING_TEST_DB - セキュアビュー:
V_SAMPLE_SALESを選択
- データベース:


- Access type で 「Free」 を選択

- 「Who can access」 セクションにコンシューマーのアカウント識別子を追加
<org_name>.<account_name>形式で入力

- リスティングの 説明(Description) を入力

- Legal Terms を選択。
- Standard Agreement for Marketplace Products:Snowflake が提供する標準規約
- Custom:プロバイダー独自の利用規約URL を指定(公開アクセス可能なURL が必要、PDF等も可)
- Listing terms will be provided offline:Private Listing 限定。URL を用意せず、オフラインでコンシューマーに利用規約を提供する場合に選択
今回はListing terms will be provided offlineを選択しました。

- 「Publish」 をクリックして公開

注意:
クロスクラウドの場合、Auto-fulfillment によるリモートリージョンの SSA へのデータ複製は、コンシューマーが Listing を Get した後に実行されます。そのため、Publish 直後にコンシューマー側で即時参照できるとは限りません。
補足: コンシューマーアカウント識別子の確認方法
コンシューマーのアカウント識別子は<org_name>.<account_name>形式です。コンシューマー側で以下のコマンドを実行して確認できます。SELECT CURRENT_ORGANIZATION_NAME() || '.' || CURRENT_ACCOUNT_NAME();
コンシューマー側の事前準備
コンシューマー側では、利用する Listing の種類や契約条件に応じて、ORGADMIN による利用規約の受諾が必要になる場合があります。無料の Listing のみを利用する場合は Snowflake Provider and Consumer Terms の受諾は不要ですが、Paid Listing を利用する場合は受諾が必要です。
- Snowsight にサインイン(コンシューマーアカウント)
- 必要に応じて Admin > Terms から利用規約を確認・受諾
- リスティングを取得するロールに
CREATE DATABASEおよびIMPORT SHARE権限があることを確認(ACCOUNTADMIN であれば問題ありません)
Private Listing の取得(コンシューマー側)
プロバイダーが公開した Private Listing をコンシューマー側で取得します。
- Snowsight にサインイン(コンシューマーアカウント)
- ナビゲーションメニューから Data sharing > External sharing を選択
- 「Shared With You」 の 「Privately shared listings」 セクションで、プロバイダーから共有されたリスティングを確認

- リスティングを選択し、「Get」 をクリック

- データベース名を指定(任意。デフォルト名を変更可能)


注意: クロスクラウドの場合、Auto-fulfillment によるデータのレプリケーションが完了するまで、データベースの内容が参照できるようになるまで時間がかかる場合があります。
コンシューマー側でのデータ確認
取得したデータベースからデータを参照できるか確認します。
以降のサンプル SQL では、取得時のデータベース名を PRIVATE_LISTING_TEST_DB として説明します。取得時に別名を指定した場合は、適宜読み替えてください。
-- コンシューマーアカウントで実行
USE ROLE ACCOUNTADMIN;
-- 取得したデータベースのセキュアビューを参照
SELECT * FROM PRIVATE_LISTING_TEST_DB.PUBLIC.V_SAMPLE_SALES;
-- 件数確認
SELECT COUNT(*) AS ROW_COUNT FROM PRIVATE_LISTING_TEST_DB.PUBLIC.V_SAMPLE_SALES;

コンシューマー側の読み取り専用確認
共有されたデータは読み取り専用です。書き込みを試みてエラーになることを確認します。
-- コンシューマーアカウントで実行
-- 共有データベースへのオブジェクト作成を試みる → エラーになるはず
CREATE TABLE PRIVATE_LISTING_TEST_DB.PUBLIC.WRITE_TEST (
ID INT
);
-- セキュアビューへの書き込みを試みる → エラーになるはず
INSERT INTO PRIVATE_LISTING_TEST_DB.PUBLIC.V_SAMPLE_SALES VALUES
(99, 'Test Product', '2026-04-20', 100.00, 'Test');

リスティングの管理・監視
プロバイダー側でリスティングの利用状況や Auto-fulfillment の同期状況を確認します。
リスティングの利用状況
- Snowsight で Marketplace > Provider Studio > Listings を選択
- 対象のリスティングを選択
- Analytics タブでコンシューマーの利用状況を確認

コストに関する補足
同一リージョン内の共有
同一リージョン内で Private Listing を使う場合、データのコピー・転送は発生しない ため、プロバイダー側に追加コストは基本的に発生しません。コンシューマーが負担するのはクエリ実行時のコンピュートコストのみです。
クロスクラウド / クロスリージョンの共有(Auto-fulfillment)
異なるリージョンやクラウド間で共有する場合、Auto-fulfillment によりプロバイダー負担で以下のコストが発生します。
| コスト区分 | 内容 |
|---|---|
| コンピュート | データコピー・状態管理のためのクエリ実行コスト |
| ストレージ | Secure Share Area(SSA)上のデータ保存コスト |
| データ転送(エグレス) | リージョン間・クラウド間のデータ転送料金 |
コスト管理のポイント:
- リフレッシュ頻度を業務要件に合わせて最適化する(頻度が高いほどコスト増)
- 共有対象のオブジェクトを必要最小限に絞る
- 不要になったリスティングは削除する
考慮事項・注意点
| 項目 | 内容 |
|---|---|
| 読み取り専用 | コンシューマー側の共有データは読み取り専用。書き込み・変更はできない |
| セキュアビュー推奨 | 共有オブジェクトにはセキュアビューの使用が推奨される。ビュー定義の隠蔽やアクセス制御に有効 |
| 識別子命名規則 | 大文字・英数字の非引用識別子を使用するとコンシューマーが使いやすい |
| 1シェア1リスティング | 1つの Share は1つのリスティングにのみアタッチ可能。複数リスティングを提供する場合は別々の Share を作成する |
| Auto-fulfillment コスト | クロスクラウド / クロスリージョン共有はプロバイダー負担のコスト(コンピュート、ストレージ、転送)が発生する |
| データ更新の反映 | 同一リージョン: リアルタイム反映 / クロスリージョン: Auto-fulfillment のリフレッシュ間隔に依存 |
| トライアルアカウント | 指定コンシューマーへのプライベート共有自体は可能だが、Auto-fulfillment は利用不可。Marketplace での提供も不可。クロスクラウドの Private Listing には full account が必要 |
| データサイズ上限 | Auto-fulfillment は 10TB が上限(超過時は Snowflake サポートに連絡) |
まとめ
Private Listing は、特定のアカウントに対して安全にデータを共有する手段として非常に実用的です。同一リージョン内であればデータコピーなしでリアルタイムに共有でき、異なるクラウド間でも Auto-fulfillment により自動的にデータが同期されます。
ただし、クロスクラウド共有の場合は Auto-fulfillment のコスト(コンピュート・ストレージ・データ転送)がプロバイダー負担で発生するため、共有対象やリフレッシュ頻度を業務要件に合わせて設計することが重要です。
参考
- About listings
- Introduction to Secure Data Sharing
- Becoming a provider
- Creating and publishing a listing
- Preparing to create a listing
- Becoming a consumer
- Getting a listing as a consumer
- About Cross-Cloud Auto-fulfillment
- Understanding auto-fulfillment costs
この記事が何かの参考になれば幸いです!








