일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 회고
- LAMBDA
- Leetcode
- 알고리즘
- 아키텍처
- 맥주
- finops
- 2020년
- Kafka
- ddd
- 메세지큐
- amqp
- zookeeper
- github pages
- billing
- AWSKRUG
- 도메인 주도 설계
- 하이트진로
- HEXO
- 노션
- 머신러닝
- React
- API Gateway
- 백준
- S3
- Zappa
- AWS
- serverless
- CloudWatch
- Notion
- Today
- Total
인생은 고통의 연속
맥에서 AWS STS + CodeCommit 사용하기 본문
이 글은 맥북에서 테스트하고 작성된 글입니다
윈도우는 다를 수도 있습니다
AWS STS란?
AWS Security Token Service의 준말이다.
쉽게 말하자면 임시 보안 자격 증명으로 AWS 리소스에 대한 액세스를 제어하는 것이고
코드레벨로 말하자면 Access/Secret Key을 그대로 쓰는것이 아니라 MFA와 함께 사용하여
임시 Access/Secret key으로 AWSCLI를 사용하는 것이다
즉, 임시토큰이라고 보면 된다
STS / MFA는 왜쓰는가?
보통 회사계정은 iam user 에 대해서 MFA를 강제로라도 사용하게끔 한다
(설정하는법 : docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/tutorial_users-self-manage-mfa-and-creds.html#tutorial_mfa_step1)
왜냐? MFA를 사용하지 않고 그냥 사용한다면
혹시나 Access/Secret Key가 유출될 경우, 아래와 같이 으마으마한 일이 발생한다
blog.naver.com/awesomedev/220716804533
MFA를 쓰면 아래 이미지처럼 콘솔에 로그인할때 30초마다 갱신되는 코드값을 입력을 해야되므로 보안이 한단계 올라간다
근데 여기서 문제는 무엇이냐...
바로 AWSCLI를 쓸때도 위와 같이 토큰을 입력해줘야된다는 것이다
AWS계정의 인프라를 담당하는 담당자라면 매일 이 토큰을 입력해야되는 매우 귀찮은일을 해야된다
하지만 터미널에서 이런 인증 방식을 웹처럼 따로 로그인 페이지에 접속할 수 없으니
STS를 사용해서 임시토큰 생성하여 인증관리를 한다
AWSCLI사용법
AWSCLI 설치는 쉽다. 그냥 여기 링크에서 본인 OS에 맞게 다운받아서 설치하면 된다
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2.html
그리고 aws configure로 자기 Access/Secret Key를 입력해주면 되는데
STS를 사용할거기 때문에 default 프로파일이 아닌 별도의 프로파일로 생성해야된다
난 test 라는 이름으로 프로파일을 생성했다
왜 굳이 default 프로파일을 안썼는지는 후술하겠다
STS설정법(정석)
당연히 STS도 설정하는 가이드가 있다
https://aws.amazon.com/ko/premiumsupport/knowledge-center/authenticate-mfa-cli/
하지만 보통 이걸 쓰지 않는다
왜냐하면, 아래 가이드를 보면 터미널에서 뜨는 토큰값을 수작업으로
환경변수로 넣어주거나 별도의 스크립트를 짜야되기 때문이다
그래서 요즘은 굳이 이 방식을 쓰지 않는다
오픈소스로 이걸 자동화해주는 녀석이 널렸기 때문에 직접하지 않고 라이브러리의 힘을 빌린다
STS설정법(AWSMFA 사용)
오픈소스치고 많이 사용하진 않지만, 난 이 패키지가 직관적이라서 애용하고 있다
사용법은 매우 간단하다
- 설치(글로벌) : pip3 install awsmfa
- 임시토큰 생성 : awsmfa --serial-number "MFA ARN값 입력" -i "전에 생성한 프로파일명" -t default -d 43200
- ex) awsmfa --serial-number arn:aws:iam:1234512345:mfa/usernmae -i test -t default -d 43200
이러면 test 프로파일의 Access/Secret Key를 사용해서 default 라는 임시토큰용 프로파일을 생성한다
그래서 앞에서 굳이 default 프로파일을 사용하지 않은 이유가 바로 이것이다
만약 계정이나 iam user를 여러개 써야된다면 default 프로파일만 바꿔가면서 쓰면 되고
매번 AWSCLI 쓸때 기본 프로파일을 사용하므로 명령어에 프로파일명을 입력하지 않아도 된다
그러면 이제 우리가 할일은?
이 명령어를 profile에 alias 로 등록만 해주면 된다
나는 맥북을 쓰기 때문에 ~/.profile 에 아래와 같이 입력해놨다
alias ams='awsmfa --serial-number arn:aws:iam:1234512345:mfa/usernmae -i test -t default -d 43200'
이러면 이제 터미널에서 아래와 같이 사용 가능하다
주의해야될 점은 MFA 코드값은 1회용이므로
콘솔에서 로그인할때 사용한 MFA 코드값을 STS인증할때 사용 못한다
둘 다 로그인이 필요하다면, 굳이 30초 정도를 기다려서 코드값 갱신 후에 사용해야된다
Code Commit
Code Commit은 쉽게 말하자면 코드 저장소이고 Github과 동일하다고 보면 된다
만약 위처럼 STS 인증을 했다면 프로파일정보인 iam user를 통해서 Code Commit을 사용할 수 있다
솔직히 불편한데, Code Series를 써야하거나 Github/BitBucket을 쓸 수 없는 상황이라면 좋은 선택이다
가격도 심지어 5명 + 50GB + Git 요청 1만개까지는 무료다
(가격 정보 : aws.amazon.com/ko/codecommit/pricing/)
그냥 Git 자격증명 쓰면 되는거 아닌가?
Code Commit 만 쓴다라고 하면 콘솔에서 GIt 자격증명만 만들어서 사용해도 문제없긴하다
docs.aws.amazon.com/ko_kr/codecommit/latest/userguide/setting-up-gc.html
하지만 보통 AWS를 쓴다면 개발자가 코드만 작성하는 것이 아니라 인프라도 관리해야되고
DevOps로 관리해야하는 경우가 많기 때문에 그냥 처음부터 STS설정해서 쓰는게 필요하다
SSH로 쓰면 되는거 아닌가?
그리고 이건 Code Commit을 쓰시는 분들에게 매번 듣는 질문이었는데....
"SSH로 접속이 안되는데 혹시 아시나요?"
docs.aws.amazon.com/ko_kr/codecommit/latest/userguide/setting-up-ssh-unixes.html
안타깝게도 SSH 사용자 방식의 경우, MFA를 사용하면 지원하지 않는다
가이드대로 따라해도 안되고 Code Commit과 통신은 되지만 git pull 요청을 하면 403 권한없음 에러가 발생한다
난 당연히 Github처럼 공개키만 등록하면 될 줄 알았는데 MFA방식의 경우, 이 기능을 지원하지 않는다
웃긴건 문서에 이게 안된다는 내용이 없어서 난 내가 못하는건 줄 알았는데 다행히? 아니었다
결국 그냥 STS를 쓰자
sts를 사용하면 알아서 git 자격증명을 iam user 로 사용해주고
AWSCLI도 쓸수있 수 있다
이젠 그냥 git clone "code commit url" 하면 알아서 다운 받아진다
아 물론 ssh가 아닌 https 방식만 사용 가능하다
이제 모두 해치웠나...? 응 403 에러~
개인적으로 맥북을 쓰다보니 겪었던 문제인데
윈도우도 그렇지만 맥북도 자체적으로 자격증명 관리 유틸 프로그램이 있는데
그게바로 keychain 이다
문제는 STS을 쓰면 이건 임시 암호인데 이게 keychain에 저장되면서
15분 후에는 STS를 통한 CodeCommit 사용이 불가능해진다
왜냐?
git에서 자격증명을 확인할때 STS 토큰값을 쓰는게 아니고
keychain을 통해서 git 자격증명을 확인하기 때문에
실제 git이 연결되는 세션이 만료되면 알아서 자격증명이 갱신되거나
애초에 세션이 유지되지 않게 해야되는데
CodeCommit의 사용환경이 특수하다보니 keychain은 그걸 알아주지 않는다
따라서 자격증명 헬퍼라는걸 사용해서
나는 keychain을 안쓰고 CodeCommit에서만 자격증명을 aws profile로 쓸 것이다라고 명시해줘야한다
그래서 하는 방법은 아래 링크를 따라하면 되고
여기서 중요한건 우리는 STS를 쓰기 때문에 프로파일명에 default을 넣어야한다
특이케이스
여기까지가 내가 팀 내부에 STS 및 Code Commit 사용에 대해 가이드를 할때 전달하는 내용인데
이게 참 또 신기한게 같은 맥북에서 똑같이 설정하고 하는데
3가지 안되는 케이스가 있었다
- 맥북에서 포맷하고 처음 설정하는 경우
위에 403에러 발생시 조치 사항 중 1번에서 credential.helper=osxkeychain 이 검색이 안되는 경우가 있었다
포맷하고 처음 사용했을때 아마 git을 사용한적이 없어서 helper가 초기화가 안되지 않았을까란 추측이 든다
사용하다보니 STS 인증 후, 15분 뒤에 403에러가 발생하여 다시 조치하는 helper 문제였고
링크에 나온 방식을 그대로 따라하니 정상적으로 사용 가능했다
- 맥북 터미널 시간이 빠른 경우
helper 설정을 안했고 helper=osxkeychain 인 상황에서 맥북 터미널의 시간이 현재시간보다 5분 빠른 경우가 있었다
원래라면 15분 뒤에 403에러가 발생해야되는데 이상하게 계속 사용할 수 있었다...
솔직히 팀원분이 안된다고 했을때 에러코드를 봤지만 이해할 수가 없었는데
어떻게 발견했냐면 팀원분이 AWSCLI로 Lambda 코드를 업데이트하려다가 5분이 빠르다는걸 알았다
맥북을 타임코스모스로 쓰시나...
- credential 검색 관련
credential.helper=osxkeychain 를 찾기 위해서 아래 커맨드를 입력해야되는데
git config -l --show-origin | grep credential
검색이 되지 않고 15분 뒤에 403에러가 발생하는 경우가 있었다
당연히 403에러가 발생한 뒤에도 검색되지 않았는데
git config -l --show-origin
이걸 그대로 치고 터미널 상에서 검색했더니 있어서 주석처리해서 제거하니 정상적으로 동작했다...
이해할 수도 없고 알 수도 없지만 실제로 그랬다
회사 보안프로그램 문제인지... 참 이런 경우엔 진짜 너무 난감하다... ㅋㅋ
결론
되도록이면 STS를 통해서 프로파일을 git 자격증명으로 사용하고
credential helper 설정도 꼭 잊지말 것!
근데도 안된다...? 100% 본인(PC) 문제이다 ㅋㅋㅋㅋ
'아키텍쳐 > Cloud' 카테고리의 다른 글
AWS S3 활용 및 단점 분석 (0) | 2022.02.04 |
---|---|
serverless proxy 서버 구축 (0) | 2021.02.04 |
SQS FIFO seoul 리전 추가 (0) | 2019.02.10 |
AWS Toolkit을 써보자! (0) | 2018.12.18 |
AWS Toolkits 출시에 대한 생각 (0) | 2018.12.17 |