真题解析

题目

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 monitoring

Last updated