engal1991 / Docker-Kubernetes

0 stars 0 forks source link

[10장: 보안을 위한 인증과 인가 - ServiceAccount와 RBAC] 10.2 서비스 어카운트와 롤(Role), 클러스터 롤(Cluster Role) #36

Open engal1991 opened 2 years ago

engal1991 commented 2 years ago

서비스 어카운트 체계적으로 권한을 관리하기위한 쿠버네티스 오브젝트

kuberctl get [sa|serviceaccount] kubectl create <service account name> kubectl get services --as system:serviceaccount:default:<service account name>

부여할 권한이 무엇인지 나타내는 쿠버네티스 오브젝트. 네임스페이스에 속하는 오프젝트에 대해 권한 정의

kubectl get role

롤 정의

apiVeresion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: <namespace name>     #
  name: <role name>  #
rules:
- apiGroups: [""]            # 대상이 될 오브젝트의 API Group
  resoures: ["services"] # 대상이 될 오브젝트의 이름
  verbs: ["get", "list"]     # 허용할 동작

롤 바인딩 정의 : 서비스 어카운트와 롤 매핑

apiVersion: rbac.authorication.k8s.io/v1
kind: RoleBinding
metadata:
  name: <role binding name>
  namespace: <namespace name>
subjects:
- kind: ServiceAcount
  name: <service account name>
  namespace: <namespace name>
roleRef:
 kind: Role
  name: <role name>
  apiGroup: rbac.authorization.k8s.io

클러스터 롤 부여할 권한이 무엇인지 나타내는 쿠버네티스 오브젝트. 네임스페이스에 속하지 않는 오프젝트 및 클러스터 전반에 걸친 기능에 대해 권한 정의

kubectl get clusterrole

Role, RoleBinding 정의와 동일하다. kind만 아래와 같이 변경하면 된다. Role -> ClusterRole RoleBinding -> ClusterRoleBinding

여러 개의 크러스터 롤을 조합해서 사용하기 자주 사용되는 클러스처 롤이 있다면 다른 클러스터 롤에 포함시켜 재사용할 수 있다. 이를 클러스터 롤 애그리게이션(aggregation)이라고 한다. 클러스터 롤 애그리게이션을 사용하면 여러 개의 클러스터 롤 권한을 하나의 클러스터 롤에 합쳐서 사용할 수도 있으며, 여러 단계의 클러스터 롤 권한 상속 구조를 만들 수도 있다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: parent-clusterrole
  labels:
    rbac.authorization.k8s.io/aggregation-to-child-clusterrole: "true"
rules:
- apiGroups: [""] 
  resoures: ["nodes"] 
  verbs: ["get", "list"] 
-----------
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: child-clusterrole
aggregationRule:
  clusterRoleSelectors:
  - matchLabels:
        rbac.authorization.k8s.io/aggregation-to-child-clusterrole: "true"
rules: [] # 아무것도 정의하지 않았지만 parent 권한을 상속받았기 때문에 nodes에 대한 get,list 권한이 부여됨.