RBAC Instance Role

Hoju·2022년 8월 25일
0
post-custom-banner

Object - https://nice-engineer.tistory.com/entry/Kubernetes-Kubernetes-Objects%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8?category=1051451#1.8.%20%E2%9C%94%EF%B8%8F%20Resource%20Limits

참고 - https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-iam-permissions-namespaces/

참고2 - https://dev.to/aws-builders/eks-auth-deep-dive-4fib

꼭 명심하자. Root 계정으로 Cluster를 생성하고 Bastion Instance에 aws configure을 사용해서 Root 자격 증명을 업데이트 해준다음 aws eks kubeconfig를 해줘야한다

  • Binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: wsi-skills-namespace
subjects:
# You can specify more than one "subject"
- kind: User
  name: BastionHostRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" specifies the binding to a Role / ClusterRole
  kind: Role #this must be Role or ClusterRole
  name: skills # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io
  • role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: wsi-skills-namespace
  name: skills
rules:
- apiGroups: ["*"] # "" indicates the core API group
  resources: ["*"]
  verbs: ["*"]
  • aws auth-config
apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::xxxxxxxxxxxxx:role/eksWorkerNodeRole
      username: system:node:{{EC2PrivateDNSName}}
      rolearn: arn:aws:iam::xxxxxxxxxxxxx:role/BastionHostRole
      username: BastionHostRole
kind: ConfigMap
metadata:
  creationTimestamp: "2022-08-17T15:21:43Z"
  name: aws-auth
  namespace: kube-system
  resourceVersion: "2822"
  uid: 7d7ba317-3df7-4fe7-a153-479d0b71db4a

설명을 좀 더 나누겠습니다
먼저 role.yaml 파일 부분이 핵심입니다.

rules를 통해서 권한을 해당 User에게 부여할 수 있는 것입니다.

  • apiGroups: 예를 들어 Pod이면 v1이기 때문에 ""로 표시하고 deployment는 apps/v1이기 때문에 apiGroups에 "apps"로 지정해야합니다. 즉, apiGroups는 해당 Object에 ApiGroup입니다.

  • resources: 리소스는 말 그대로 deployments, pods, namespaces, service 등을 말합니다. 리소스는 pods뿐만 아니라 하위 리소스도 지정할 수 있습니다. pods/log 이런식으로 말이죠 근데 너무 깊게는 생각안하셔도 됩니다.

  • resourceNames: 이 부분은 안 넣었긴 하지만, 예를 들어 deployment Object에 이름이 front-apps-deployment라고 가정했을 합니다. 그때 이렇게 정의할 수 있습니다. resourceNames: ["front-apps-deployment"] 즉, 해당 이름을 가지고 있는 Deployment에 대한 권한을 부여하는 것 입니다.

  • verbs는 행동을 말합니다. list, get, delete, edit 등을 말이죠

profile
Devops가 되고 싶은 청소년
post-custom-banner

0개의 댓글