SQL ストレージバックエンドの権限管理
このドキュメントでは、SQL ストレージバックエンドにおける権限の設定と管理について説明します。
はじめに
Helm は権限管理に Kubernetes の RBAC 機能を利用しています。ただし、SQL ストレージバックエンドを使用する場合、Kubernetes の Role ではユーザーが特定のリソースにアクセスできるかどうかを判断できません。このドキュメントでは、これらの権限を作成・管理する方法を説明します。
初期化
Helm CLI が初めてデータベースに接続するとき、クライアントは初期化済みかどうかを確認します。未初期化の場合は、必要なセットアップを自動的に実行します。この初期化には、public スキーマに対する管理者権限、または少なくとも以下の権限が必要です:
- テーブルの作成
- public スキーマに対する権限の付与
データベースに対してマイグレーションを実行した後は、他のすべてのロールでクライアントを使用できます。
PostgreSQL で管理者以外のユーザーに権限を付与する
権限管理のために、SQL バックエンドドライバは PostgreSQL の RLS(Row Level Security: 行レベルセキュリティ)機能を利用しています。RLS により、すべてのユーザーが同じテーブルに対して読み書きできますが、明示的に許可されていない行は操作できません。デフォルトでは、適切な権限が付与されていないロールは、helm list を実行しても空のリストが返され、クラスター内のリソースを取得・変更することはできません。
以下に、特定のロールに特定の namespace へのアクセス権を付与する方法を示します:
CREATE POLICY <name> ON releases_v1 FOR ALL TO <role> USING (namespace = 'default');
このコマンドは、namespace = 'default' の条件を満たすすべてのリソースに対して、ロール <role> に読み取りおよび書き込み権限を付与します。このポリシーを作成すると、ロール <role> としてデータベースに接続しているユーザーは、helm list で default namespace 内のすべての release を確認でき、それらを変更・削除できるようになります。
RLS では、テーブルのカラムに基づいて権限をより細かく管理することも可能です:
- key
- type
- body
- name
- namespace
- version
- status
- owner
- createdAt
- modifiedAt