モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

Snowflake Custom Role による ACCOUNTADMIN からの権限委譲

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2022/02/06
最終更新最終更新
2024/05/16
記事区分記事区分
一般公開

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 消費の情報を確認できることが分かります。

参考資料:

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;

参考資料:

Likeボタン(off)0
詳細設定を開く/閉じる
アカウント プロフィール画像

AWS と Google Cloud の資格試験の勉強中

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

>>さらに詳しくステッカーを贈る
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    ログインする

    関連記事

    • Snowflake Task による SQL の定期実行
      Snowflake において、cron のように定期的に SQL を実行する仕組みとして Task が提供されています。基本的な使い方を記載します。 サンプル データベースとテーブルを作成しておきます。 CREATE DATABASE mydb; CREATE TABLE mytbl (c1 DATETIME, c2 STRING); 1分毎に INSERT を実行する task を作成します。W...
      kenken5/16/2024に更新
      いいねアイコン画像0
    • Snowflake におけるアクセス制御の設定
      サムネイル画像-69f3d5536c
      Snowflake について、アクセス制御の設定を記載します。 参考資料: Access Control in Snowflake user と role の関係 [Role Hierarchy and Privilege
      りょうりょう12/29/2023に更新
      いいねアイコン画像0
    • Snowflake におけるセキュリティ関連の機能
      サムネイル画像-5dcf74894d
      Snowflake のセキュリティ関連の機能について記載します。 パラメータ管理 Snowflake における設定値はパラメータとよばれます。設定する対象によって分類すると、以下の三種類が存在します。 Account パラメータ。 Account-level でのみ設定可能です。 Session パラメータ。 Account-level および User-level, Session-level ...
      サマーズサマーズ3/2/2024に更新
      いいねアイコン画像0
    • Looker から Snowflake への OAuth 接続
      サムネイル画像-ce4268940d
      Looker から Snowflake の DB を OAuth 認証で参照する設定例を記載します。 参考資料: Looker / feedbackSnowflake / Configuring OAuth for Snowflake connections Snowflake 内の Looker 用 Role/User/Warehouse/DB 作成 Role と
      suzusuzu1/2/2025に更新
      いいねアイコン画像0
    • Snowflake に対する SSO 設定 (Auth0)
      サムネイル画像-6789888256
      Snowflake に対して、外部の ID 基盤 (IdP; ID Provider) による認証でログインするための設定例を記載します。IdP としては Auth0 を用います。 参考資料: [HOWTO: CONFIGURE AUTH0 AS IDENTITY PROVIDER FOR SNOWFLAKE SINGLE SIGN-ON](https://community.snowflake....
      ふんわりぬこふんわりぬこ1/26/2024に更新
      いいねアイコン画像0