SQLストレージバックエンドの権限管理

このドキュメントは、SQLストレージバックエンドを使用する際の権限の設定と管理について、ユーザーにガイダンスを提供することを目的としています。

概要

Helmは、権限を処理するために、KubernetesのRBAC機能を活用しています。SQLストレージバックエンドを使用する場合、Kubernetesのロールを使用して、ユーザーが特定のリソースにアクセスできるかどうかを判断することはできません。このドキュメントでは、これらの権限を作成および管理する方法を示します。

初期化

Helm CLIが初めてデータベースに接続するとき、クライアントはデータベースが事前に初期化されていることを確認します。初期化されていない場合、必要な設定を自動的に行います。この初期化には、publicスキーマに対する管理者権限、または少なくとも以下のことができる必要があります。

  • テーブルを作成する
  • publicスキーマに権限を付与する

データベースに対してマイグレーションが実行された後、他のすべてのロールでクライアントを使用できます。

PostgreSQLで管理者以外のユーザーに権限を付与する

権限を管理するために、SQLバックエンドドライバはPostgreSQLのRLS(行セキュリティレベル)機能を活用しています。RLSを使用すると、すべてのユーザーが同じテーブルから読み取り/書き込みを行うことができますが、明示的に許可されていない限り、同じ行を操作することはできません。デフォルトでは、適切な権限を明示的に付与されていないロールは、helm listを実行すると常に空のリストが返され、クラスター内のリソースを取得または変更できません。

特定のネームスペースへのアクセス権限を特定のロールに付与する方法を見てみましょう。

CREATE POLICY <name> ON releases_v1 FOR ALL TO <role> USING (namespace = 'default');

このコマンドは、namespace = 'default'条件を満たすすべてのリソースを読み取りおよび書き込みする権限を、ロールroleに付与します。このポリシーを作成した後、ロールroleの代わりにデータベースに接続しているユーザーは、helm listを実行するときにdefaultネームスペースにあるすべてのリリースを表示し、それらを変更および削除できます。

権限はRLSを使用してきめ細かく管理できます。テーブルの異なる列に応じてアクセスを制限することに関心があるかもしれません。

  • キー
  • タイプ
  • 本文
  • 名前
  • ネームスペース
  • バージョン
  • ステータス
  • 所有者
  • 作成日時
  • 変更日時