KubernetesポリシーAction設定参考ガイド
Overview
QueryPie KACでは、Yaml形式のPolicyを通じてk8sに対するアクセス制御ポリシーを設定します。 この際、Actionに関するガイドを提供し、誤ったポリシー設定によるkubectl、Lens、k9sなどのclient toolの使用に支障が出ないようにします。
API Groups関連設定ガイド
よく使用されるpodsのような場合はapiGroupsがcoreグループであるため""空文字列ですが、deploymentsやreplicasetsは"apps"、ingressesのような場合は"networking.k8s.io"であり、管理者が一つ一つ把握して設定するのは困難です。
もちろん同じresource nameを持つ場合はapiGroupsを通じて分離する必要がありますが、一般的な状況ではありません。
したがって、Kubernetes API Group管理のミッションがない限り、一般的には"*"で設定し、resourcesでアクセス権限を制御する方向で設定することを推奨します。
Resources関連設定ガイド

3rd Party Client Tool - Lens画面
3rd Party Client Tool使用時、許可されたリソース範囲内で現況モニタリングが可能です。
- Resourcesパート
- 上記画面でresourcesは自分が権限を持つリソースのみ表示されます。
- そのため
podsに対する権限だけがあればpodsに対するグラフのみ表示され、podsがフィルタリングされて一部のみ閲覧可能な場合は一部のみ表示されます。 - 他のリソースも同様に動作します。
- 推奨スペック
allow: actions: # Podsのみ許可する場合 - apiGroups: ["*"] resources: ["pods"] namespace: "*" name: "*" verbs: ["get", "list", "watch"]
- Eventsパート
- 下記のevents項目は
eventsリソースに対する権限によって表示されますが、上記のresources項目と同様にnamespace、nameによってフィルタリングされて表示されます。 - ただし、
podsに対する権限があるからといってpods関連のeventsが表示されるわけではないため、該当画面を表示するには明示的にeventsリソースに対する権限を付与する必要があります。 eventsリソースとpodsリソースは互いに分離されたリソースです。したがって、eventsリソースの権限がある状態でpodsに対する権限のみを付与したとしても、eventsの中でpodsに対する内容のみが照会されるわけではありません。- 推奨スペック
allow: actions: # Eventsも一緒に出力を許可する場合 - apiGroups: ["*"] resources: ["pods", "events"] namespace: "*" name: "*" verbs: ["get", "list", "watch"]
- 下記のevents項目は
Verbs関連設定ガイド
3rd Party Client Toolの使用に最も大きな影響を与える部分はverbです。 管理者はapiGroups、resources、namespace、nameを通じてユーザーがアクセスできるリソース範囲を指定し、verbを通じてどのAPIを呼び出せるかを指定します。 リソース範囲を適切に設定したとしてもverbの組み合わせを正しく設定しなければToolの使用が困難になります。
- View権限
- View権限のみを得るユーザーの場合は
get、list、watchをすべて付与する必要があります。 get、listのみでもkubectlの使用に大きな支障はありませんが、watchがなければLensのような現況モニタリングをサポートするツールの使用が困難になります。- 推奨スペック
allow: actions: - apiGroups: ["*"] resources: ["*"] namespace: "*" name: "*" verbs: ["get", "list", "watch"]
- View権限のみを得るユーザーの場合は
- Edit権限
- Edit権限まで得るユーザーの場合はView権限(最低限
get、list)も一緒に付与する必要があります。kubectlでも特定リソースに対する修正リクエストを行うと、まず照会リクエストを行うためです。 - Lensのようなツールでは、View権限がなければEdit画面に移動する方法がありません。
- Editの中でも作成(
create)、修正(patch、update)、削除(delete、deletecollection)のように各役割に合わせてグループ化して付与する必要があります。 deletecollectionは一般的に使用されることは多くありませんが、KACではdeletecollectionでリクエストが来てもユーザーに権限があるリソースのみを選択して削除処理するため、有用に活用できます。- 推奨スペック
allow: actions: # 作成権限 - apiGroups: ["*"] resources: ["*"] namespace: "*" name: "*" verbs: ["get", "list", "create"] # 修正権限 - apiGroups: ["*"] resources: ["*"] namespace: "*" name: "*" verbs: ["get", "list", "patch", "update"] # 削除権限 - apiGroups: ["*"] resources: ["*"] namespace: "*" name: "*" verbs: ["get", "list", "delete", "deletecollection"]
- Edit権限まで得るユーザーの場合はView権限(最低限
その他の推奨設定ガイド
例)prod namespace環境のリソースに対する権限制限
allow:
actions:
- apiGroups: ["*"]
resources: ["*"]
namespace: "dev"
name: "*"
verbs: ["*"]
- apiGroups: ["*"]
resources: ["*"]
namespace: "prod"
name: "*"
verbs: ["get", "list", "watch"]例)prod namespaceに対するsecretアクセス制限
deny:
actions:
- apiGroups: ["*"]
resources: ["secrets"]
namespace: "prod"
name: "*"
verbs: ["*"]