Kubernetes Role-Based Access Control(RBAC)

рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Role-Based Access Control (RBAC)

рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХрд╛рд░ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ Role-Based Access Control (RBAC) рдЬреЛ API рд╕рд░реНрд╡рд░ рдХреЛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

RBAC рдХреА рдЕрдиреБрдорддрд┐ рдореЙрдбрд▓ рддреАрди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдмрдирд╛ рд╣реИ:

  1. Role\ClusterRole ┬нтАУ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдорддрд┐ред рдЗрд╕рдореЗрдВ рдирд┐рдпрдо рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗрдЯ рдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред рдХреНрд░рд┐рдпрд╛ рд╡рд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧреАред

  2. рд╡рд┐рд╖рдп (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╕рдореВрд╣ рдпрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛) тАУ рд╡рд╣ рд╡рд╕реНрддреБ рдЬреЛ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреАред

  3. RoleBinding\ClusterRoleBinding тАУ Role\ClusterRole рдФрд░ рд╡рд┐рд╖рдп рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рдиред

тАЬRolesтАЭ рдФрд░ тАЬClusterRolesтАЭ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рднреВрдорд┐рдХрд╛ рдХрд╣рд╛рдБ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рдПрдЧреА тАУ тАЬRoleтАЭ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рдкрд╣реБрдВрдЪ рджреЗрдЧреА, рдЬрдмрдХрд┐ тАЬClusterRoleтАЭ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, ClusterRoles рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдХреНрд▓рд╕реНрдЯрд░-рд╕реНрдХреЛрдкреНрдб рд╕рдВрд╕рд╛рдзрди (рдЬреИрд╕реЗ рдиреЛрдбреНрд╕)ред

  • рдЧреИрд░-рд╕рдВрд╕рд╛рдзрди рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ (рдЬреИрд╕реЗ /healthz)ред

  • рдиреЗрдорд╕реНрдкреЗрд╕реНрдб рд╕рдВрд╕рд╛рдзрди (рдЬреИрд╕реЗ рдкреЙрдбреНрд╕), рд╕рднреА рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдореЗрдВред

рдХреБрдмрд░рдиреЗрдЯреАрдЬрд╝ 1.6 рдХреЗ рдмрд╛рдж, RBAC рдиреАрддрд┐рдпрд╛рдБ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВред рд▓реЗрдХрд┐рди RBAC рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options

рдирдореВрдиреЗ

Role рдпрд╛ ClusterRole рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЖрдкрдХреЛ рд░реЛрд▓ рдХрд╛ рдирд╛рдо, рдиреЗрдорд╕реНрдкреЗрд╕ (рд░реЛрд▓ рдореЗрдВ) рдФрд░ рдлрд┐рд░ рд░реЛрд▓ рдХреЗ apiGroups, рд╕рдВрд╕рд╛рдзрди рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  • apiGroups рдПрдХ рдРрд░реЗ рд╣реИ рдЬреЛ рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди API рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреЙрдб рдкрд░рд┐рднрд╛рд╖рдг apiVersion: v1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ rbac.authorization.k8s.io рдпрд╛ [*] рдЬреИрд╕реЗ рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

  • рд╕рдВрд╕рд╛рдзрди рдПрдХ рдРрд░реЗ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рдпрдо рдХрд┐рд╕ рд╕рдВрд╕рд╛рдзрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ: kubectl api-resources --namespaced=true

  • рдХреНрд░рд┐рдпрд╛рдПрдБ рдПрдХ рдРрд░реЗ рд╣реИ рдЬреЛ рдЕрдиреБрдордд рдХреНрд░рд┐рдпрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред Kubernetes рдореЗрдВ рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдмрдХрд┐ "рдкреНрд░рд╛рдкреНрдд" рдПрдХ рдПрдХрд▓ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдЦрд┐рд▓рд╛рдл рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рдпрдо рдХреНрд░рд┐рдпрд╛рдПрдБ

(рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рд▓реА рдЧрдИ рдереА)

HTTP рдХреНрд░рд┐рдпрд╛рдЕрдиреБрд░реЛрдз рдХреНрд░рд┐рдпрд╛

POST

рдмрдирд╛рдПрдБ

GET, HEAD

рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП), рд╕реВрдЪреА (рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд▓рд┐рдП, рдкреВрд░реЗ рд╡рд╕реНрддреБ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде), рджреЗрдЦреЗрдВ (рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕рд╛рдзрди рдпрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП)

PUT

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

PATCH

рдкреИрдЪ рдХрд░реЗрдВ

DELETE

рд╣рдЯрд╛рдПрдБ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП), рд╣рдЯрд╛рдПрдБ (рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд▓рд┐рдП)

рдХрднреА-рдХрднреА Kubernetes рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рд░реАрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • policy API рд╕рдореВрд╣ рдореЗрдВ podsecuritypolicies рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ use рдХреНрд░рд┐рдпрд╛ред

  • rbac.authorization.k8s.io API рд╕рдореВрд╣ рдореЗрдВ roles рдФрд░ clusterroles рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ bind рдФрд░ escalate рдХреНрд░рд┐рдпрд╛рдПрдБред

  • authentication.k8s.io API рд╕рдореВрд╣ рдореЗрдВ users, groups, рдФрд░ serviceaccounts рдкрд░ impersonate рдХреНрд░рд┐рдпрд╛, рдФрд░ authentication.k8s.io API рд╕рдореВрд╣ рдореЗрдВ userextrasред

рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдБ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ kubectl api-resources --sort-by name -o wide

рдЙрджрд╛рд╣рд░рдг

Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: defaultGreen
name: pod-and-pod-logs-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list", "watch"]
ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ ClusterRole рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХреЗ:

kubectl get pods --all-namespaces

RoleBinding рдФрд░ ClusterRoleBinding

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ: рдПрдХ role binding рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рдХреЛ рдПрдХ рднреВрдорд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╡рд┐рд╖рдпреЛрдВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╕рдореВрд╣, рдпрд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ) рдХреА рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рдФрд░ рджреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднреВрдорд┐рдХрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИред рдПрдХ RoleBinding рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рднреАрддрд░ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдПрдХ ClusterRoleBinding рдЙрд╕ рдкрд╣реБрдВрдЪ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░-рд╕реНрддрд░ рдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

piVersion: rbac.authorization.k8s.io/v1
# This role binding allows "jane" to read pods in the "default" namespace.
# You need to already have a Role named "pod-reader" in that namespace.
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
# You can specify more than one "subject"
- kind: User
name: jane # "name" is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
# "roleRef" specifies the binding to a Role / ClusterRole
kind: Role #this must be Role or ClusterRole
name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
apiGroup: rbac.authorization.k8s.io
ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io

рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ "рд╕реВрдЪреА" рдФрд░ "рд╣рдЯрд╛рдПрдВ" рд░рд╣рд╕реНрдп рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ clusterRole рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ "рдкреНрд░рд╛рдкреНрдд" рд░рд╣рд┐рдд Role рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдФрд░ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрдордд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд╖реЗрдзрд┐рдд рд╣реИред

RBAC рдХреА рдЧрдгрдирд╛

# Get current privileges
kubectl auth can-i --list
# use `--as=system:serviceaccount:<namespace>:<sa_name>` to impersonate a service account

# List Cluster Roles
kubectl get clusterroles
kubectl describe clusterroles

# List Cluster Roles Bindings
kubectl get clusterrolebindings
kubectl describe clusterrolebindings

# List Roles
kubectl get roles
kubectl describe roles

# List Roles Bindings
kubectl get rolebindings
kubectl describe rolebindings

рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛/рдХреНрд▓рд╕реНрдЯрд░ рднреВрдорд┐рдХрд╛рдПрдБ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░реЗрдВ

Abusing Roles/ClusterRoles in Kubernetes
рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated