機能ポリシーを使用して、アプリが作成できるオブジェクトを制限する¶
このトピックでは、機能ポリシーを使用して、 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
注釈
外部アクセス統合は、機能ポリシーを使用してブロックすることはできません。代わりに、コンシューマーはアプリの仕様を使って、アプリのエンドポイントを承認するか拒否するかを選択できます。
ワークフロー¶
機能ポリシーを使用して、アプリが作成できるオブジェクトを制限する一般的なワークフローは次のようになります。
アプリのリストを表示して、アプリがリクエストしている権限を確認します。
制限したいオブジェクトがある場合は、これらのオブジェクトをブロックする機能ポリシーを作成します。
詳細については、 新しい機能ポリシーの作成 をご参照ください。
機能ポリシーをアカウントまたは特定のオブジェクトに適用します。
詳細については、 アカウントレベルでの機能ポリシーの割り当て および アプリへの機能ポリシーの適用 をご参照ください。
機能ポリシーを使用する際の複製に関する考慮事項¶
ポリシーを含むデータベースを指定すると、アカウントレベルでの機能ポリシーの参照が複製されます。たとえば、複製グループまたはフェールオーバーグループでの ALLOWED_DATABASES = policy_db を設定する場合などが該当します。
アカウントがすでにターゲットアカウントに複製されている場合、コンシューマーアカウントの管理者は次を実行する必要があります。
ソースアカウントの複製グループまたはフェールオーバーグループを更新して、機能ポリシーを正常に複製するために必要なデータベースとオブジェクト型を含めます。
次に、更新操作を実行して、ターゲットアカウントを更新します。
注釈
機能ポリシーは、アカウントレベルのポリシー割り当てと同じアカウントにある必要があります。
アカウントに機能ポリシーが設定されていて、ポリシーを含む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);
注釈
機能ポリシーはスキーマ内に作成する必要があります。
コンシューマーは、次の例に示すように、オブジェクトの作成を制限しない機能ポリシーを作成することもできます。
CREATE FEATURE POLICY block_nothing_policy
BLOCKED_OBJECT_TYPES_FOR_CREATION = ();
アカウントレベルでの機能ポリシーの割り当て¶
コンシューマーは、次の例に示すように、 ALTER ACCOUNT コマンドを使用して、アカウントレベルで機能ポリシーを適用できます。
ALTER ACCOUNT
SET FEATURE POLICY feature_policy_db.sch.block_create_db_policy
FOR ALL APPLICATIONS;
このコマンドは、アカウントにインストールされているすべてのアプリに block_create_db_policy ポリシーを適用します。このポリシーを適用すると、アプリはデータベースを作成できなくなります。
アプリへの機能ポリシーの適用¶
アプリを手動で作成するときに機能ポリシーを適用するには、次の例に示すように、 CREATE APPLICATION コマンドの WITH FEATURE POLICY 句を使用します。
CREATE APPLICATION hello_snowflake_app
WITH FEATURE POLICY = feature_policy_db.block_create_db_policy;
アプリに機能ポリシーを適用するには、次の例に示すように、 ALTER APPLICATION コマンドを使用します。
ALTER APPLICATION hello_snowflake_app
SET FEATURE POLICY feature_policy_db.block_create_db_policy;
機能ポリシーの適用解除¶
アカウント レベルで機能ポリシーの適用を解除するには、次の例に示すように、 ALTER ACCOUNT コマンドを使用します。
ALTER ACCOUNT UNSET FEATURE POLICY FOR ALL APPLICATIONS;
特定のアプリの機能ポリシーの適用を解除するには、次の例に示すように、 ALTER APPLICATION コマンドを使用します。
ALTER APPLICATION FEATURE_POLICY_TEST_APP UNSET FEATURE POLICY;
機能ポリシーの削除¶
機能ポリシーを削除するには、次の例に示すように、 DROP FEATURE POLICY コマンドを使用します。
DROP FEATURE POLICY block_create_db_policy;
機能ポリシーに関する情報の表示¶
アクセス権限のあるアカウントの機能ポリシーを表示するには、 SHOW FEATURE POLICIES コマンドを使用します。
SHOW FEATURE POLICIES ON ACCOUNT;
アプリに適用されている機能ポリシーを表示するには、次のコマンドを使用します。
SHOW FEATURE POLICIES ON APPLICATION hello_snowflake_app;
特定の機能ポリシーに関する情報を表示するには、次の例に示すように、 DESCRIBE FEATURE POLICY を使用します。
DESCRIBE FEATURE POLICY feature_policy_db.block_create_db_policy;