アプリの所有者権限と呼び出し元権限の使用

このトピックでは、所有者の権限と制限された呼び出し元の権限を使用するようにアプリを構成する方法について説明します。

アプリのオーナー権・呼び出し元制限権について

Snowflake Native App 内では、実行可能ファイルは所有者の権限または制限された呼び出し側の権限で実行されます。 Snowflake Native App Framework では、以下のタイプの実行可能ファイルがサポートされています:

  • アプリが所有するストアドプロシージャ

  • コンテナー搭載アプリで利用可能なサービス

所有者の権限:

所有者権限を使用する実行ファイルは、その実行ファイルの所有者に与えられた権限で実行されます。デフォルトでは、アプリ内の実行可能ファイルには所有者の権限が使用されます。アプリでは、実行ファイルのオーナーはアプリ自身です。

例えば、 CREATE PROCEDURE コマンドは、デフォルトで所有者の権限を使用するストアドプロシージャを作成します。コンシューマーは、アプリケーションロールを使用してアクセスが許可されている場合、ストアドプロシージャを呼び出すことができます。アプリにタスクを実行する権限があれば、ストアドプロシージャはそのオペレーションを実行できます。

所有者権限に関する情報については、 呼び出し元権限と所有者権限のストアドプロシージャについて をご参照ください。

呼び出し元の権限:

呼び出し元権限を使用する実行可能ファイルは、呼び出し元に与えられた権限で実行されます。しかし、セキュリティ上の理由から、 Snowflake Native App Framework は呼び出し元権限を持つ実行ファイルをサポートしていません。

制限された呼び出し元権限:

制限付き呼び出し元権限は、呼び出し元権限で実行ファイルを実行することを許可しますが、 実行ファイルがどの呼び出し元権限で実行されるかを制限します。呼び出し元権限が制限されている場合、コンシューマーアカウントの管理者が GRANT CALLER コマンドを使用して明示的に許可しない限り、アプリが所有する実行ファイルを特定の権限で実行することはできません。

簡潔に説明するために、制限された呼び出し元権限で実行される実行可能ファイルは、 RCR 実行可能ファイルとしても知られています。

制限された呼び出し元権限に関する一般的な情報については、 制限された呼び出し元権限 をご参照ください。

アプリのアクセス要件の決定

Snowflake Native App Framework は、プロバイダーはアプリが管理するデータや実行ファイルへのアクセス構成に柔軟性を持たせることができます。以下のテーブルは、アプリのアクセス要件に応じてどのメカニズムを使用するかのガイドラインです。

アクセス必須

アクセス方法

アプリが所有するデータまたは関数

デフォルトで所有者権限を使用します。プロバイダーは、アプリが所有するオブジェクトを作成したりアクセスしたりするために、コンシューマーにアクセスをリクエストする必要はありません。

コンシューマー・アカウントの特定のテーブル、表示、または関数

コンシューマーからのリファレンスのリクエスト

他のユーザーまたはロールが所有するテーブル、ビュー、関数、行ポリシー。

コンシューマーがこれらのオブジェクトにアクセスできるようにする、制限付き呼び出し元権限を使用します。

コンシューマーが所有するデータベースへの幅広いアクセス

データベースロール付与の使用

コンシューマーデータとプロバイダーデータの組み合わせにアクセスするクエリ

リファレンスと所有者権限の併用

アカウントレベルのオブジェクト

特定のオブジェクトに権限を付与するための GRANT コマンドを含むカスタムスクリプトをプロバイダーとして提供します。

マニフェストに restricted_callers_rights プロパティを追加します。

プロバイダーとして、 RCR 実行ファイルをアプリに含める場合、Snowflake では次の例のようにマニフェストファイルに restricted_callers_rights を追加することを推奨しています:

restricted_callers_rights:
  enabled: true
  description: This app includes stored procedure that uses restricted caller's rights.
Copy

restricted_callers_rights は必須ではありませんが、これが存在し、 enabledtrue, Snowsight にセットされている場合、アプリのリストに Restricted caller's rights というセクションが含まれます。

制限された呼び出し元権限を使用するプロシージャまたはサービスの構成

制限された呼び出し元権限を使用するストアドプロシージャを作成するには、次の例に示すように EXECUTE AS RESTRICTED CALLER 句を使用します:

CREATE OR REPLACE PROCEDURE CORE.HELLO()
RETURNS STRING
LANGUAGE SQL
EXECUTE AS RESTRICTED CALLER
AS
BEGIN
  RETURN 'Hello Snowflake!';
END;
Copy

詳細については、 CREATE PROCEDURE をご参照ください。

アプリでの呼び出し元権限制限サービスの利用

制限された呼び出し元権限を使用するサービスの構成に関する詳細情報については、 呼び出し元権限を使用したコンテナー内部からのSnowflakeへの接続 をご参照ください。

アプリでは、 Snowpark Container Services サービスは、アプリの権限(所有者の権限)またはサービスの呼び出し元の権限(制限された呼び出し元の権限)で実行できます。ただし、サービスオーナーロールはサービスユーザーロールではなくアプリです。呼び出し元グラントを付与する場合、コンシューマーは、次の例に示すように、 TO APPLICATION 句を使用してアプリを指定します。

GRANT CALLER USAGE ON DATABASE consumer_db TO APPLICATION hello_snowflake_app;
Copy

この例では、 consumer_db データベースへのアクセスに呼び出し側のロールを使用するために、呼び出し側の権限を制限してサービスを実行することができます。

アプリ内の制限された呼び出し元権限の制限

アプリ内で制限された呼び出し元権限を使用する場合、以下の制限が適用されます。

制限された呼び出し元の権限に関する一般的な制限

