[Tip]터미널에서 AWS Profile 전환을 효율적으로 하는 방법

개요

aws cli를 사용할 때 profile 기능을 이용하면 여러개의 자격 증명을 등록하고 스위칭 해서 효율적으로 사용할 수 있다.

default 프로파일을 사용하는 것은 human error 를 초래할 수 있어 권장되지 않아 cli를 사용할때 매번 --profile 옵션을 추가해야 하는 번거로움이 발생한다.

이 같은 번거로움을 조금이라도 회피해 보고자 합니다.

AWS CLI의 default profile 이란?

~/.aws/credentials 파일 설정에 다음과 같다고 가정해 보겠습니다.

[default]
aws_access_key_id = AAAAAAAAAAAAAA    #prod-account의 key
aws_secret_access_key = AAAAAAAAAAAAAA #prod-account의 key

[dev-account]
aws_access_key_id = BBBBBBBBBBBBBBB    #dev-account의 key
aws_secret_access_key = BBBBBBBBBBBBBBB #dev-account의 key

aws cli 에서 명령을 실행할때 --profile dev-account 옵션을 주지 않으면 기본적으로 default profile을 사용하기 때문에 prod-account 에서 명령을 실행하게 되어 의도치 않은 실수를 낳게 됩니다.

aws s3 cp test.png s3://bucket-name/ 

이와 같이 하면 prod-account에 있는 s3 bucket에 object를 업로드 하게 됩니다.

위와 같은 실수를 줄이기 위해 default profile 을 사용하지 않고 cli 명령어에 --profile 옵션을 사용하여 profile 을 특정해서 명령을 실행하는 것이 실수를 줄일 수 있습니다.

[default]
[prod-account]
aws_access_key_id = AAAAAAAAAAAAAA    #prod-account의 key
aws_secret_access_key = AAAAAAAAAAAAAA #prod-account의 key

[dev-account]
aws_access_key_id = BBBBBBBBBBBBBBB    #dev-account의 key
aws_secret_access_key = BBBBBBBBBBBBBBB #dev-account의 key
aws s3 cp test.png s3://bucket-name/ --profile dev-account

명시적으로 profile을 사용하기 때문에 실수를 줄일 수 있음

물론 위와 같이 사용하게 되면 실수를 줄일 수 있겠지만 매번 profile을 명시해야 한다는 번거로움이 뒤따릅니다.

이와 같은 번거로움을 없애기 위해 profile을 손쉽게 스위칭 할수 있는 방법을 소개 하겠습니다.

아래 조건에서 테스트 하였습니다.

  • OS : macOS
  • Shell : zsh
  • .zshrc 파일에 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_PROFILE 환경변수 설정이 없어야 함.

fzf 설치

💡
fzf란? 파일, 명령 기록, 프로세스, 호스트 이름 북마크, git 커밋 등 모든 종류의 목록을 필터링할 수 있는 대화형 프로그램입니다. 자세한 내용은 아래 링크를 참고하세요.
https://github.com/junegunn/fzf
brew install fzf

homebrew를 이용하여 fzf 설치

스위칭 스크립트 작성

아래 스크립트를 aws_change_profile.sh이름으로 적당한 위치에 저장합니다.

#!/bin/bash
grep -E "^\\[" ~/.aws/config | grep -E "profile|default" | tr -d "[|]" | awk '{ if($1 == "default") {print "default"} else {print $2} }' | fzf

