アプリ仕様でデータ共有をリクエストする

このトピックでは、Snowflake Native App の仕様を構成して、リストを介してプロバイダーまたはサードパーティとのデータ共有許可をリクエストする方法について説明します。これにより、コンプライアンスレポート、テレメトリー共有、データ前処理などのユースケースが可能になります。

アプリからのプロバイダーまたはサードパーティとのデータ共有

一部 Snowflake Native Apps には、さまざまなビジネス目的で、プロバイダー、またはサードパーティのSnowflakeアカウントとデータを共有する必要があります。主なユースケースには、次が含まれます。

  • コンプライアンスレポート: 監査ログまたはコンプライアンスデータの規制アカウントと共有

  • テレメトリーと分析: 製品改善のために使用状況メトリックをプロバイダーに送り返す

  • データの前処理: 変換済みデータのパートナーアカウントとの共有

  • サポートとトラブルシューティング: サポートチームへの診断データの提供

アプリからのデータ共有を有効にするには、アプリが共有とリストの両方を提供する必要があります。共有には共有されるデータベースオブジェクトが含まれ、リストはアカウントとリージョン間でデータを共有するメカニズムを提供します。

データ共有の詳細については、Secure Data Sharingについて をご参照ください。

リストを使用してデータを共有するようにアプリを構成するには、以下の手順に従います。

  1. 権限の自動付与 を使用してコンシューマーに共有やリストを作成する権限をリクエストします。

  2. 共有を作成し、データベースオブジェクトを付与します。

  3. 共有に添付された外部リストを作成します。

  4. 特定のターゲットアカウントとデータを共有する許可をコンシューマーにリクエストするには、アプリケーション仕様 を使用します。

注釈

他のアプリ仕様タイプとは異なり、各 LISTING 仕様は、正確に1つのリストオブジェクトに関連付けられます。アプリは、同じリストに対して複数のアプリ仕様を作成できません。

データ共有のためのアプリ仕様ワークフロー

リストを使用してデータを共有するようにアプリを構成するには、次の一般的なワークフローに従います。

  1. プロバイダーは、アプリの :doc:` 権限の自動付与 <requesting-auto-privs>` 構成します。これにより、コンシューマーはアプリに共有やリストを作成する権限を与えることができます。

    注釈

    アプリの仕様ではマニフェストファイルに manifest_version = 2 を設定する必要があります。

  2. プロバイダーは CREATESHARE および CREATELISTING 権限 マニフェストファイルに追加します。

  3. プロバイダーが追加 必要に応じて、次のオブジェクトを作成するためにセットアップスクリプトに SQL のステートメントを実行します。

    セットアップスクリプトは、アプリがインストールまたはアップグレードされたときに共有とリストを作成します。アプリの仕様は、セットアップ中に作成することも、実行時にストアドプロシージャを通じて作成することもできます。

  4. アプリを構成する場合、コンシューマーはリストのターゲットアカウントと自動フルフィルメントの設定を確認して承認します。自動フルフィルメントの設定は、クロスリージョンの共有にのみ適用されます。コンシューマーがアプリ仕様を表示し、承認する方法については、 アプリの仕様を使用した外部リソースへの接続の承認 をご参照ください。

データ共有のためのアプリ仕様定義

タイプ LISTING のアプリ仕様の場合、アプリ仕様定義には以下のエントリが含まれます。

  • TARGET_ACCOUNTS:データ共有するターゲットアカウントのコンマ区切りリスト(一重引用符で囲む)。各アカウントは OrgName.AccountName の形式で指定する必要があります。例: 'ProviderOrg.ProviderAccount,PartnerOrg.PartnerAccount'

  • LISTING:アプリによって作成されたリストオブジェクトの識別子。

  • AUTO_FULFILLMENT_REFRESH_SCHEDULE:オプション。クロスリージョンデータ共有のリフレッシュスケジュール。<num>MINUTE または USINGCRON<expression> として指定可能です。

注釈

アプリ仕様のリスト名は、アプリによって作成された既存のリストと一致する必要があります。これが設定されると、リスト名を変更できません。

マニフェストファイルのバージョンを指定します。

