アクセス制御の構成

このトピックでは、アカウントの セキュリティ保護可能なオブジェクト のアクセス制御セキュリティを構成する方法について説明します。

このトピックの内容:

アカウント管理

アカウント管理者としての追加ユーザーの指定

デフォルトでは、各アカウントにはアカウント管理者として指定された1人のユーザーがいます(ユーザーはシステム定義の ACCOUNTADMIN ロールを付与されています)。アカウント管理者として少なくとも1人の他のユーザーを指定することをお勧めします。これにより、アカウント管理者の1人がログインできない場合は特に、アカウントレベルのタスクを実行できる少なくとも1人のユーザーがアカウントに常に存在するようになります。

これらの追加のアカウント管理者については、新しいユーザーを作成するか、既存のユーザーを指定するかを選択できますが、必ず次を指定してください。

  • ユーザーに ACCOUNTADMIN ロールを付与しますが、このロールをデフォルトとして設定 しないで ください。代わりに、下位レベルの管理ロール(例: SYSADMIN)またはカスタムロールをデフォルトとして指定します。これにより、アカウント管理者が誤って ACCOUNTADMIN ロールを使用してオブジェクトを作成することを防止できます。

  • 各ユーザーにメールアドレスが指定されていることを確認します(多要素認証に必要)。

例えば、 user2 という名前の既存のユーザーに ACCOUNTADMIN および SYSADMIN のロールを付与し、既定のロールとして SYSADMIN を指定します。

GRANT ROLE ACCOUNTADMIN, SYSADMIN TO USER user2;

ALTER USER user2 SET EMAIL='user2@domain.com', DEFAULT_ROLE=SYSADMIN;

アカウント管理者ごとに MFA を有効化

Snowflakeアカウントの最高レベルのセキュリティを確保するため、機密データを変更または表示できるユーザーには、多要素認証(MFA)の使用をログインの必須条件とすることを 強く お勧めします。

この推奨事項は特に ACCOUNTADMIN のロールがあるユーザーに適用されますが、SECURITYADMIN および SYSADMIN のロールがあるユーザーを含むように拡張することもできます。

詳細については、 アクセス制御の考慮事項 および 多要素認証(MFA) をご参照ください。

カスタムロールの作成

「最小権限」の一般原則に従うために、組織内の ビジネス機能に合わせた カスタムロールを作成して、セキュリティ保護可能なオブジェクトの狭いセットで SQL アクションを許可することをお勧めします。

ワークフローは次のとおりです。

  1. カスタムロールを作成します。

  2. ロールに権限のセットを付与します。

  3. ビジネスニーズに合わせて、 SQL アクションを実行するためにロールに付与された権限を必要とする1人以上のユーザーにロールを付与します。

  4. ロールを別のロールに付与して、ロール階層を作成または追加します。必須ではありませんが、このステップを強くお勧めします。詳細については、 ロール階層の作成 (このトピック内)をご参照ください。

このセクションでは、 r1 という名前のロールを作成し、そのロールに次の権限を付与する手順について説明します。権限により、セッションでロールをアクティブ化するユーザーは、単一のテーブル d1.s1.t1 をクエリできます。

権限

オブジェクト

メモ

USAGE

ウェアハウス w1

データベース d1

スキーマ s1

オブジェクト(テーブルやビューなど)をクエリするには、ロールにウェアハウスに対する USAGE 権限が必要です。ウェアハウスは、クエリを実行するためのコンピューティングリソースを提供します。

スキーマ内のオブジェクトを操作するには、コンテナーデータベースとスキーマに対する USAGE 権限もロールに必要です。

SELECT

テーブル t1

ロールが作成された後、そのロールに追加の権限を付与して、そのロールを持つユーザーが同じオブジェクトまたは追加のオブジェクトに対して、追加の SQL アクションを実行できるようにすることができます。

ロールを作成する

  1. CREATE ROLE を使用して r1 ロールを作成します。

    ロールを作成できるのは、ユーザー管理者(つまり、 USERADMIN システムロール以上のユーザー)またはアカウントの CREATE ROLE 権限を持つ別のロールのみです。

    CREATE ROLE r1
       COMMENT = 'This role has all privileges on schema_1';
    

