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
'IT > AWS' 카테고리의 다른 글
[AWS] Instance scheduler 적용하기 (자동 stop/start) (0) | 2023.12.22 |
---|---|
[AWS] VPC 피어링간 s3 endpoint 통신 방법 (2) | 2023.11.09 |
[AWS] Cluster Autoscaler의 주요 옵션들(CA deep dive) (0) | 2022.10.07 |
[AWS] EC2 Default Region 설정하기 (feat. vpc endpoint) (2) | 2022.10.05 |
[FinOps] 오픈소스 Bill bot 사용기 (슬랙으로 AWS비용 레포트 받는법) (0) | 2022.09.16 |