アプリに対する権限の自動付与を有効にするには、次の例に示すように、マニフェストファイルの先頭でバージョンを設定します。

manifest_version: 2
Copy

CREATESHARE および CREATELISTING 権限をマニフェストファイルに追加します。

その CREATESHARE および CREATELISTING 権限により、インストール中またはアップグレード時にアプリは共有やリストを作成できます。

  1. これらの権限をリクエストするようにアプリを構成するには、マニフェストファイルの privileges セクションに次のコードを追加します。

    manifest_version: 2
    ...
    privileges:
      - CREATE SHARE:
          description: "Create a share for sharing compliance data with provider"
      - CREATE LISTING:
          description: "Create a listing for cross-region sharing of compliance data"
    ...
    
    Copy

マニフェストファイルでmanifest_versionを2に指定すると、Snowflakeはインストールまたはアップグレード中のアプリに CREATESHARE および CREATELISTING 権限を自動的に付与します。

共有の作成とオブジェクトの付与

  1. データ共有用の共有を作成するには、次の例に示すように、セットアップスクリプトに CREATE SHARE コマンドを追加します。

CREATE SHARE compliance_share;
Copy
  1. 次の例に示すように、共有するデータベースオブジェクトを付与します。

-- Grant usage on a table in the app's database:
GRANT USAGE ON TABLE app_schema.compliance_data TO SHARE compliance_share;

-- If sharing from a database created by the app, do the following:
GRANT USAGE ON DATABASE app_created_db TO SHARE compliance_share;
GRANT USAGE ON SCHEMA app_created_db.reporting TO SHARE compliance_share;
GRANT SELECT ON TABLE app_created_db.reporting.metrics TO SHARE compliance_share;
Copy

注釈

アプリは以下のソースからのみデータを共有できます。

  • アプリによって作成されたデータベース。アプリはこれらのデータベースの所有者である必要があります。

アプリはターゲットアカウントを共有に直接追加することはできません。これはアプリの仕様を通じて制御されます。

外部リストを作成する

  1. 共有に添付された外部リストを作成するには、次の例に示すように CREATE LISTING コマンドをセットアップスクリプトに追加します。

    CREATE EXTERNAL LISTING compliance_listing
    SHARE compliance_share
      AS
      $$
        title: "Compliance Data Share"
        subtitle: "Regulatory compliance reporting data"
        description: "Share compliance and audit data with authorized accounts"
          listing_terms:
          type: "OFFLINE"
      $$
      PUBLISH = FALSE
      REVIEW = FALSE;
    
    Copy

注釈

  • アプリは、アプリケーションパッケージではなく、共有のみをリストに添付できます。

  • アプリは、ターゲットアカウントや自動フルフィルメント構成をリストに直接追加することはできません。

  • リストマニフェストには、title、subtitle、description、listing_termsのプロパティのみを含めることができます。

  • すべての新しいリストは、PUBLISH および REVIEW の両方を FALSE に設定して、未公開の状態で作成する必要があります。

  • リストのタイトルと説明は、コンシューマー情報に基づいてカスタマイズできるため、プロバイダーはデータソースを区別できます。

リストのアプリ仕様の作成

  1. リストのアプリ仕様を作成するには、この例に従います。

ALTER APPLICATION SET SPECIFICATION shareback_spec
  TYPE = LISTING
  LABEL = 'Compliance Data Sharing'
  DESCRIPTION = 'Share compliance data with provider for regulatory reporting'
  TARGET_ACCOUNTS = 'ProviderOrg.ProviderAccount,AuditorOrg.AuditorAccount'
  LISTING = compliance_listing
  AUTO_FULFILLMENT_REFRESH_SCHEDULE = '720 MINUTE';
Copy

このコマンドは、指定されたターゲットアカウントとデータを共有する許可をリクエストする shareback_spec という名前のアプリ仕様を作成します。

  1. クロスリージョンの共有の場合 AUTO_FULFILLMENT_REFRESH_SCHEDULE パラメーターは必須です。次のいずれかの値に設定できます。

    • '<num> MINUTE':分数(最低10分)

    • 最大8日間または11520分(8日間)

    • 'USING CRON <expression> <time_zone>':タイムゾーン付きCRON式

