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

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

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

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

Snowflake におけるセキュリティ関連の機能

モーダルを閉じる

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

モーダルを閉じる

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

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

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

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

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

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

作成日作成日
2021/09/20
最終更新最終更新
2024/04/02
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    自動化が好きです。

    0
    ステッカーを贈るとは?

    Snowflake のセキュリティ関連の機能について記載します。

    パラメータ管理

    Snowflake における設定値はパラメータとよばれます。設定する対象によって分類すると、以下の三種類が存在します。

    • Account パラメータ。
      • Account-level でのみ設定可能です。
    • Session パラメータ。
      • Account-level および User-level, Session-level で設定可能です。
    • Object パラメータ。
      • Account-level および Object-level で設定可能です。
        • Object には Database や Warehouse だけでなく User も含まれます
      • 上位の階層の Object に対する設定値は下位の Object に伝搬します。
        • 例えば Database object に対する設定値は Schema object に伝搬します。

    SHOW PARAMETERS コマンド

    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;
    

    ALTER ACCOUNT コマンド

    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;
    

    参考資料:

    セキュリティ設定に関連するパラメータ

    NETWORK_POLICY パラメータ (Account パラメータ、User object パラメータ)

    • アクセス元 IP アドレスを制限するためのパラメータです。
    • Account パラメータとして設定する場合と、User object パラメータとして設定する場合があります。
      • User object パラメータとしての設定値が優先されます。
        • より正確には、Accout object パラメータとして設定すると、Object の階層構造において下位に位置する User object の既定値が設定されます。
        • User object の設定で上書きしない限りは、Account object に対して設定した値が有効となります。
    • ALTER USER によってパラメータの値を設定できます。
      • user の OWNERSHIP privilege を持つ場合に ALTER USER を実行可能です。
      • 各 user は ALTER USER コマンドを実行可能ですが、その際に SET 可能なパラメータには NETWORK_POLICY は含まれません
        • DEFAULT_WAREHOUSE
        • DEFAULT_NAMESPACE
        • DEFAULT_ROLE
        • DEFAULT_SECONDARY_ROLES
        • "Any of their session parameter defaults"
      • 注意: UNSET は可能です。
        • Account パラメータとして設定した値が有効になることに注意します。
        • 以下のような挙動になります。事前に mypolicy および mypolicy2 を作成しておきます。
          • SECURITYADMIN で実行
            • ALTER USER myuser SET NETWORK_POLICY = mypolicy;
          • 各 user で実行
            • 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'
            • → FIRST_NAME 等は値の削除も不可。
    • MINS_TO_BYPASS_NETWORK_POLICY によって一時的に network policy を無効化できます。
    • Account パラメータとして設定する場合には SECURITYADMIN 以上の権限が必要です。

    関連資料:

    PREVENT_UNLOAD_TO_INLINE_URL パラメータ (Account パラメータ)

    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);
    

    参考資料:

    REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION パラメータ (Account パラメータ)

    ALTER ACCOUNT SET REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION = true;
    SHOW PARAMETERS LIKE 'REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION' IN ACCOUNT;
    
    • External STAGE object を作成する際に、STORAGE INTEGRATION object の利用を必須とするための Account パラメータです。
      • INTEGRATION object は ACCOUNT object 直下に存在しています。
      • STAGE object は Schema object 直下に存在しています。
    • INTEGRATION object 作成のためには CREATE INTEGRATION privilege が必要です。
      • ACCOUNTADMIN が持つ privilege です。

    参考資料:

    REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION パラメータ (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

    監査ログは SNOWFLAKE database 内に格納されています。

    • Snowflake アカウントには "SNOWFLAKE" という名称の database が一つ存在しています。
      • 後述の Data Sharing 機能を用いて Snowflake 社から read-only な database として提供されています。
    • 用語の整理
      • SNOWFLAKE
        • SNOWFLAKE アカウントが Data Sharing の Provider となっています。
        • share オブジェクトによって import されているものは SNOWFLAKE database です。
      • ACCOUNT_USAGE
        • ACCOUNT_USAGE という share オブジェクトを介して提供されています。
        • database 内には ACCOUNT_USAGE schema と READER_ACCOUNT_USAGE schema が存在します。
          • それぞれの schema 内には view が複数存在しており、監査ログ等を持ちます。
          • READER_ACCOUNT_USAGE schema
            • Snowflake アカウントが reader account を持つ場合に利用します。

    • ACCOUNT_USAGE schema
      • 後述の Information schema と基本的に同じ情報を含みます。
        • Information schema と異なり、DROP された object の情報も含みます。
      • データの view における保持期間
        • ACCOUNT_USAGE schema に含まれる view には object タイプと historical タイプの二種類があります: ACCOUNT_USAGE Views
          • historical タイプの view のデータ保持期間は、基本的に 1 年です。
        • Information schema のデータ保持期間は、長くても 6 ヶ月です。
      • データが view に格納されるまでの時間
        • Information schema は即時で view を用いてデータ参照できるようになります。
        • ACCOUNT_USAGE schema では少なくとも 45 分待つ必要があります。

    参考資料: Account Usage

    Information schema

    • "Information Schema" は snowflake に限らず、database 製品に共通する概念です。
      • Data Dictionary とも呼ばれます。
    • Information Schema は、各 database に存在します。
      • その database 内のすべての object に関する view を含みます。
      • 加えて account-level object に関する view を含みます。
        • role, warehouse, database 等です

    参考資料: Information Schema

    SNOWFLAKE database を利用した SELECT クエリの例

    クエリを実行するためには Warehouse が必要です。

    USE warehouse mywh;
    

    USERS View (snowflake.account_usage)

    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

    GRANTS_TO_USERS View (snowflake.account_usage)

    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

    GRANTS_TO_ROLES View (snowflake.account_usage)

    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

    STAGES View (snowflake.account_usage)

    特定のリージョンに対する 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_HISTORY View (snowflake.account_usage)

    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

    LOAD_HISTORY View (snowflake.account_usage)

    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_TRANSFER_HISTORY View (snowflake.account_usage)

    Data Unload や Replication による、他の Cloud provider や Region に対するデータ転送の履歴を確認できます。

    SELECT * FROM snowflake.account_usage.data_transfer_history;
    

    参考資料: DATA_TRANSFER_HISTORY View

    REPLICATION_USAGE_HISTORY View (snowflake.account_usage)

    組織内の他のアカウントとのデータレプリケーションについて、履歴を確認できます。

    SELECT * FROM snowflake.account_usage.replication_usage_history;
    

    参考資料: REPLICATION_USAGE_HISTORY View

    LOGIN_HISTORY View (snowflake.account_usage)

    想定していない 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');
    

    参考資料:

    QUERY_HISTORY View (snowflake.account_usage)

    クエリの実行履歴を確認できます。

    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');
    

    参考資料:

    CONTRACT_ITEMS View, REMAINING_BALANCE_DAILY View (snowflake.organization_usage)

    ORGADMIN role が必要です。組織における、前払い情報等を取得できます。

    SELECT * FROM snowflake.organization_usage.contract_items;
    SELECT * FROM snowflake.remaining_balance_daily;
    

    参考資料:

    Warehouse による Credit 消費に関するアラート設定

    • 顧客が作成した Virtual Warehouses による Credit 消費に関するアラート設定です。
      • Snowpipe 等が稼働する Snowflake-managed Virtual Warehouses による Credit 消費は対象外です。
    • Account-level と Warehouse-level の二種類が存在します。
      • Account-level の RESOURCE MONITOR は最大で 1 つまで作成できます。
    • 既定では Snowflake の billing 期間に合わせたアラートとなります。
      • 毎月 1 日にリセットされます。
    • ACCOUNTADMIN のみが RESOURCE MONITOR を作成可能です。
      • 閲覧 privilege (MONITOR) および 編集 privilege (MODIFY) は他の role に grant 可能です。
    • Notification は ACCOUNTADMIN にのみ通知されます。
      • 事前に Web Interface の設定で有効化する必要があります。
      • Email で Notification を受け取るためには、メールアドレスの認証も完了する必要があります。

    作成例

    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 による通知例

    参考資料:

    その他の話題

    • Data Encryption
      • データ暗号化のための機能です。
      • Snowflake 内におけるデータの暗号化は、Snowflake 管理の鍵によって行われます。
        • Tri-Secret Secure とよばれる機能を有効化すると、顧客管理の鍵を合成した鍵によって暗号化することができます。
      • Internal Stage を用いる場合、Snowflake クライアントによってデータが暗号化された後にアップロードされます。
        • 鍵は Snowflake が管理します。
        • Tri-Secret Secure とよばれる機能を有効化すると、顧客管理の鍵を合成した鍵によって暗号化することができます。
      • External Stage を用いている場合、Stage 内におけるデータの暗号化は必須ではありません。
        • 暗号化されていない場合は External Stage から table に Data Load する際に、Snowflake によってデータが暗号化されます。
        • External Stage が S3 の場合、以下の三種類の暗号化が可能です: CREATE STAGE
          • Client-side Encryption。
            • master key を対称鍵として用意しておきます。
            • External Stage object を作成する際に master key の値を設定しておきます。
            • External Stage にアップロードするプログラムは乱数による一時鍵を生成します。
            • 一時鍵によってデータを暗号化して External Stage にアップロードします。
            • 一時鍵は master key によって暗号化して External Stage にアップロードします。
          • AWS-managed key による Server-side encryption。
          • Customer-managed key (KMS) による Server-side encryption。
    • Sharing Data Securely in Snowflake
      • 他のアカウントとのデータ共有のための機能です。
      • 同じ cloud provider かつ同じ region の Snowflake アカウントに対してのみ Share できます。
        • 異なる場合には、同じ cloud provider かつ同じ region の Snowflake アカウントを用意して、レプリケーションすることで対応します。
    • External Functions
      • Snowflake 外の API を利用する関数の定義が可能です。
      • API INTEGRATION object によって External Function object で利用可能な認証情報を定義します。
        • STORAGE INTEGRATION object によって External Stage object で利用可能な認証情報を定義したのと同様です。
      • API INTEGRATION object の認証先となるサービスは、以下のいずれかです。
        • Amazon API Gateway
        • Microsoft Azure API Management Service
        • Google Cloud API Gateway
    • Database Replication and Failover/Failback
      • 組織内の他のアカウントとのデータレプリケーションを行い、リージョンレベルでの災害等に備えることができます。
      • Data Sharing の Provider となる場合に、Consumer と同じ Cloud Provider かつ Region のアカウントにレプリケーションしておく必要があります。
    • Access Control Privileges
      • Snowflake における Privilege の一覧です。
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    自動化が好きです。

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

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

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

    Feedbacks

    Feedbacks コンセプト画像

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

      関連記事

      • Snowflake Task による SQL の定期実行
        Snowflake において、cron のように定期的に SQL を実行する仕組みとして Task が提供されています。基本的な使い方を記載します。 サンプル データベースとテーブルを作成しておきます。 CREATE DATABASE mydb; CREATE TABLE mytbl (c1 DATETIME, c2 STRING); 1分毎に INSERT を実行する task を作成します。W...
        kenken6/16/2024に更新
        いいねアイコン画像0
      • Snowflake におけるアクセス制御の設定
        サムネイル画像-69f3d5536c
        Snowflake について、アクセス制御の設定を記載します。 参考資料: Access Control in Snowflake user と role の関係 [Role Hierarchy and Privilege
        りょうりょう1/29/2024に更新
        いいねアイコン画像0
      • Looker から Snowflake への OAuth 接続
        サムネイル画像-ce4268940d
        Looker から Snowflake の DB を OAuth 認証で参照する設定例を記載します。 参考資料: Looker / feedbackSnowflake / Configuring OAuth for Snowflake connections Snowflake 内の Looker 用 Role/User/Warehouse/DB 作成 Role と
        suzusuzu2/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....
        ふんわりぬこふんわりぬこ2/26/2024に更新
        いいねアイコン画像0
      • Snowflake Custom Role による ACCOUNTADMIN からの権限委譲
        サムネイル画像-aa3f3d6f78
        Snowflake アカウントの運用時において、ACCOUNTADMIN は必要な場合以外は利用しないことが推奨されます。SYSADMIN 直下ではなく ACCOUNTADMIN 直下に位置付けた Custom Role を作成することで、ACCOUNTADMIN が持つ権限を委譲する例を記載します。 関連資料: [Access Control Privileges](https://docs.s...
        クラウド職人クラウド職人6/16/2024に更新
        いいねアイコン画像0