アクセス制御は、すべてのデータベース環境における重要な概念の1つです。この記事では、Snowflakeロールベースのアクセス制御(RBAC)と、カスタムロールを作成し、SnowflakeWebUIからSnowSQLCLIクライアントを使用してロールへのアクセスを許可する方法について学習します。
1。ロールベースのアクセス制御(RBAC)とは何ですか?
スノーフレーク さまざまなデータベースオブジェクトへのアクセスとセキュリティプリンシパル(ユーザー、サービスなど)へのアクションを許可または拒否するためのメカニズムとしてロールベースアクセス制御(RBAC)を提供します。
2。役割とは何ですか?
ロールは、保護可能なオブジェクトに対する権限を付与および取り消すことができるエンティティです。ユーザーには、組織のビジネス機能に必要なアクティビティを実行できるようにするための役割が割り当てられます。
ユーザーには、いくつかの役割を割り当てることができます。ユーザーは役割を交換して、さまざまな権限セットでさまざまなタスクを実行できます。
ロールを他のロールに割り当てることもできます。これにより、ロール階層が作成されます。カスタムロールは、適切なアクセス権を持つユーザーが作成できます。階層内のその位置より上のすべてのロールは、そのロールに関連付けられた特権を継承します。
Snowflakeアカウントには、組み込みのシステム定義の役割がいくつかあります。システムによって定義された役割を削除したり、これらの役割に割り当てられた特権を取り消すことはできません。
システム定義の役割は5つあり、Snowflakeは、各システムの役割が果たすべき「役割」と、ユーザーが従うべき「役割」を決定します。
- ACCOUNTADMIN: ACCOUNTADMINポジションは、SYSADMINとSECURITYADMINの責任を1つにまとめたものです。
- ORGADMIN: 組織レベルでは、これは運用を管理する役割です。
- SECURITYADMIN: この役職は、ユーザーと役割の監視と管理を担当します。
- USERADMIN: この役職は、役割とユーザーの作成を担当しています。
- SYSADMIN: アカウントでは、この役割には、ウェアハウス、データベース、およびその他のオブジェクトを構築する機能があります。 SYSADMINは、すべてのカスタムロールをロールアップすることになっています。
- 公開: これは、アカウント内のすべてのユーザーと役割に自動的に割り当てられる役割です。
これらのシステム定義の役割とは別に、要件に応じて役割を作成し、その役割に特権を割り当てることができます。これはカスタムロールと呼ばれます 。
3。役割の階層と特権の継承
次の図は、システム定義の役割がどのように階層化され、カスタムの役割をシステム定義の役割に関連付けることができるかを示しています。
ORGADMINは、組織全体の運用を監督する別個のシステムの役割です。システムの役割の階層には、この役割は含まれていません。
役割の階層と特権の継承の例:
上記の例では、
- 役割2は特権「選択」を継承します。
- ロール1は、権限「選択」および「作成」を継承します。
- ユーザー1には役割-1が割り当てられています。これは、3つの特権すべてを意味します。
- ユーザー2には役割2が割り当てられています。これは、「選択」および「作成」権限を意味します。
注: ユーザーがシステム内のオブジェクトに対して実行できるアクション/操作を決定するために、特権がロールに付与され、ロールがユーザーに付与されます。
4。カスタムロールを作成する方法
ここでは、前に説明したカスタムロールを作成します。 SnowflakeのWebUIから、または SnowSQL CLIを使用してルールを作成できます クライアント。まず、グラフィカルな方法を見ていきます。
4.1。 SnowflakeWebUIからロールを作成する
SnowflakeUIでシステム定義の役割を表示できます。 Snowflake-UI🡪アカウント🡪役割に移動します 。
'dev_ostechnix'という名前の新しいロールを作成します 。これを行うには、Snowflake-UI🡪アカウント🡪ロール🡪作成に移動します 。
役割名を入力し、親の役割を選択して、この役割についてコメントします。
「完了」ボタンを押すと、新しいロール「dev_ostechnix」が作成されます。
このカスタムロールは、システム定義のロール'ACCOUNTADMIN'を使用して作成しました。 。現在、この役割が付与されているユーザーはいません。親ロールはSYSADMINであるため、ロール'dev_ostechnix'が'SYSADMIN'に付与されます。 。
4.2。 SnowSQLを使用してコマンドラインからロールを作成する
以下のコマンドを使用して、SnowflakeをSnowSQLに接続します。
# snowsql -a uz64318.southeast-asia.azure -u OSTECHNIX
アカウントのパスワードを入力してください:
Password: * SnowSQL * v1.2.21 Type SQL statements or !help OSTECHNIX#[email protected](no database).(no schema)>
ACCOUNT ADMINはスーパー特権の役割であり、この役割でログインしました。次に、ACCOUNTADMINロールによってカスタムロールを作成します。
以下のコマンドを使用して、現在の役割を確認できます。
OSTECHNIX#[email protected](no database).(no schema)>select current_role(); +----------------+ | CURRENT_ROLE() | |----------------| | ACCOUNTADMIN | +----------------+ 1 Row(s) produced. Time Elapsed: 0.133s OSTECHNIX#[email protected](no database).(no schema)>
ロールを作成します'TEST_OSTECHNIX' コメント付き「テスターの役割」 以下のコマンドを使用します。
OSTECHNIX#[email protected](no database).(no schema)>CREATE ROLE "TEST_OSTECHNIX" COMMENT = 'tester role';
出力例:
+-------------------------------------------+ | status | |-------------------------------------------| | Role TEST_OSTECHNIX successfully created. | +-------------------------------------------+ 1 Row(s) produced. Time Elapsed: 0.753s OSTECHNIX#[email protected](no database).(no schema)>
以下のコマンドを使用して、役割を表示できます。
OSTECHNIX#[email protected](no database).(no schema)>show ROLES;
現在のところ、ロール「TEST_OSTECHNIX」には権限が付与されていません。
以下のコマンドを使用して、助成金を確認してください。
OSTECHNIX#[email protected](no database).(no schema)>show grants to role TEST_OSTECHNIX;
5。ロールに特権を付与する
各オブジェクトカテゴリには、独自の特権セットがあります。たとえば、「仮想倉庫」には以下の権限があります。
- 変更: Warehouseのプロパティを変更できます。
- モニター: ウェアハウスで実行されているクエリと、ウェアハウスの統計の使用状況を監視できます。
- 操作: 停止、開始、一時停止、再開などのウェアハウスの状態を変更できます。また、ウェアハウスで過去と現在のクエリを表示し、クエリを中止することもできます。
- 使用法: ウェアハウスの使用を許可します。つまり、ウェアハウスでクエリを実行できます。
- 所有権: ウェアハウスの完全な制御を可能にします。一度に1つのロールのみがオブジェクトに対してこの特権を持つことができます。
- すべて: 所有権を除くすべての特権を許可します。
ここでは、オブジェクトの特権を付与しています'仮想ウェアハウス' 上で作成した役割に。
5.1。 SnowflakeWebUIからロールに特権を付与する
ロールがロールに付与されている場合は、ロールを切り替えることができます。 ACCOUNT ADMINの役割を使用しているため、スーパーコントロールがあります。 アカウントの下のオプションをクリックして、役割を切り替えます 右上隅にあります。
これで、「アカウント管理者」の役割になります。システム内のウェアハウスに対するすべての特権があります。
ロールを切り替えるとすぐに、ロール'DEV_OSTECHNIX'がシステム内のウェアハウスを表示できないことがわかります。ロール「DEV_OSTECHNIX」には特権がありません。
特権を付与するには、ユーザーは、役割を付与する特権を持つ役割に切り替える必要があります。 ACCOUNT_ADMINを使用しているため、ACCOUNT_ADMINに切り替えて、ロールDEV_OSTECHNIXに特権を付与しています。
特権を提供するウェアハウスの行を選択すると、右側にプロビジョニング特権のポップアップが表示されます。
現在、特権は付与されていません。 [権限の付与]をクリックして、役割に権限を付与します。
付与する特権を選択し、その特権を付与する役割を選択します。 +をクリックできます 右上の記号は、付与する特権を追加します。
ここでは、役割DEV_OSTECHNIXにMODIFYおよびOPERATE特権を付与しています。
役割をDEV_OSTECHNIXに切り替えることで、特権を確認できます。
5.2。 SnowSQLCLIクライアントを使用してロールに特権を付与する
付与する特権を持っている必要がある役割にいることを確認してください。ここでは、このデモでACCOUNT_ADMINを使用しています。
OSTECHNIX#[email protected](no database).(no schema)>select current_role(); +----------------+ | CURRENT_ROLE() | |----------------| | ACCOUNTADMIN | +----------------+ 1 Row(s) produced. Time Elapsed: 0.133s OSTECHNIX#[email protected](no database).(no schema)>
以下の「show」コマンドを使用して、システムで使用可能なウェアハウスを表示します。
OSTECHNIX#[email protected](no database).(no schema)>show WAREHOUSES;
役割をTEST_OSTECHNIXに切り替えます。
OSTECHNIX#[email protected](no database).(no schema)>use role TEST_OSTECHNIX;
ウェアハウスを表示するだけで、ウェアハウスの権限を確認します。
現在のところ、役割TEST_OSTECHNIXには特権が付与されていません。
特権を付与するには、ロールACCOUNT_ADMINに戻ります。
OSTECHNIX#(no warehouse)@(no database).(no schema)>use role ACCOUNTADMIN;
ウェアハウス「OSTECH_DEMO_3」の権限をロールTEST_OSTECHNIXに付与します。
OSTECHNIX#[email protected](no database).(no schema)>grant MODIFY, OPERATE on warehouse OSTECH_DEMO_3 to role TEST_OSTECHNIX;
役割TEST_OSTECHNIXに切り替えて、特権を確認します。
OSTECHNIX#[email protected](no database).(no schema)>use role TEST_OSTECHNIX;
OSTECHNIX#(no warehouse)@(no database).(no schema)>show WAREHOUSES;
これで、ロールTEST_OSTECHNIXがWarehouse OSTECH_DEMO_3を表示でき、それが一時停止状態になっていることを確認できます。
以下のコマンドを使用してウェアハウスを起動します。
OSTECHNIX#(no warehouse)@(no database).(no schema)>alter WAREHOUSE OSTECH_DEMO_3 RESUME;
'show'コマンドを使用してステータスを確認します。
これで、役割TEST_OSTECHNIXにウェアハウスOSTECH_DEMO_3に対する権限が付与されていることを確認できます。
注: SnowSQL CLIで使用しているクエリが何であれ、WebUIで利用可能なSnowflakeワークシートでも同じものを使用できます。
結論
この記事では、Snowflakeでの役割ベースのアクセス制御(RBAC)について説明しました。 RBACが単にロールを作成し、オブジェクト「仮想ウェアハウス」のロールに特権を付与することを示しました。
同様に、データベース、テーブルなどの他のオブジェクトへのアクセスをプロビジョニングできます。ユーザー管理とユーザーへのアクセスのプロビジョニングについては、次の記事で詳しく説明します。