実行可能ファイルに対する制限付き呼び出し元権限の一般的な制限については、 呼び出し元権限が制限された実行ファイルの制限事項 をご参照ください。そこにリストされている制限は、アプリにも適用されます。

アプリの追加制限

制限された呼び出し元の権限に関する一般的な制限に加えて、アプリには以下の制限があります。

  • アプリ内の実行ファイルでは、 制限のない の呼び出し元権限はサポートされていません。

  • 以下のコマンドを実行できません。

    • SHOW ROLES

    • SHOW USERS

    • SHOW [CALLER] GRANTS

    • SHOW AVAILABLE LISTINGS

  • 以下の関数を実行できません:.

    • ALL_USER_NAMES

    • GET_USERS_FOR_COLLABORATION

    • CURRENT_IP_ADDRESS

    • CURRENT_AVAILABLE_ROLES

    • CURRENT_SECONDARY_ROLES

    • SYSTEM$ALLOWLIST (または、非推奨の SYSTEM$WHITELIST)

  • 永続リファレンス関数はサポートされていません。

  • ステージ上のオブジェクトへの相対パスはサポートされていません。

  • RCR 実行ファイルはアプリの内部オブジェクトにアクセスできません。

  • 所有者権限を持つ実行ファイルは、無制限の呼び出し元権限を使用する他の実行ファイルを呼び出すことはできません。

    アプリケーションが所有権を持つ実行可能ファイルは、 RCR 実行可能ファイルを呼び出すことができますが、 RCR 実行可能ファイルもアプリケーションが所有する必要があります。例えば、所有者権限を持つアプリのストアドプロシージャは、制限された呼び出し元権限を持つコンシューマーのストアドプロシージャを呼び出すことはできません。

アプリ内の制限された呼び出し元権限プロシージャからの請求関数の呼び出し

SYSTEM$CREATE_BILLING_EVENTSYSTEM$CREATE_BILLING_EVENTS のような請求関数を RCR 実行ファイルから呼び出すことはできません。アプリ内の実行可能ファイル(RCR)からこれらの関数を呼び出すには、所有者の権限プロシージャにこれらの関数を含め、制限された呼び出し元の権限プロシージャからプロシージャを呼び出します。

知的財産権の保護と呼び出し元の権限制限

所有者権限のストアドプロシージャを含むアプリは、アプリの内部実装に関する情報を冗長化します。詳細については、 プロバイダーの知的財産を保護する をご参照ください。

呼び出し元の権限が制限されたストアドプロシージャでは、アプリの内部情報も再編集されます。特に以下のコマンド、表示、関数では、情報の多くが編集されています。

しかし、所有者権限を持つストアドプロシージャとは異なり、制限された呼び出し元権限を使用するプロシージャは、クエリ履歴とクエリプロファイルからの情報を再編集しません。

制限された呼び出し元権限を使用するアプリの開発

一般に、 MANAGE CALLER GRANTS 権限を付与されたロールのみが、実行ファイルに呼び出し元権限を付与することができます。しかし、 Snowflake Native App の開発ライフサイクルの間、プロバイダーはアプリを頻繁に作成したり削除したりする必要があるかもしれません。 Snowflake Native App Framework は、 開発モードのアプリ の呼び出し元グラントを作成するためのメカニズムを提供します。

プロバイダーは、 MANAGE CALLER GRANTS を使用せずにロールを使用して、アプリに発信者権限を付与することができます。ただし、そのためには以下のすべてが必要です:

  • アプリは 開発モード で作成する必要があります。

  • 現在のロールは、ロール階層内のアプリ所有者ロールを持っています。

  • アプリ所有者ロールは、付与される呼び出し元グラントのスーパーセットを持っています。

    注釈

    ALL CALLER PRIVILEGES 権限は、どのような発信者権限セットの上位セットです。

スーパーセットの要件は、 INHERITED CALLER を通して、通常、特定のコンテナーの下にある特定のタイプの現在および将来のすべてのオブジェクトを対象とする補助金では満たすことができません。詳細については、 GRANT CALLER をご参照ください。

この要件を満たすには、付与される呼び出し元グラントは、アプリ所有者ロールに付与される呼び出し元グラントによって明示的にカバーされなければなりません。

アプリ開発者が開発モードのアプリに呼び出し元権限を付与できるようにします。

アプリ所有者ロールが開発モードのアプリに特定の呼び出し元グラントのセットを許可するには、 ACCOUNTADMIN ロールまたは MANAGE CALLER GRANTS 権限を付与されたロールを持つユーザーが、まずアプリ所有者ロールにグラントのセットをカバーする呼び出し元グラントを許可する必要があります。

次の例は、アカウント内のデータベースに対して必要な呼び出し権限をグラントする方法を示しています:

GRANT ALL INHERITED CALLER PRIVILEGES
  ON ALL DATABASES IN ACCOUNT
  TO ROLE app_dev_role;
Copy

このコマンドはすべてのデータベース上のすべての呼び出し元グラントを app_dev_role ロールにグラントします。

注釈

このコマンドは発呼側グラントのみを付与します。アプリ開発者がまだアクセスを許可されていないオブジェクトにアクセスすることはできません。

開発モードのアプリに対する追加のセキュリティ対策

MANAGE CALLER GRANTS 権限なしでアプリ開発者にオーナーロールを許可することは、アプリ開発プロセスを合理化しますが、潜在的なセキュリティリスクももたらします。このようなリスクを最小限に抑えるため、Snowflakeはアプリの所有者がアプリに必要な発信者Grantを継続して持っているかどうかを確認します。アプリのオーナーが必要な発信者グラントを失うと、アプリもそれを失います。