본문으로 바로가기

[AWS] EKS 트러블 슈팅 (aws-auth 권한 추가 이슈)

category IT/AWS 2023. 2. 9. 17:29
반응형

Intro

aws eks cluster는 aws-auth 라는 configmap을 사용해서 cluster접근 권한을 컨트롤 합니다. 오늘은 aws-auth로 권한을 추가할때 할때 실수 할 수 있는 부분을 공유해보고자 합니다.

사건의 발생..

특정 eks cluster node 위에 jenkins pod 를 statefulset 자원으로 생성해두고 특정 jenkins job에서 kubectl을 사용하는데, 아래와 같이 k8s 자원에 권한이 없다는 에러가 나와서 aws-auth에 권한을 추가하였습니다.

kubectl get ns 

Error from server (Forbidden): namespaces is forbidden: User "system:node:ip-1-1-1-1.ap-northeast-2.compute.internal" cannot list resource "namespaces" in API group "" at the cluster scope

aws-auth에 권한 추가

aws-auth를 보면 eks가 자동으로 노드에 붙어있는 iam role을 갖고 system:bootstrappers 와 system:nodes 그룹을 추가 해줍니다. 저는 이 권한으로 충분하지 않아서 아래와 같이 system:masters 권한을 추가해주었는데요

apiVersion: v1
data:
  mapAccounts: |
    - "012345678912"
  mapRoles: |
####### 추가한 권한 #######
    - groups:
      - system:masters
      rolearn: arn:aws:iam::012345678912:role/example
      username: system:node:{{EC2PrivateDNSName}
####### 원래 있던 권한 #######
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::012345678912:role/example
      username: system:node:{{EC2PrivateDNSName}}
  mapUsers: |
    - groups:
      - system:masters
      userarn: arn:aws:iam::012345678912:user/example
      username: example
kind: ConfigMap
metadata:
.... omit

여전히 안됀다…이유는..?

여전히 권한 에러가 발생하였습니다. 혹시 뭐가 잘못 되었는지 예상 되시나요???

네 예상하신대로 동일한 username의 권한 처리가 두번 되어있어서 add 되는 형태가아니라 순서대로 overwrite가 되고 있었습니다. 만약에 system:masters 권한을 다음과 같이 가장 아래에 두었다면 문제가 해결되었겠지만 위에 넣다보니 system:bootstrappers 와 system:nodes 권한으로 다시 덮어쓰기가 되고 있던거죠.

apiVersion: v1
data:
  mapAccounts: |
    - "012345678912"
  mapRoles: |
####### 원래 있던 권한 #######
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws:iam::012345678912:role/example
      username: system:node:{{EC2PrivateDNSName}}
####### 추가한 권한 #######
    - groups:
      - system:masters
      rolearn: arn:aws:iam::012345678912:role/example
      username: system:node:{{EC2PrivateDNSName}
  mapUsers: |
    - groups:
      - system:masters
      userarn: arn:aws:iam::012345678912:user/example
      username: example
kind: ConfigMap
metadata:
.... omit

어떻게 해결했나

결과적으로 아래와 같이 해결하였습니다. aws supportf를 통해서 aws-auth내용을 공유해주었으나 계속 헛다리만 짚더 군요..ㅠㅠ 결국 스스로 해결하게 돼었는데요. 혹시 저와 같은 에러를 겪은 분들이 있으시다면 도움이 되었으면 좋겠습니다.

apiVersion: v1
data:
  mapAccounts: |
    - "012345678912"
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      - system:masters ### 여기에 추가
      rolearn: arn:aws:iam::012345678912:role/example
      username: system:node:{{EC2PrivateDNSName}}
  mapUsers: |
    - groups:
      - system:masters
      userarn: arn:aws:iam::012345678912:user/example
      username: example
kind: ConfigMap
metadata:
.... omit
반응형