들어가기 전
사실 이 일은 처음 겪었던 것이 아니다. 전에도 겪었지만 어찌어찌(어떻게 해결된지모르게) 넘어간 케이스였다..
그 때의 상황은 회사 프로젝트 EKS 만 사용하다가 외주 프로젝트 EKS 를 연결하여 사용해야되는 상황이였다.
AWS profile 에 외주 프로젝트에 접근할 수 있는 키들을 입력해두었고, 외주 프로젝트 EKS 에 붙으려고하니 arn 관련 오류가 발생했었다.
그 때 확실하게 알고 넘어갔다면 오늘 이러한 실수를 반복하지 않았겠지..
오늘 겪은 상황도 위와 케이스가 비슷하다 외주프로젝트를 연결하여 사용하다가 개인프로젝트를 AWS 에 등록하고나서 발생한 문제다.
에러가 뭔데?
1) An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::480xxxxxxxx:user/xxxxx is not authorized to perform: sts:AssumeRole on resource: arn:aws:eks:ap-northeast-2:217xxxxxxxxx:cluster/xxxxxxxx
2) error: You must be logged in to the server (Unauthorized)
1번 에러를 보면 아주 강력한 힌트를 얻을 수 있다.
내가 접속하려는 외주 프로젝트의 리소스 주소는 217...로 시작하는데 내가 설정되어있는 주소는 480..(개인프로젝트) 로 설정되어있으니 될리가 없다.
해결하는 과정
구글링을해서 aws sts get-caller-identity 라는 명령어를 알아냈고,
출력결과 arn:aws:iam::480xxxxxxxxx:user/xxxxx 를 확인할 수 있었다. 그래도 난 감을 잡지 못했다 aws sts 가 뭔데?
AWS sts 란
정말 간단하게 말하면 인증 정보를 본인이 설정한 리전에 있는 서버(?) 에 세션을 캐쉬(?) 처럼 등록해 두는 것이다.
sts 를 사용하는 이유는 인증하는데 있어 지연을 최소화 할 수 있기 때문이라고 한다.
sts 를 생성할 때 세션을 얼마나 유지할 수 있는지 설정할 수 있는 것을 보면
S3 를 cdn 서버와 연결하는 것과 비슷한 개념이지 않을까 라는 생각이 들었다.
좋아! 그럼 sts 에 user/xxxxx 를 내가 접속하려는 외주 arn 주소로 변경하면 되겠다!
라고 생각했지만 변경할 수 있는 방법은 찾을 수가 없었다.
그래서 aws profile 을 현재 무엇을 사용하고 있는지를 확인해보기로 했다.
나는 항상 명령어를 사용할 때 —profile <profile_name> 으로 사용했는데
AWS CLI 에서 기본적으로 사용하는 프로필은 뭘까? 라는 생각이 들었다.
환경변수...너였니?
aws configure list 라는 명령어로 현재 사용하고 있는 프로필을 확인할 수 있었다.
유레카 여기에 내 개인프로젝트가 설정되어있던 것이다.
나는 환경변수를 사용하여 AWS_PROFILE 을 지정하였는데 access_key 와 secret_key 가 프로필에 맞는 키로 변경되지 않았다.
아차차...내가 개인프로젝트를 하면서 환경변수를 설정해두었구나..
[!] AWS 에서 Default 로 설정되어있으면 알아서 사용하는 환경변수들이 있다.
설정되어 있으면 편리한 면이 더욱 더 많지만 나 같은 초보들은 왜 설정 해두고 까먹은 것 일까.. 익숙치 않아서 그렇다고 위안을 삼고 환경변수를 없애주고 사용하니 잘 작동한다.. jenkins X 를 통해 context 를 변경하는데 잘 되는 것을 보니 잘 해결된 것 같다.
정리
여러개의 AWS 를 동시에 관리할 때는 AWS CLI 를 사용할 때 항상 어떠한 프로필이 Default 로 잡혀 사용하고 있는지 확인해야 한다.
이번에 겪은 케이스를 봤을 때 가장 마지막에 등록한 정보(AWS)가 Default 로 잡히는 것 같고,
sts 도 현재 설정 된 Profile 로 생성되는 것 같다. AWS 에서 자동으로 인식하는 환경변수에 대한 이해도가 떨어져서 default profile 을 설정해도 키 값들이 환경변수에 설정한 값들이 들이가는 기이한 현상도 경험했다.
'Devops' 카테고리의 다른 글
| 주니어 개발자의 Argo Workflow, Events 사용기 - 2 (2) | 2021.02.07 |
|---|---|
| Argo Workflow 란 무엇인가? - 1 (0) | 2021.01.09 |
| Docker Ubuntu18.04 java (jdk, jre)설치 및 오류해결 (0) | 2020.08.13 |
| Argo Workflow failed to save outputs: Failed to establish pod watch: unknown (get pods) Error (0) | 2020.07.23 |
| istio 정리 (0) | 2020.06.08 |
댓글