스크립트 내용 설명

  • 1단계 grep -E "^\\[" ~/.aws/config : AWS 설정 파일에서 대괄호([)로 시작하는 줄(섹션 헤더)만 찾아냅니다.
  • 2단계 grep -E "profile|default" : 그중에서 profile 또는 default라는 단어가 포함된 줄만 필터링 합니다.
  • 3단계 tr -d "[|]" : 텍스트에서 대괄호([])를 제거하여 알맹이만 남깁니다.
  • 4단계 awk '{ if($1 == "default") {print "default"} else {print $2} }' : 형식을 정리합니다. default면 그대로 출력하고, profile 이름 형식이라면 '이름' 부분만 뽑아냅니다.
  • 5단계 fzf : 최종 추출된 리스트를 대화형 선택 찾으로 띄워줍니다.

.zshrc 수정

.zshrc 파일은 사용자의 Shell(zsh)환경을 커스터마이징 할 수 있는 파일입니다. .zshrc 파일에 위에서 작성한 스크립트를 alias로 설정하기 위한 구문을 추가 합니다.

alias awspf='export AWS_PROFILE=$(~/.aws/aws_change_profile.sh)'

위 내용은 shell에서 awspf 입력시 export AWS_PROFILE=$(~/.aws/aws_change_profile.sh)가 실행된다는 내용입니다.

AWS CLI의 환경변수 구성에 대한 자세한 내용은 아래 링크를 참고하세요.

AWS CLI에 대한 환경 변수 구성 - AWS Command Line Interface
환경 변수는 구성 옵션과 보안 인증을 지정하는 다른 방법을 제공하며, 스크립팅을 수행하거나 명명된 프로파일을 임시로 기본값으로 설정할 때 유용할 수 있습니다.

시연 영상

시연영상

마무리

이상으로 터미널 환경에서 AWS profile을 효율적으로 스위칭하는 방법에 대해 알아보았습니다.

Read more

매번 헷갈리는 RPO와 RTO

RPO와 RTO는 재해 복구(DR) 계획을 세울때 가장 핵심이 되는 지표 입니다. 용어가 비슷해서 헷갈리기 쉽지만, 어느 시점의 데이터로 돌아갈 것인가(RPO) 와 얼마나 빨리 복구할 것인가(RTO)의 차이로 이해하시면 쉽습니다. 백업 정책 예를 통해 살펴 봅시다. 운영중인 데이터베이스 서버가 있다고 가정합니다. 백업 정책은 아래와 같습니다. * 일 4회(6시간

By Onlab

[Monitoring] zabbix 2편: zabbix agent 설치하기

zabbix 서버는 zabbix agent, SNMP 등을 통해 원격 컴퓨터를 모니터링 합니다. 앞서 zabbix 서버 설치에 대해 다루어 보았는데 이번에는 zabbix-agent 설치에 대해서 다루어 보겠습니다. agent는 두가지 버전을 제공합니다. zabbix-agent와 zabbix-agent2 로 나뉘어 있습니다. agent2가 차세대 버전쯤으로 생각하면 됩니다. 자세한 내용은 아래 링크를 참고하세요. 15 Agent vs agent 2 comparisonDocs 이

By Onlab

[Monitoring] zabbix 1편: zabbix server 설치하기

엔터프라이즈급 오픈소스 모니터링 솔루션인 zabbix를 설치하고 초기 설정 하는 방법을 알아보겠습니다. 서버 대수가 늘어날수록 서비스 상태를 일일이 확인하는 것은 불가능에 가깝습니다. zabbix를 이용하면 서버의 CPU, 메모리, 트레픽 상태는 물론 장애 발생 시 실시간 알림까지 받을 수 있는 스마트한 환경을 구축할 수 있습니다. zabbix 란 무엇인가요? zabbix는 네트워크 서비스, 서버, 하드웨어

By Onlab

AWS VPC환경에서 dnsmasq를 이용한 local dns cache 구현

배경 AWS VPC환경의 ec2에서 실행되는 애플리케이션에서 DNS질의에 실패하는 사례가 발생함 원인 AWS VPC환경에서 제공하는 DNS에는 초당 1024개의 패킷만 허용하게 되어있음. 이 한도를 초과하는 트레픽은 거부하게 됨 Understanding Amazon DNS - Amazon Virtual Private CloudAs an AWS architect or administrator, one of the foundational networking components you’ll encounter is the

By Onlab