機能ポリシーを使用して、アプリが作成できるオブジェクトを制限する

このトピックでは、機能ポリシーを使用して、 Snowflake Native App が作成できるオブジェクトを制限する方法について説明します。

機能ポリシーについて

アプリが :doc:`権限の自動付与<requesting-auto-privs>`を使用するように構成されている場合、アプリは以下の権限の使用をリクエストできます。

  • EXECUTE TASK

  • EXECUTE MANAGED TASK

  • CREATE WAREHOUSE

  • CREATE COMPUTE POOL

  • BIND SERVICE ENDPOINT

  • CREATE DATABASE

  • CREATE EXTERNAL ACCESS INTEGRATION

アプリがこれらの権限を使用するように構成されている場合、コンシューマーは、アプリのインストール後にこれらの権限を直接取り消すはできません。ただし、コンシューマーの管理者は機能ポリシーを使用して、アプリがコンシューマーアカウントに作成できるオブジェクトを制限することができます。

たとえば、コンシューマーがアプリによるウェアハウスやコンピューティングプールの作成を望まない場合、コンシューマーアカウント管理者は、特定のアプリやすべてのアプリがウェアハウスやコンピューティングプールを作成することを禁止する機能ポリシーを作成できます。

機能ポリシーにより、コンシューマーはアプリが以下のオブジェクトを作成または使用することを制限できます。

  • COMPUTE POOLS

  • DATABASES

  • TASKS

  • WAREHOUSES

注釈

外部アクセス統合は、機能ポリシーを使用してブロックすることはできません。代わりに、コンシューマーはアプリの仕様を使って、アプリのエンドポイントを承認するか拒否するかを選択できます。

ワークフロー

機能ポリシーを使用して、アプリが作成できるオブジェクトを制限する一般的なワークフローは次のようになります。

  1. アプリのリストを表示して、アプリがリクエストしている権限を確認します。

  2. 制限したいオブジェクトがある場合は、これらのオブジェクトをブロックする機能ポリシーを作成します。

    詳細については、 新しい機能ポリシーの作成 をご参照ください。

  3. 機能ポリシーをアカウントまたは特定のオブジェクトに適用します。

    詳細については、 アカウントレベルでの機能ポリシーの割り当て および アプリへの機能ポリシーの適用 をご参照ください。

機能ポリシーを使用する際の複製に関する考慮事項

ポリシーを含むデータベースを指定すると、アカウントレベルでの機能ポリシーの参照が複製されます。たとえば、複製グループまたはフェールオーバーグループでの ALLOWED_DATABASES = policy_db を設定する場合などが該当します。

アカウントがすでにターゲットアカウントに複製されている場合、コンシューマーアカウントの管理者は次を実行する必要があります。

  1. ソースアカウントの複製グループまたはフェールオーバーグループを更新して、機能ポリシーを正常に複製するために必要なデータベースとオブジェクト型を含めます。

  2. 次に、更新操作を実行して、ターゲットアカウントを更新します。

注釈

機能ポリシーは、アカウントレベルのポリシー割り当てと同じアカウントにある必要があります。

アカウントに機能ポリシーが設定されていて、ポリシーを含むpolicy_dbを含めるように複製またはフェールオーバーグループを更新しないと、ターゲットアカウントにダングリング参照が作成されます。この場合、ダングリング参照は、ポリシーの完全修飾名がソースアカウントのデータベースをポイントしているため、Snowflakeはターゲットアカウントでポリシーを見つけることができないことを意味します。その結果、ターゲットアカウントまたはターゲットアカウント内のユーザーは、機能ポリシーに準拠する必要はありません。

セキュリティポリシーを正常に複製するには、ダングリング参照を防ぐために必要なオブジェクト型とデータベースが複製またはフェールオーバーグループに含まれていることを確認します。

詳細については、 複製に関する考慮事項 をご参照ください。

機能ポリシーの優先順位

コンシューマーは、アカウント内のすべてのアプリケーションまたは指定したアプリケーションに機能ポリシーを適用できます。複数の機能ポリシーが適用されている場合、最も具体的な機能ポリシーが、より一般的な機能ポリシーより優先されます。優先順位をまとめると次のようになります。

アカウント:

アカウントに適用される機能ポリシーは、最も一般的な機能ポリシーです。特定のオブジェクト、例えばアプリケーションに適用される機能ポリシーによって上書きされます。

オブジェクト:

特定のオブジェクトに適用される機能ポリシーは、アカウントに適用される機能ポリシーより優先されます。

