ClickHouse/docs/ja/cloud/security/cloud-access-management.md
2024-11-18 11:58:58 +09:00

13 KiB
Raw Blame History

sidebar_label slug title
概要 /ja/cloud/security/cloud-access-management クラウドアクセス管理

ClickHouse Cloudのアクセス制御

ClickHouseはユーザーアクセスをコンソールとデータベースの2つの場所で制御します。コンソールアクセスはclickhouse.cloudのユーザーインターフェースを介して管理されます。データベースアクセスはデータベースのユーザーアカウントとロールを通じて管理されます。さらに、コンソールユーザーはSQLコンソールを介してデータベースとやり取りできるように、データベース内のロールを付与されることがあります。

ロールの種類

利用可能なロールの種類は次のとおりです:

  • コンソールロール clickhouse.cloudコンソールへのアクセスを可能にします
  • データベースロール 単一のサービス内の権限管理を可能にします
  • SQLコンソールロール コンソールユーザーがSQLコンソールを介して割り当てられた権限でデータベースにアクセスできるようにする特別に名付けられたデータベースロール。

定義済みのロール

ClickHouse Cloudは、アクセス管理を可能にするための限られた数の定義済みロールを提供します。追加のカスタムデータベースロールは、データベース内でCREATE ROLEおよびGRANTコマンドを使用していつでも作成できます。

コンテキスト ロール名 説明
コンソール Admin ClickHouse組織への完全アクセス
コンソール Developer ClickHouse組織への読み取り専用アクセス
SQLコンソール sql_console_admin データベースへの管理者アクセス
SQLコンソール sql_console_read_only データベースへの読み取り専用アクセス
データベース default データベースへの管理者アクセス。サービス作成時にdefaultユーザーに自動的に付与される

初期設定

ClickHouse Cloudアカウントを最初に設定したユーザーは、コンソール内で自動的にAdminロールが割り当てられます。このユーザーは、他のユーザーを組織に招待し、AdminまたはDeveloperロールをユーザーに割り当てることができます。

:::note コンソール内でユーザーのロールを変更するには、左側のユーザーメニューに移動し、ドロップダウンでユーザーのロールを変更してください。 :::

データベースには、自動的に追加され、サービス作成時にdefault_roleが付与されたdefaultというアカウントがあります。サービスが作成されたときに、このアカウントのランダムに生成されたパスワードが使用されたユーザーに表示されます。初期設定後はパスワードは表示されませんが、コンソール内で管理者権限を持つユーザーが後で変更することができます。このアカウントまたはコンソール内で管理者権限を持つアカウントは、いつでも追加のデータベースユーザーとロールを設定することができます。

:::note コンソール内でdefaultアカウントに割り当てられたパスワードを変更するには、左側のサービスメニューに移動してサービスにアクセスし、設定タブに移動してパスワードのリセットボタンをクリックしてください。 :::

新しいユーザーアカウントを作成し、そのユーザーにdefault_roleを付与することをお勧めします。これは、ユーザーが行った操作が彼らのユーザーIDに関連付けられ、defaultアカウントが緊急時対応操作用に予約されるためです。

CREATE USER userID IDENTIFIED WITH sha256_hash by 'hashed_password';
GRANT default_role to userID;

ユーザーはSHA256ハッシュジェネレーターまたはPythonのhashlibのようなコード関数を使用して、適切な複雑性を持つ12文字以上のパスワードをSHA256文字列に変換し、システム管理者に提供できます。これにより、管理者がクリアテキストのパスワードを見たり扱ったりすることがなくなります。

コンソールロール

コンソールユーザーにはロールが割り当てられ、AdminまたはDeveloperロールを割り当てることができます。各ロールに関連付けられた権限は以下に含まれています。

コンポーネント 機能 Admin Developer
サービスの管理 サービスを見る
サービスを作成する
サービスを削除する
サービスを停止する
サービスを再起動する
サービスパスワードのリセット
サービスメトリクスを表示
クラウドAPI APIキーの記録を見る
APIキーを作成する Read-Only
APIキーを削除する 自分のキー
コンソールユーザーの管理 ユーザーを見る
ユーザーを招待する
ユーザーロールを変更する
ユーザーを削除する
請求、組織、サポート 請求を見る
請求を管理する
組織活動を見る
サポートリクエストを提出する
統合を見る

SQLコンソールロール

