真题解析
题目

Context
绑定到 Pod 的 ServiceAccount 的 Role 授予过度宽松的权限,完成以下项目以减少权限集。
Task
一个名为 dev-pod 的现有 Pod 已在 namespace monitoring 中运行。
编辑绑定到 Pod 的 ServiceAccount service-account-web 的现有 Role,仅允许只对 pods 类型的资源执行 get 操作。
在 namespace monitoring 中创建一个名为 role-2 ,并仅允许对 statefulsets 类型的资源执行 update 操作的新 Role。
创建一个名为 role-2-binding 的新 RoleBinding,将新创建的 Role 绑定到 Pod 的 ServiceAccount。
解析
查询 SA service-account-web 绑定的是哪个 Role(若没有可以直接 kubectl get role -n monitoring)
kubectl get rolebinding -n monitoring -o yaml | grep -i service-account-web -C 6
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: web-role
subjects:
- kind: ServiceAccount
name: service-account-web
namespace: monitoring
kind: List
metadata:
resourceVersion: ""根据查询到的 Role ,编辑 Role 的权限
kubectl edit role web-role -n monitoring
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: "2024-07-30T14:18:32Z"
name: web-role
namespace: monitoring
resourceVersion: "270816"
uid: 012f6805-d8c7-458e-8657-4ab727504a0b
rules:
- apiGroups:
- "" # 根据 kubectl api-resources 查看所操作资源具体属于哪个 API 组
resources:
- pods
verbs:
- get
# - watch # 删除此项
# - list # 删除此项创建 role-2
# vim role-2.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: monitoring
name: role-2
rules:
- apiGroups: ["apps"] # "" 标明 core API 组
resources: ["statefulsets"]
verbs: ["update"]
kubectl create -f role-2.yaml
# kubectl create role role-2 --verb=update --resource=statefulsets -n monitoring创建 role-2-binding
kubectl create rolebinding role-2-binding \
--role=role-2 \
--serviceaccount=monitoring:service-account-web \
-n monitoringLast updated