Snowflake アカウントの運用時において、ACCOUNTADMIN は必要な場合以外は利用しないことが推奨されます。SYSADMIN 直下ではなく ACCOUNTADMIN 直下に位置付けた Custom Role を作成することで、ACCOUNTADMIN が持つ権限を委譲する例を記載します。
関連資料:
監査ログ SNOWFLAKE database の参照権限の委譲
// accountadmin である必要はありません。
USE ROLE securityadmin;
// ロールの作成。
CREATE ROLE myrole;
// 参照権限の付与。
GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE myrole;
// useradmin が grant できるように、OWNERSHIP を移管しています。
GRANT OWNERSHIP ON ROLE myrole TO ROLE useradmin;
// accountadmin の直下に配置することで、myrole が OWNERSHIP を持つオブジェクトが発生しても accountadmin で管理できるようにしておきます。
GRANT ROLE myrole TO ROLE accountadmin;
参考資料:
以下のような情報を確認できるようになります。
- ユーザ一覧。
- ユーザへのロールの付与状況。
- ロールへの privilege の付与状況。
- Stage オブジェクト一覧。
- Data Unload 履歴。
- Replication 履歴。
- ログイン履歴。
- SQL 実行履歴。
SYSADMIN を grant する権限を USERADMIN に委譲
セキュリティ統制上の観点からは accountadmin と securityadmin の扱いには注意する必要があります。その観点からは、useradmin が sysadmin を管理することについて問題にはなりません。以下のように sysadmin2 のような custom role を作成することで、sysadmin の管理を useradmin に委譲できます。
// accountadmin である必要はありません。
USE ROLE securityadmin;
// 空のロールを作成します。
CREATE ROLE myrole;
// sysadmin の usage 権限を付与します。
grant role sysadmin to role myrole;
// useradmin が grant できるように、OWNERSHIP を移管しています。
grant ownership on role myrole to role useradmin;
// accountadmin の直下に配置することで、myrole が OWNERSHIP を持つオブジェクトが発生しても accountadmin で管理できるようにしておきます。
grant role myrole to role accountadmin;
Account Level パラメータの確認
Public ロールであっても、Account Level で設定されたパラメータ値を確認できます。Custom Role を作成して権限を委譲する必要はありません。
USE ROLE public;
SHOW PARAMETERS IN ACCOUNT;
Network Policy の設定値を ACCOUNTADMIN を用いずに確認する方法
Account パラメータとして設定された Network Policy の値は、任意の role で確認できます。
USE ROLE public;
SHOW PARAMETERS LIKE 'network_policy' IN ACCOUNT;
ただし、Network Policy の OWNERSHIP を持つ場合にのみ、ALLOWED_IP_LIST
の値を describe して確認することが可能です。そこで、「監査ログ SNOWFLAKE database の参照権限」を持った Custom Role を利用します。
SELECT
query_type, query_text,
user_name, role_name,
execution_status, start_time
FROM
snowflake.account_usage.query_history
WHERE
execution_status = 'SUCCESS' AND
query_type IN ('CREATE_NETWORK_POLICY', 'ALTER_NETWORK_POLICY', 'DROP_NETWORK_POLICY', 'RENAME_NETWORK_POLICY') AND
query_text ILIKE '% MYPOLICY%' // ログを確認したい network policy 名です。ILIKE を利用します。
ORDER BY
start_time;
セキュリティ統制上の目的で確認する際には、user level での Network Policy 設定も可能であるため、WHERE 句の query_text
を指定せずに、すべての Network Policy 変更ログを確認します。
参考資料:
ユーザ一覧の確認
ロールの一覧であれば useradmin であっても確認できます。
USE ROLE useradmin;
SHOW ROLES;
ユーザの一覧を確認することは useradmin には許可されていません。そこで、「監査ログ SNOWFLAKE database の参照権限」で記載した Custom Role を利用するか、以下のように useradmin に直接権限を付与します。
USE ROLE securityadmin;
GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE useradmin;
ユーザ一覧を確認できるようになります。ただし、snowflake.account_usage.users
には最大 120 分の遅延が存在します。
USE ROLE useradmin;
SELECT
name, email, disabled,
created_on, last_success_login,
has_password, password_last_set_time,
has_rsa_public_key,
ext_authn_duo, ext_authn_uid
FROM
snowflake.account_usage.users
WHERE
deleted_on IS NULL
ORDER BY
last_success_login DESC;
ALL_USER_NAMES
関数を利用することもできます。public ロールでも利用できる関数です。
USE ROLE public;
SELECT ALL_USER_NAMES();
参考資料:
Behavior Change Release Management の権限委譲は不可
Behavior Change Release のステータス確認は public ロールでも可能です。一方、Enable/Disable は accountadmin が必要です。
USE ROLE public;
SELECT system$behavior_change_bundle_status('2021_02');
USE ROLE accountadmin;
SELECT system$enable_behavior_change_bundle('2021_02');
SELECT system$disable_behavior_change_bundle('2021_02');
Storage Integration の情報確認
Integration の一覧を確認する権限は public ロールも持ちます。
USE ROLE public;
SHOW INTEGRATIONS;
Integration の作成は ACCOUNTADMIN で実行する必要がありますが、USAGE 権限を委譲することが可能です。
USE ROLE accountadmin;
CREATE STORAGE INTEGRATION mys3int
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = S3
ENABLED = true
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123412341234:role/my-role-20210923'
STORAGE_ALLOWED_LOCATIONS = ('s3://my-test-20210923/snowflake/');
GRANT USAGE ON INTEGRATION mys3int TO ROLE sysadmin;
USE ROLE sysadmin;
DESCRIBE STORAGE INTEGRATION mys3int;
Credit の使用状況を確認する権限の委譲
// accountadmin を利用します。
USE ROLE accountadmin;
// 空のロールを作成します。
CREATE ROLE myrole;
// ACCOUNT オブジェクトに対する "MONITOR USAGE" privilege を付与します。
GRANT MONITOR USAGE ON ACCOUNT TO ROLE myrole;
// useradmin が grant できるように、OWNERSHIP を移管しています。
GRANT OWNERSHIP ON ROLE myrole TO ROLE useradmin;
// accountadmin の直下に配置することで、myrole が OWNERSHIP を持つオブジェクトが発生しても accountadmin で管理できるようにしておきます。
GRANT ROLE myrole TO ROLE accountadmin;
Web コンソールから、Credit 消費の情報を確認できることが分かります。
参考資料:
- Enabling Non-Account Administrators to Monitor Usage and Billing History in the Classic Web Interface
- クレジットの使用状況だけ確認できるユーザを作成する
Resource Monitor に関する権限委譲
// CREATE RESOURCE MONITOR を実行できるのは accountadmin だけです。委譲できません。
USE ROLE accountadmin;
CREATE RESOURCE MONITOR mylimit;
// ただし、作成した後に MODIFY, MONITOR を委譲することはできます。
GRANT MODIFY, MONITOR ON RESOURCE MONITOR mylimit TO ROLE sysadmin;
// sysadmin で warehouse を作成します。
USE ROLE sysadmin;
CREATE WAREHOUSE mywh2;
// RESOURCE_MONITOR を SET できるのは accountadmin だけです。委譲できません。
USE ROLE accountadmin;
ALTER WAREHOUSE mywh2 SET RESOURCE_MONITOR = mylimit;
// ただし、MODIFY, MONITOR が委譲されていれば、パラメータの変更は可能です。
USE ROLE sysadmin;
ALTER RESOURCE MONITOR mylimit
SET CREDIT_QUOTA = 10
TRIGGERS ON 50 PERCENT DO NOTIFY
ON 75 PERCENT DO NOTIFY
ON 90 PERCENT DO SUSPEND
ON 100 PERCENT DO SUSPEND_IMMEDIATE;
参考資料:
- Warehouse による Credit 消費に関するアラート設定
- 通知先は accountadmin のメールアドレスとなります。
- resource monitor 管理のための accountadmin user を一つ払出して、メーリングリストのメールアドレスを指定する運用が考えられます。
- 通知先は accountadmin のメールアドレスとなります。
- CREATE RESOURCE MONITOR
- "This command can only be executed by account administrators."
- Virtual Warehouse Privileges
- "Note that only the ACCOUNTADMIN role can assign warehouses to resource monitors."
- Access Control Privileges for Resource Monitors
- Resource Monitor Privileges
関連記事
- Snowflake Task による SQL の定期実行Snowflake において、cron のように定期的に SQL を実行する仕組みとして Task が提供されています。基本的な使い方を記載します。 サンプル データベースとテーブルを作成しておきます。 CREATE DATABASE mydb; CREATE TABLE mytbl (c1 DATETIME, c2 STRING); 1分毎に INSERT を実行する task を作成します。W...
- Snowflake におけるアクセス制御の設定Snowflake について、アクセス制御の設定を記載します。 参考資料: Access Control in Snowflake user と role の関係 [Role Hierarchy and Privilege
- Snowflake におけるセキュリティ関連の機能Snowflake のセキュリティ関連の機能について記載します。 パラメータ管理 Snowflake における設定値はパラメータとよばれます。設定する対象によって分類すると、以下の三種類が存在します。 Account パラメータ。 Account-level でのみ設定可能です。 Session パラメータ。 Account-level および User-level, Session-level ...
- Looker から Snowflake への OAuth 接続Looker から Snowflake の DB を OAuth 認証で参照する設定例を記載します。 参考資料: Looker / feedbackSnowflake / Configuring OAuth for Snowflake connections Snowflake 内の Looker 用 Role/User/Warehouse/DB 作成 Role と
- Snowflake に対する SSO 設定 (Auth0)Snowflake に対して、外部の ID 基盤 (IdP; ID Provider) による認証でログインするための設定例を記載します。IdP としては Auth0 を用います。 参考資料: [HOWTO: CONFIGURE AUTH0 AS IDENTITY PROVIDER FOR SNOWFLAKE SINGLE SIGN-ON](https://community.snowflake....