13 KiB
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コンソールユーザー用のカスタムロールを作成し、一般的なロールを付与するには、次のコマンドを実行します。メールアドレスはコンソール内のユーザーのメールアドレスと一致している必要があります。
- 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;
- 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つのロールに付与された最も多いアクセス権を持っていることになります。ロールを追加することでアクセス権が失われることはありません。
データベースロールは他のロールに付与することができ、階層構造が可能です。ロールは、メンバーであるロールのすべての権限を継承します。
データベースロールはサービスごとにユニークであり、同じサービス内の複数のデータベースに適用することができます。
以下の図は、ユーザーに権限が付与される可能性のある異なる方法を示しています。