こちらのページで基本的な使い方を把握した Snowflake について、以下の観点でセキュリティ設定を記載しました。
本ページでは、その他の観点における Snowflake のセキュリティ関連の機能について記載します。
Snowflake における設定値はパラメータとよばれます。設定する対象によって分類すると、以下の三種類が存在します。
Account-level におけるパラメータの確認です。Account パラメータだけでなく、Session パラメータ、Object パラメータも表示されます。
SHOW PARAMETERS IN ACCOUNT;
User-level におけるパラメータの確認です。Session パラメータだけでなく、User object パラメータも表示されます。
SHOW PARAMETERS LIKE 'timezone' IN USER; ← Session パラメータ
SHOW PARAMETERS LIKE 'network_policy' IN USER; ← Object パラメータ
Session-level におけるパラメータの確認です。Session パラメータのみが表示されることになります。IN SESSION
は省略可能です。
SHOW PARAMETERS LIKE 'timezone' IN SESSION;
Object-level におけるパラメータの確認です。Object パラメータのみが表示されます。
SHOW PARAMETERS IN DATABASE mydb;
Account-level におけるパラメータ設定を行います。Account パラメータだけでなく、Session パラメータ、Object パラメータも設定できます。
例: Session パラメータ TIMEZONE を Account-level で設定
ALTER ACCOUNT SET TIMEZONE = 'Asia/Tokyo';
ACCOUNT-level, User-level, Session-level で TIMEZONE Session パラメータの設定値が変更されたことを確認
SHOW PARAMETERS LIKE 'TIMEZONE' IN ACCOUNT;
SHOW PARAMETERS LIKE 'TIMEZONE' IN USER;
SHOW PARAMETERS LIKE 'TIMEZONE' IN SESSION;
例: こちらのページに記載した IP 制限のための NETWORK_POLICY は、Account パラメータとして振る舞う場合と、User object パラメータとして振る舞う場合がある特殊なパラメータです。
Account-level で設定すると Account パラメータが設定されます。User object は Account object の下位に存在するため、User object の既定値となります。
CREATE NETWORK POLICY mypolicy ALLOWED_IP_LIST = ('123.123.123.123');
ALTER ACCOUNT SET NETWORK_POLICY = mypolicy;
SHOW PARAMETERS LIKE 'network_policy' IN USER;
User-level で設定すると、User object パラメータが設定されます。
CREATE NETWORK POLICY mypolicy2 ALLOWED_IP_LIST = ('234.234.234.234');
ALTER USER myuser SET NETWORK_POLICY = mypolicy2;
SHOW PARAMETERS LIKE 'network_policy' IN USER;
参考資料:
ALTER USER
によってパラメータの値を設定できます。
UNSET
は可能です。
ALTER USER myuser SET NETWORK_POLICY = mypolicy;
ALTER USER myuser SET NETWORK_POLICY = mypolicy;
→ Statement executed successfully.ALTER USER myuser SET NETWORK_POLICY = mypolicy2;
→ Network policy MYPOLICY2 does not exist or not authorized.ALTER USER myuser UNSET NETWORK_POLICY;
→ Statement executed successfully.ALTER USER myuser UNSET FIRST_NAME;
→ SQL access control error: Insufficient privileges to operate on user 'MYUSER'MINS_TO_BYPASS_NETWORK_POLICY
によって一時的に network policy を無効化できます。
関連資料:
Stage を用いない Data Unload を禁止できます。Data Load は禁止されません。
ALTER ACCOUNT SET PREVENT_UNLOAD_TO_INLINE_URL = true;
SHOW PARAMETERS LIKE 'PREVENT_UNLOAD_TO_INLINE_URL' IN ACCOUNT;
動作検証
CREATE DATABASE mydb;
CREATE OR REPLACE TABLE mytbl (c1 STRING, c2 DATE);
CREATE OR REPLACE WAREHOUSE mywh WITH
WAREHOUSE_SIZE = XSMALL
AUTO_SUSPEND = 60
AUTO_RESUME = true
INITIALLY_SUSPENDED = true;
COPY INTO 's3://mybucket-20211003/unload/'
FROM mydb.public.mytbl
CREDENTIALS = (AWS_KEY_ID='xxxx' AWS_SECRET_KEY='xxxxx')
FILE_FORMAT = (TYPE = CSV);
参考資料:
ALTER ACCOUNT SET REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION = true;
SHOW PARAMETERS LIKE 'REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION' IN ACCOUNT;
参考資料:
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION
パラメータは External Stage 作成時の制限を行うためのパラメータです。REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION
パラメータは External Stage 利用時における制限を行うためのパラメータです。
参考資料: REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION
監査ログは SNOWFLAKE database 内に格納されています。
参考資料: Account Usage
参考資料: Information Schema
クエリを実行するためには Warehouse が必要です。
USE warehouse mywh;
MFA 設定状況等を確認できます。
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;
参考資料: USERS View
ACCOUNTADMIN role が grant されている user 一覧等を確認できます。
SELECT
created_on, deleted_on, role,
grantee_name, granted_by
FROM
snowflake.account_usage.grants_to_users
WHERE
role = 'ACCOUNTADMIN';
参考資料: GRANTS_TO_USERS View
CREATE INTEGRATION
privilege が grant されている role 一覧等を確認できます。
SELECT
created_on, deleted_on,
privilege, granted_on, name,
grantee_name, granted_by, grant_option
FROM
snowflake.account_usage.grants_to_roles
WHERE
privilege = 'CREATE INTEGRATION';
参考資料: GRANTS_TO_ROLES View
特定のリージョンに対する External Stage 一覧等を確認できます。
SELECT
stage_name, stage_catalog, stage_schema,
stage_url, stage_region, stage_type, created, deleted
FROM
snowflake.account_usage.stages
WHERE
stage_type = 'External Named' AND
stage_region NOT IN ('ap-northeast-1', 'asia-northeast1');
参考資料: STAGES View
COPY コマンドまたは snowpipe による Data Load の履歴を確認できます。
SELECT
stage_location, last_load_time, status,
table_catalog_name, table_schema_name, table_name,
pipe_name
FROM
snowflake.account_usage.copy_history;
参考資料: COPY_HISTORY View
COPY コマンドによる Data Load の履歴を確認できます。Snowpipe による Data Load 履歴は含まれません。
SELECT
catalog_name, schema_name, table_name,
file_name, last_load_time, status
FROM
snowflake.account_usage.load_history;
参考資料: LOAD_HISTORY View
Data Unload や Replication による、他の Cloud provider や Region に対するデータ転送の履歴を確認できます。
SELECT * FROM snowflake.account_usage.data_transfer_history;
参考資料: DATA_TRANSFER_HISTORY View
組織内の他のアカウントとのデータレプリケーションについて、履歴を確認できます。
SELECT * FROM snowflake.account_usage.replication_usage_history;
参考資料: REPLICATION_USAGE_HISTORY View
想定していない IP からのログイン履歴等を確認できます。
SELECT
event_timestamp, event_type,
user_name, client_ip,
reported_client_type,
first_authentication_factor,
second_authentication_factor,
is_success
FROM
snowflake.account_usage.login_history
WHERE
client_ip NOT IN ('123.123.123.123');
参考資料:
クエリの実行履歴を確認できます。
SELECT
database_name, schema_name,
query_type, query_text,
user_name, role_name,
execution_status,
start_time
FROM
snowflake.account_usage.query_history
WHERE
role_name = 'ACCOUNTADMIN' AND
execution_status = 'SUCCESS' AND
query_type NOT IN ('SHOW', 'SELECT', 'DESCRIBE', 'USE');
Information Schema 内の View を用いても同様のクエリを実行可能です
SELECT
database_name, schema_name,
query_type, query_text,
user_name, role_name,
execution_status,
start_time
FROM
TABLE(mydb.information_schema.query_history())
WHERE
role_name = 'ACCOUNTADMIN' AND
execution_status = 'SUCCESS' AND
query_type NOT IN ('SHOW', 'SELECT', 'DESCRIBE', 'USE');
参考資料:
ORGADMIN
role が必要です。組織における、前払い情報等を取得できます。
SELECT * FROM snowflake.organization_usage.contract_items;
SELECT * FROM snowflake.remaining_balance_daily;
参考資料:
作成例
CREATE OR REPLACE RESOURCE MONITOR mylimit
WITH 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;
設定例
ALTER ACCOUNT SET RESOURCE_MONITOR = mylimit;
ALTER WAREHOUSE mywh SET RESOURCE_MONITOR = mylimit;
Web Interface における通知例
Email による通知例
参考資料: