ワイルドカード権限を含む Kubernetes RBAC ルール

Kubernetes RBAC の不要なワイルドカードを具体的な権限に置き換え、ロールのバインディングの適用範囲も確認します。

説明

Kubernetes RBAC では、Role または ClusterRole の apiGroups、resources、verbs に指定した * は、そのフィールドのすべての値を意味します。このようなワイルドカードは、ほかのフィールドやバインディングによっては、必要以上のアクセス権を与える可能性があります。

1 つのフィールドに * があっても、クラスター全体のすべてのリソースに対する全操作が許可されるわけではありません。実際の権限は、ほかのルール項目、RoleBinding または ClusterRoleBinding、適用先の名前空間によって決まります。リソースや操作のワイルドカードは、将来追加される対象まで許可することもあります。

想定される影響

  • 関連付けられたユーザーやサービスアカウントに、不要な読み取り・変更・削除権限が付与される可能性があります。
  • アカウントやワークロードが侵害されると、バインディングの範囲内で権限を悪用されるおそれがあります。
  • 新しいリソースや操作が追加されたとき、ロールを変更していなくても権限が意図せず広がる可能性があります。

対処方法

  • 不要な * を削除し、必要な API グループ、リソース、操作を明示してください。
  • ロールの用途を確認し、RoleBinding と ClusterRoleBinding の対象と適用範囲を見直してください。
  • サービスアカウントで必要な操作ができ、不要な操作は拒否されることを確認してください。

例

二つの例は、ワイルドカードによる権限と、操作を明示した権限を比較しています。ロールの種類や名前空間も異なるため、一つ目の設定を二つ目の設定でそのまま置き換えないでください。実際の ClusterRole 定義では metadata.namespace を省略し、バインディングによって適用範囲を決めてください。

ワイルドカードを使用した Role

yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: rbac2
  name: configmap-modifier
rules:
  - apiGroups: ["*"]
    resources: ["*"]
    verbs: ["*"]

操作を明示した ClusterRole

yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: opa
  name: configmap-modifier
rules:
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["update", "patch"]

説明:

  • ワイルドカードを使用した Role: apiGroups、resources、verbs がすべて * です。ただし、この Role で付与される権限は、バインディングの名前空間によっても制限されます。
  • 操作を明示した ClusterRole: コア API グループの configmaps に対する update と patch だけを指定しています。この権限が必要かは別途確認が必要です。ClusterRoleBinding で関連付けると、名前空間をまたいだ権限になります。

参考資料