説明
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で関連付けると、名前空間をまたいだ権限になります。