コンシューマーはこの優先順位を使用して、アプリが自分のアカウントに作成できるオブジェクトを微調整できます。たとえば、コンシューマーはアカウントレベルの機能ポリシーを適用して、アカウント内のすべてのアプリがデータベースを作成することを禁止することができます。インストール中にアプリがデータベースを作成しようとすると、インストールに失敗します。

しかし、コンシューマーは、制限のない機能ポリシーを作成し、その機能ポリシーを特定のアプリに適用することもできます。そのアプリはデータベースを作成することができます。

詳細については、 新しい機能ポリシーの作成 をご参照ください。

機能ポリシーを使用するために必要な権限

次の表は、機能ポリシーを作成および使用するために必要な権限について説明しています。

権限

オブジェクト

注意

CREATE FEATURE POLICY

SCHEMA

機能ポリシーを作成するために必要です。この権限は、機能ポリシーを含むスキーマに付与する必要があります。

APPLY FEATURE POLICY

ACCOUNT

APPLY または OWNERSHIP

FEATURE POLICY

機能ポリシーの操作

コンシューマーは、 Snowsight または SQL を使用して、機能ポリシーのライフサイクルを管理できます。

新しい機能ポリシーの作成

コンシューマーは機能ポリシーを作成し、アプリが特定のタイプのオブジェクトを作成することを禁止することができます。次の例は、アプリがデータベースを作成することを禁止する機能ポリシーを作成する方法を示しています。

CREATE DATABASE feature_policy_db;
CREATE SCHEMA sch;
CREATE FEATURE POLICY block_create_db_policy
  BLOCKED_OBJECT_TYPES_FOR_CREATION = (DATABASE);
Copy

注釈

機能ポリシーはスキーマ内に作成する必要があります。

コンシューマーは、次の例に示すように、オブジェクトの作成を制限しない機能ポリシーを作成することもできます。

CREATE FEATURE POLICY block_nothing_policy
  BLOCKED_OBJECT_TYPES_FOR_CREATION = ();
Copy

アカウントレベルでの機能ポリシーの割り当て

コンシューマーは、次の例に示すように、 ALTER ACCOUNT コマンドを使用して、アカウントレベルで機能ポリシーを適用できます。

ALTER ACCOUNT
  SET FEATURE POLICY feature_policy_db.sch.block_create_db_policy
  FOR ALL APPLICATIONS;
Copy

このコマンドは、アカウントにインストールされているすべてのアプリに block_create_db_policy ポリシーを適用します。このポリシーを適用すると、アプリはデータベースを作成できなくなります。

アプリへの機能ポリシーの適用

アプリを手動で作成するときに機能ポリシーを適用するには、次の例に示すように、 CREATE APPLICATION コマンドの WITH FEATURE POLICY 句を使用します。

CREATE APPLICATION hello_snowflake_app
  WITH FEATURE POLICY = feature_policy_db.block_create_db_policy;
Copy

アプリに機能ポリシーを適用するには、次の例に示すように、 ALTER APPLICATION コマンドを使用します。

ALTER APPLICATION hello_snowflake_app
  SET FEATURE POLICY feature_policy_db.block_create_db_policy;
Copy

機能ポリシーの適用解除

アカウント レベルで機能ポリシーの適用を解除するには、次の例に示すように、 ALTER ACCOUNT コマンドを使用します。

ALTER ACCOUNT UNSET FEATURE POLICY FOR ALL APPLICATIONS;
Copy

特定のアプリの機能ポリシーの適用を解除するには、次の例に示すように、 ALTER APPLICATION コマンドを使用します。

ALTER APPLICATION FEATURE_POLICY_TEST_APP UNSET FEATURE POLICY;
Copy

機能ポリシーの削除

機能ポリシーを削除するには、次の例に示すように、 DROP FEATURE POLICY コマンドを使用します。

DROP FEATURE POLICY block_create_db_policy;
Copy

機能ポリシーに関する情報の表示

アクセス権限のあるアカウントの機能ポリシーを表示するには、 SHOW FEATURE POLICIES コマンドを使用します。

SHOW FEATURE POLICIES ON ACCOUNT;
Copy

アプリに適用されている機能ポリシーを表示するには、次のコマンドを使用します。

SHOW FEATURE POLICIES ON APPLICATION hello_snowflake_app;
Copy

特定の機能ポリシーに関する情報を表示するには、次の例に示すように、 DESCRIBE FEATURE POLICY を使用します。

DESCRIBE FEATURE POLICY feature_policy_db.block_create_db_policy;
Copy