ロールに権限を付与する

  1. このセクションの前半のテーブルで定義されている権限を r1 ロールに付与します。

    SECURITYADMIN システムロールを使用して、オブジェクトに対する権限をロールに付与できます。その他のオプションについては、 GRANT <権限> ... TO ROLE をご参照ください。

    GRANT USAGE
      ON WAREHOUSE w1
      TO ROLE r1;
    
    GRANT USAGE
      ON DATABASE d1
      TO ROLE r1;
    
    GRANT USAGE
      ON SCHEMA d1.s1
      TO ROLE r1;
    
    GRANT SELECT
      ON TABLE d1.s1.t1
      TO ROLE r1;
    

ユーザーにロールを付与する

  1. ロール r1 ロールをユーザー smith に割り当てます。

    SECURITYADMIN ロールは、ユーザーにロールを付与するために使用できます。その他のオプションについては、 GRANT ROLE をご参照ください。

    GRANT ROLE r1
       TO USER smith;
    
  2. オプションで、新しいカスタムロールをユーザーの既定のロールとして設定します。次回、ユーザーがSnowflakeにログインすると、セッションで既定のロールが自動的にアクティブになります。

    このコマンドを実行できるのは、ユーザーに対する OWNERSHIP 権限を持つロールまたはそれ以上のロールのみです。

    次のコマンドは、ユーザー smith の既定のロールを設定します。

    ALTER USER smith
       SET DEFAULT_ROLE = r1;
    

読み取り専用カスタムロールの作成

特定のスキーマ(例: d1.s1)にあるすべてのテーブルのクエリに限定されたロールが必要だと想定します。このロールを使用してコマンドを実行するユーザーは、テーブルデータを更新したり、追加のデータベースオブジェクトを作成したり、テーブルをドロップしたりすることはできません。このロールは、テーブルデータのクエリに限定されています。

読み取り専用のロールを作成するには、 カスタムロールの作成 (このトピック内)で説明されている基本的なステップを実行します。 ロールへの権限の付与 セクションで、読み取り専用ロール(これらの手順では read_only という名前)に次のオブジェクト権限を付与します。

権限

オブジェクト

メモ

USAGE

ウェアハウス

オブジェクト(テーブルやビューなど)をクエリするには、ロールにウェアハウスに対する USAGE 権限が必要です。ウェアハウスは、クエリを実行するためのコンピューティングリソースを提供します。

SELECT

テーブル

スキーマ内のオブジェクトを操作するには、コンテナーデータベースとスキーマに対する USAGE 権限もロールに必要です。

GRANT <権限> ステートメントは次のとおりです。

GRANT USAGE
  ON DATABASE d1
  TO ROLE read_only;

GRANT USAGE
  ON SCHEMA d1.s1
  TO ROLE read_only;

GRANT SELECT
  ON ALL TABLES IN SCHEMA d1.s1
  TO ROLE read_only;

GRANT USAGE
  ON WAREHOUSE w1
  TO ROLE read_only;

注釈

GRANT SELECT ON ALL TABLES IN SCHEMA <スキーマ> ステートメントは、すべての 既存の テーブルに対してのみ SELECT 権限を付与します。すべての 将来 のテーブルに対する SELECT 権限をロールに付与するには、次のステートメントを実行します。

GRANT SELECT ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE read_only;

ロール階層の作成

カスタムロールを作成するときは、最終的に高レベルの管理者ロールに割り当てられるロール階層を作成することを検討してください。一般に、SYSADMIN ロールは他のすべてのロールが階層内で割り当てられているロールと同じように機能しますが、十分な権限のあるロールがこの機能を提供できることに注意することが重要です。SYSADMIN ロールは、アカウントでウェアハウス、データベース、およびデータベースオブジェクトを作成し、それらの権限を他のロールに付与する権限があるシステム定義のロールです。デフォルトのシステム階層では、最上位の ACCOUNTADMIN ロールがシステム管理者ロールを管理します。

ロールを2番目のロールに付与して、ロール階層を作成します。その後、その2番目のロールを3番目のロールに付与できます。ロールに関連付けられた権限は、階層内のそのロールの のロール(親ロール)によって継承されます。

次の図は、ロール階層の例と各ロールに付与される権限を示しています。

Role hierarchy and privileges granted to each role

別のロールにロールを付与する

上位レベルの階層のロールに、ロールを割り当てます。この例では、 カスタムロールの作成 で作成した r1 ロール(このトピック内)を SYSADMIN ロールに割り当てています。SYSADMIN ロールは、 r1 ロールに付与されたオブジェクト権限を継承します。

GRANT ROLE r1
   TO ROLE sysadmin;

注釈

より複雑な例では、 custom ロールを SYSADMIN の別の子ロール(またはデータベースを作成するための十分な権限があるカスタムロールなどの別の管理者ロール)に割り当てることができます。SYSADMIN ロールは、 custom ロールとその親ロールに割り当てられた結合された権限を継承します。階層内の custom の上のロールがオブジェクトを所有している場合、ロール階層により、 SYSADMIN ロールのメンバーもそれらのオブジェクトを(間接的に)所有し、期待どおりに管理できます。

付与された権限の表示

オブジェクトに付与されている現在の権限セットを表示するには、 SHOW GRANTS コマンドを実行します。

注釈

特定のオブジェクトで SHOW GRANTS コマンドを実行するには、そのオブジェクトタイプに対して SHOW コマンドを実行する場合と同じオブジェクト権限が必要です。

例えば、テーブルで SHOW GRANTS コマンドを実行するには、テーブルとコンテナデータベースおよびスキーマに対する次の権限が必要です。

データベース

USAGE

スキーマ

USAGE

テーブル

任意の権限

たとえば、スキーマの現在の権限を表示するには、次のコマンドを実行します。

SHOW GRANTS ON SCHEMA <database_name>.<schema_name>;

たとえば、 カスタムロールの作成 (このトピック内)で付与された database_a.schema_1 の権限を表示するには、次のコマンドを実行します。

SHOW GRANTS ON SCHEMA database_a.schema_1;

Snowflakeは次の結果を返します。

+-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+
| created_on                    | privilege             | granted_on | name                 | granted_to | grantee_name             | grant_option | granted_by    |
|-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------|
| 2022-03-07 09:04:23.635 -0800 | USAGE                 | SCHEMA     | D1.S1                | ROLE       | R1                       | false        | SECURITYADMIN |
+-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+

SHOW GRANTS コマンドを実行して、ロールに付与された現在の権限セット、またはユーザーに付与された現在のロールセットを表示することもできます。

SHOW GRANTS TO ROLE <role_name>;
SHOW GRANTS TO USER <user_name>;

たとえば、次のコマンドを実行して、 カスタムロールの作成 (このトピック内)で作成した r1 ロールに付与された権限を表示します。

SHOW GRANTS TO ROLE r1;

Snowflakeは次の結果を返します。

+-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+
| created_on                    | privilege | granted_on | name                 | granted_to | grantee_name | grant_option | granted_by    |
|-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------|
| 2022-03-07 09:08:43.773 -0800 | USAGE     | DATABASE   | D1                   | ROLE       | R1           | false        | SECURITYADMIN |
| 2022-03-07 09:08:55.253 -0800 | USAGE     | SCHEMA     | D1.S1                | ROLE       | R1           | false        | SECURITYADMIN |
| 2022-03-07 09:09:07.206 -0800 | SELECT    | TABLE      | D1.S1.T1             | ROLE       | R1           | false        | SECURITYADMIN |
| 2022-03-07 09:08:34.838 -0800 | USAGE     | WAREHOUSE  | W1                   | ROLE       | R1           | false        | SECURITYADMIN |
+-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+

オブジェクトに対する将来の付与の割り当て

付与管理を簡素化するために、 将来の付与 では、データベースまたはスキーマにある特定の の新しい(つまり、将来の)オブジェクトに付与する権限の初期セットを定義できます。データベースまたはスキーマで新しいオブジェクトが作成されると、定義された権限が指定されたロールに自動的に付与されます。

将来の付与では、指定されたタイプの新しいオブジェクトに付与される権限の 初期 セットのみを定義します。個々のオブジェクトが作成されると、管理者は明示的に追加の権限を付与したり、オブジェクトに対する権限を取り消したりできます。これにより、スキーマまたはデータベース内のすべてのオブジェクトに対するきめ細かいアクセス制御が可能になります。

考慮事項

  • 同じデータベースで、データベースとスキーマのために将来の付与が 同じオブジェクト型で 定義される場合、スキーマレベルの付与はデータベースレベルの付与よりも優先され、データベースレベルの付与は無視されます。この動作は、1つまたは別のロールに付与された将来のオブジェクトに対する権限に適用されます。

    たとえば、次のステートメントは、データベースレベルとスキーマレベルで同じ型のオブジェクトに対して異なる権限を付与します。

    データベース d1 内にあるすべての将来のテーブルに対する SELECT 権限をロール r1 に付与します。

    GRANT SELECT ON FUTURE TABLES IN DATABASE d1 TO ROLE r1;
    

    スキーマ d1.s1 内にあるすべての将来のテーブルに対する INSERT および DELETE 権限をロール r2 に付与します。

    GRANT INSERT,DELETE ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE r2;
    

    スキーマ d1.s1 のオブジェクト型の r1 ロールに割り当てられた将来の付与は完全に無視されます。スキーマ d1.s1 に新しいテーブルが作成されると、 r2 ロールのテーブルに対して定義された将来の権限のみが付与されます。

  • データベースレベルの将来の付与は、通常のアクセススキーマと 管理アクセススキーマ の両方に適用されます。

データベースまたはスキーマオブジェクトに対する将来の付与の定義

ON FUTURE キーワードで GRANT <権限> ... TO ROLE コマンドを使用して、指定された型の将来のオブジェクトに対する権限を付与します。

データベースまたはスキーマオブジェクトに対する将来の付与の取り消し

ON FUTURE キーワードで REVOKE <権限> ... FROM ROLE コマンドを使用して、将来のオブジェクトに対する付与を取り消します。

オブジェクトのクローニングと将来の付与

  • データベースまたはスキーマがクローンされると、将来の付与はそのクローンにコピーされます。この動作は、通常のオブジェクトの付与と一貫性を維持します。つまり、ソースオブジェクト(つまり、データベース)に対する権限の付与はそのクローンにコピーされませんが、すべての子オブジェクト(つまり、データベース内のテーブル)に対する権限の付与はクローンにコピーされます。

  • スキーマ内のオブジェクトのクローンが作成されると、クローン操作の CREATE <オブジェクト> ステートメントで COPY GRANTS オプションが指定されていない限り、スキーマ内のこのオブジェクトタイプに対して定義された将来の付与がクローンオブジェクトに適用されます。その場合、新しいオブジェクトは元のオブジェクトのアクセス許可を保持し、その型のオブジェクトに対する将来の付与を継承 しません

ウェブインターフェイスを使用した将来の付与の管理

従来のSnowflakeウェブインターフェイスを使用して、将来の付与を定義することもできます。

将来のデータベースオブジェクトに対する権限付与
  1. Databases Databases tab をクリックします。

  2. 特定のデータベースの行をクリックします。セキュリティパネルが開きます。

  3. Grant Privileges ボタンをクリックします。 Grant Privileges ダイアログが開きます。

  4. Grant privileges on ドロップダウンリストから future object_type を選択して、特定のオブジェクト型の新しいオブジェクトに対する将来の付与を定義します。

  5. 残りのドロップダウンリストから、指定したタイプの新しいオブジェクトに付与する権限と、権限が付与されるロールを選択します。

  6. Grant Privileges ボタンをクリックします。

将来のスキーマオブジェクトに対する権限付与
  1. Databases Databases tab » <データベース名> » Schemas をクリックします。

  2. 特定のスキーマの行をクリックします。セキュリティパネルが開きます。

  3. Grant Privileges ボタンをクリックします。 Grant Privileges ダイアログが開きます。

  4. Grant privileges on ドロップダウンリストから future object_type を選択して、特定のオブジェクト型の新しいオブジェクトに対する将来の付与を定義します。

  5. 残りのドロップダウンリストから、指定したタイプの新しいオブジェクトに付与する権限と、権限が付与されるロールを選択します。

  6. Grant Privileges ボタンをクリックします。

管理アクセススキーマの作成

管理アクセススキーマは、オブジェクトの権限管理をロックダウンすることでセキュリティを向上させます。

通常の(管理されていない)スキーマでは、オブジェクト所有者(オブジェクトに対する OWNERSHIP 権限のあるロール)は、オブジェクトへのアクセスを他のロールに付与できます。

管理アクセススキーマを使用すると、オブジェクトの所有者は付与を決定する機能を失います。スキーマの所有者(スキーマに対する OWNERSHIP 権限があるロール)または MANAGE GRANTS 権限があるロールのみが、スキーマ内のオブジェクトに対する権限を付与できます(将来の付与 を含みます)。

ウェブインターフェイスまたは SQL を使用して、管理アクセススキーマを作成できます。

Classic Web Interface

Databases Databases tab » <データベース名> » Schemas » Create Schema をクリックします。

SQL

WITH MANAGED ACCESS キーワードを使用して、 CREATE SCHEMA ステートメントを実行します。

ウェブインターフェイスまたは SQL を使用して、通常のスキーマを管理アクセススキーマに(またはその逆に)変更できます。

Classic Web Interface

Databases Databases tab » <データベース名> » Schemas » <スキーマ名> » Alter a schema をクリックします。

SQL

ENABLE | DISABLE MANAGED ACCESS キーワードで ALTER SCHEMA ステートメントを実行します。

次の表は、通常のアクセススキーマまたは管理アクセススキーマでオブジェクトの権限を管理できるロールを示しています。

ロール

通常のスキーマでオブジェクト権限を付与できます

管理アクセススキーマでオブジェクト権限を付与できます

SYSADMIN

いいえ

いいえ

SECURITYADMIN 以上

はい

はい

データベース所有者

いいえ

いいえ

スキーマ所有者

いいえ

はい

オブジェクト所有者

はい

いいえ

MANAGE GRANTS 権限のある任意のロール

はい

はい

非アカウント管理者の有効化により、従来のウェブインターフェイス内で使用量と請求履歴をモニター

Snowflakeは、データストレージ/転送およびウェアハウスの使用/ロードに関する広範なアカウントの使用量と請求情報を提供します。

Snowsight

Select Admin » Usage

Classic Web Interface

Account Account tab » Billing & Usage をクリックします。

SQL

次のいずれかをクエリします。

デフォルトでは、アカウント管理者のみがこの情報にアクセスし、表示できます。

注釈

現在、 Snowsight は、アカウント管理者に対して使用状況と請求情報のみを表示します。他のロールにこの情報を表示する機能を付与することはできません。

アカウント管理者ではないユーザーがこの情報にアクセス/表示できるようにするには、システム定義またはカスタムのロールに次の権限を付与します。ロールに権限を付与すると、ロールを付与されたすべてのユーザーがこの履歴/使用情報にアクセスできます。

権限

オブジェクト

説明

MONITOR USAGE

アカウント(つまり、グローバル権限)

ロールを付与されたユーザーが、ウェブインターフェイスで使用状況と請求情報を表示し、Information Schemaで対応するテーブル関数をクエリできるようにします。

さらに、この権限を使用すると、 SHOW DATABASES および SHOW WAREHOUSES コマンドは、他の権限の付与に関係なく、アカウント内のすべてのデータベースとウェアハウスのリストをそれぞれ返します。

IMPORTED PRIVILEGES

snowflake データベース

ロールを付与されたユーザーが、使用状況と請求情報を含むビューを含む、すべてのACCOUNT USAGE ビューをクエリできるようにします。

詳細については、 他のロールに対するSnowflakeデータベースの使用の有効化 をご参照ください。

たとえば、これらの権限を custom ロールに付与するには、次を実行します。

GRANT MONITOR USAGE ON ACCOUNT TO ROLE custom;

GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE custom;
最上部に戻る