私たちのコンソールには、パスワード無しの認証でデータベースとやり取りするためのSQLコンソールが含まれています。コンソールで管理者権限が付与されたユーザーは、組織内のすべてのデータベースに対する管理アクセス権を持っています。Developerロールが与えられたユーザーにはデフォルトでアクセス権がありませんが、コンソールから“フルアクセス”または“読み取り専用”のデータベース権限が割り当てられる場合があります。“読み取り専用”ロールは最初に読み取り専用アクセスをアカウントに付与します。しかし、読み取り専用アクセスが付与された後、特定のSQLコンソールユーザーのために新しいカスタムロールを作成し、そのユーザーがSQLコンソールを介してデータベースに接続する際に使用されるようにそのユーザーに関連付けることができます。

:::note コンソール内のDeveloperロールを持つユーザーがSQLコンソールにアクセスできるようにするには、左側のサービスメニューに移動し、サービスにアクセスして設定をクリックし、SQLコンソールアクセスセクションまでスクロールし、“フルアクセス”または“読み取り専用”を選択します。アクセス権が付与されたら、以下のSQLコンソールロールの作成で示されているプロセスを使用してカスタムロールを割り当ててください。 :::

パスワードレス認証について

SQLコンソールユーザーは各セッションごとに作成され、自動でローテーションされるX.509証明書を使用して認証されます。セッションが終了するとユーザーは削除されます。監査のためにアクセスリストを生成する場合は、コンソールのサービスの設定タブに移動して、SQLコンソールアクセスとデータベース内に存在するデータベースユーザーを確認してください。カスタムロールが構成されている場合、ユーザーのアクセスはユーザーのユーザー名で終わるロールにリストされます。

SQLコンソールロールの作成

SQLコンソールユーザーに関連付けられたカスタムロールを作成することができます。SQLコンソールはユーザーが新しいセッションを開くたびに新しいユーザーアカウントを作成するため、システムはロール名の命名規則を使用してカスタムデータベースロールをそのユーザーに関連付けます。これにより、それぞれのユーザーに個別のロールが割り当てられます。個別のロールは、GRANT文を通じて直接アクセス権を割り当てることができるか、一般的な新しいロール例えばdatabase_developerやsecurity_administratorを確立し、個別のユーザーロールにその一般的なロールを通じてアクセス権を与えることができます。

SQLコンソールユーザー用のカスタムロールを作成し、一般的なロールを付与するには、次のコマンドを実行します。メールアドレスはコンソール内のユーザーのメールアドレスと一致している必要があります。

  1. database_developerロールを作成し、SHOW、CREATE、ALTER、およびDELETE権限を付与します。
CREATE ROLE OR REPLACE database_developer;
GRANT SHOW ON * TO database_developer;
GRANT CREATE ON * TO database_developer;
GRANT ALTER ON * TO database_developer;
GRANT DELETE ON * TO database_developer;
  1. SQLコンソールユーザーmy.user@domain.comのためのロールを作成し、database_developerロールをそのロールに割り当てます。
CREATE ROLE OR REPLACE `sql-console-role:my.user@domain.com`;
GRANT database_developer TO `sql-console-role:my.user@domain.com`;

このロールの構成を使用すると、ユーザーが存在しない場合にユーザーアクセスを表示するクエリは、ロール対ロールの付与を含めるために修正される必要があります。

SELECT grants.user_name,
  grants.role_name,
  users.name AS role_member,
  grants.access_type,
  grants.database,
  grants.table
FROM system.grants LEFT OUTER JOIN system.role_grants ON grants.role_name = role_grants.granted_role_name
  LEFT OUTER JOIN system.users ON role_grants.user_name = users.name

UNION ALL

SELECT grants.user_name,
  grants.role_name,
  role_grants.role_name AS role_member,
  grants.access_type,
  grants.database,
  grants.table
FROM system.role_grants LEFT OUTER JOIN system.grants ON role_grants.granted_role_name = grants.role_name
WHERE role_grants.user_name is null;

データベースロール

ユーザーとカスタムロールは、CREATE User, CREATE Role, GRANTステートメントを使用してデータベース内で直接作成することもできます。SQLコンソール用に作成されたロールを除き、これらのユーザーとロールはコンソールユーザーとロールとは独立しています。

データベースロールは加算的です。これはつまり、ユーザーが2つのロールのメンバーである場合、ユーザーはその2つのロールに付与された最も多いアクセス権を持っていることになります。ロールを追加することでアクセス権が失われることはありません。

データベースロールは他のロールに付与することができ、階層構造が可能です。ロールは、メンバーであるロールのすべての権限を継承します。

データベースロールはサービスごとにユニークであり、同じサービス内の複数のデータベースに適用することができます。

以下の図は、ユーザーに権限が付与される可能性のある異なる方法を示しています。

Screenshot 2024-01-18 at 5 14 41 PM