注釈

  • アプリは、リストと共有オブジェクトが存在した後にのみアプリ仕様を作成する必要があります。

  • 各リストには、関連するアプリ仕様を1つだけ指定できます。

  • ターゲットアカウントを更新すると、コンシューマーの承認を得るために新しい保留中のリクエストが作成されます。

リスト構成の検証

アプリは、以下のコマンドを実行することで、承認後にリストが適切に構成されたことを検証できます。

-- Check if the app specification is approved:
SHOW APPROVED SPECIFICATIONS IN APPLICATION;

-- Validate the listing configuration:
DESC LISTING compliance_listing;
Copy

コンシューマー承認ワークフロー

LISTING アプリ仕様のコンシューマー承認がこのワークフローをトリガーします。

  • Snowflakeは、ターゲットアカウントを自動的にリストに追加します。

  • 指定された場合、Snowflakeは自動フルフィルメントの更新スケジュールを構成します。

  • リストはターゲットアカウントに表示されます。

  • リストに添付されたデータは、承認されたアカウントからクエリできます。

LISTING アプリ仕様のコンシューマーによる拒否がこのワークフローをトリガーします。

  • リストは非公開になり、既存のターゲットアカウントはリストから削除されます。

  • 自動フルフィルメントが無効になっています。

  • リストは、ターゲットアカウントには表示されなくなります。

LISTING アプリ仕様を使用するためのベストプラクティス

アプリの仕様を介してデータ共有を実装する場合は、次のベストプラクティスを考慮します。

  • 共有の整合性: Snowflakeは、アプリケーションによって作成された共有をコンシューマーが変更することを防ぐことはできません。その結果、プロバイダーは、基礎となる共有データの整合性を保護するための対策を実施する責任があります。

  • エラー処理: アプリ仕様が却下された場合や、まだ承認されていない場合に、適切なエラー処理を実装します。

  • クロスリージョンの考慮事項: アプリのプロバイダーは、データの鮮度要件とコスト考慮のバランスをとるリフレッシュスケジュールを設定する責任があります。リストの自動フルフィルメントのコストはアプリのコンシューマーに請求されますが、アプリのコンシューマーの不要なコストを最小限に抑えるために、プロバイダーはコストを認識してスケジュールを選択する必要があります。

  • コンプライアンス: アプリ仕様の説明に、共有するデータと共有する理由を明確に文書化します。

LISTING アプリ仕様でのコールバック関数の使用

アプリは、マニフェストファイルに以下のコードを追加することで、ライフサイクルコールバックを使用して、コンシューマーがリスト仕様を承認または却下した場合に応答することができます。

lifecycle_callbacks:
  specification_action: callbacks.on_spec_update
Copy

セットアップスクリプトで、次のコールバックストアドプロシージャを追加します。

CREATE OR REPLACE PROCEDURE callbacks.on_spec_update (
  name STRING,
  status STRING,
  payload STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
  IF (name = 'shareback_spec' AND status = 'APPROVED') THEN
    -- Start populating shared tables
    CALL populate_compliance_data();
  ELSEIF (name = 'shareback_spec' AND status = 'DECLINED') THEN
    -- Clean up or notify provider
    CALL cleanup_share_data();
  END IF;
  RETURN 'Processed specification update';
END;
$$;
Copy

プロシージャにより、アプリはアプリのデータ共有リクエストに関するコンシューマーの決定に適切に対応することができます。

制限事項

このセクションでは、アプリ仕様を使用する際の制限について説明します。

監査

Snowflakeは、アプリがプロバイダーと共有するデータに対する組み込みの監査を提供していません。コンシューマーに監査追跡を含むコンプライアンスまたは規制要件がある場合は、プロバイダーと直接調整して、独自の個別のモニターソリューションを実装する必要があります。

アプリケーション内からの共有

リストの自動フルフィルメントはこの方法で共有されるデータでは現在サポートされていないため、Snowflakeはアプリケーション内から直接プロバイダーとのデータ共有を推奨しません。