방명록
- AWS Profile 전환 자동화하기2024년 08월 12일 11시 37분 45초에 업로드 된 글입니다.작성자: 재형이반응형
1. AWS Profile 개념
- 기본적으로 aws cli를 사용할 때 aws configure에 등록된 액세스키로 자격 증명이 이루어지게 됩니다
- 만약에 하나의 계정 뿐만 아니라 다양한 AWS 계정 또는 IAM User 계정을 등록해서 사용하고 싶다면 profile을 사용해야 합니다
# default 프로파일 등록 aws configure # 지정된 이름의 프로파일 등록 aws configure --profile <PROFILE_NAME>
- 하지만 profile을 사용하려면 매번 커맨드 뒤에 --profile 옵션을 추가해야 하는 번거로움이 생깁니다
- 추가로 Human Error까지 초래할 수 있습니다
2. AWS Profile 작동 원리
- aws configure 명령어로 등록한 자격증명은 ~/.aws/credentials 에 저장이 되는데, 각 프로필도 이 곳에 저장이 됩니다
[default] #default 프로파일 aws_access_key_id = 1234 aws_secret_access_key = abcd region=ap-northeast-2 output=json [prod-account] #추가한 첫번째 프로파일 aws_access_key_id = 1234 aws_secret_access_key = abcd region=ap-northeast-2 output=json [networking] #추가한 두번째 프로파일 aws_access_key_id = 1234 aws_secret_access_key = abcd region=ap-northeast-2 output=yaml
- aws cli는 기본적으로 default 프로파일을 사용하게 됩니다
- AWS 공식 문서를 확인해보면 AWS_PROFILE 환경 변수에 따라 profile을 선택할 수 있습니다
(기본적으로 현재 사용하고 있는 터미널 세션에서만 사용 가능) - 처음에는 해당 변수가 비어있고 자동으로 default 프로파일을 사용하게 됩니다
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-envvars.html
- 리눅스 환경에서는 AWS_PROFILE이고 윈도우 환경에서는 env:AWS_PROFILE 입니다
- 기본적으로 터미널 세션 별로 환경 변수가 적용되기 때문에 여러 프로파일을 한번에 사용도 가능합니다
3. Profile 스위칭
- aws configure list-profiles 명령어를 실행하면 현재 ~/.aws/credentials 파일에 저장된 프로파일의 목록을 확인할 수 있습니다
- 해당 프로파일의 이름을 AWS_PROFILE 환경 변수에 등록하거나 --profile 옵션을 사용하면 됩니다
- 처음에 말했듯이 매번 하기도 번거롭고 휴먼 에러를 초래할 수도 있기 때문에 이를 자동화해봤습니다
4. 파이썬, shell script 활용 실패
#!/usr/bin/python3 import sys import re import os import subprocess def list_profiles(): print("--------------------------------") print("Current Profile: " + os.environ.get("AWS_PROFILE", "")) print("--------------------------------") with open(os.path.expanduser("~/.aws/credentials"), "r") as file: contents = file.read() profiles = re.findall(r"\[([^]]+)\]", contents) for profile in profiles: print(profile) print("--------------------------------") def switch_profile(profile_name): if profile_name: with open(os.path.expanduser("~/.aws/credentials"), "r") as file: contents = file.read() if re.search(fr"\[{profile_name}\]", contents): os.environ["AWS_PROFILE"] = profile_name print(os.environ["AWS_PROFILE"]) print("[AWS_PROFILE] changed to [" + profile_name + "] successfully !!") else: print("Invalid profile name.") else: list_profiles() if __name__ == "__main__": if len(sys.argv) == 1: switch_profile(None) elif len(sys.argv) == 2 and sys.argv[1] == "--help": print("Usage:") print(" awspf : List of My AWS Profile (which located in '~/.aws/credentials')") print(" awspf [profile_name] : Switch Current Shell's Profile to [profile_name]") else: switch_profile(sys.argv[1])
- 해당 스크립트로 profile list를 출력하고 방향키로 프로파일을 선택하게 해봤지만 스크립트가 새로운 세션에서 실행이 되고 죽기 때문에 export AWS_PROFILE이 적용이 되지 않았습니다
5. fzf (대화형 탐색 도구) 활용
- fzf란 fuzzy finder의 약어로 터미널 환경에서 대화형으로 파일 탐색을 도와주는 도구 입니다
- 스크립트와 달리 현재 세션에서 실행이 되고, 대화형을 지원해주기 때문에 원하던 기능을 그대로 구현할 수 있습니다
- fzf를 설치한 후에 alias로 간단하게 구현할 수 있습니다
5 - 1. 리눅스
- fzf 설치
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install source ~/.zshrc #혹은 source ~/.bashrc
- 다음 명령어 입력
# 리눅스 alias awspf='export AWS_PROFILE=$(sed -n "s/\[\(profile \)\?\(.*\)\]/\2/p" ~/.aws/credentials ~/.aws/config | sort -rg | uniq | fzf)'
- ~/.bashrc에 alias를 등록해주면 새로운 터미널에서도 alias 명령어 실행 없이 awspf를 사용할 수 있습니다
5 - 2. 윈도우
- 윈도우에서는 fzf를 chocolatey 레포지토리를 활용하여 설치할 수 있습니다
- 하단 링크 Install Chocolatey for Individual Use 섹션에서 설치 방법을 확인할 수 있습니다
https://chocolatey.org/install#individual
- fzf 설치
- chocolatey 설치 후에
# 관리자 권한으로 실행한 PowerShell에서 실행 choco install fzf
- chocolatey 설치 후에
- 파워쉘 스크립트 작성
# aws_profile_switch.ps1 $profiles = Get-Content "$HOME\.aws\credentials" | Select-String -Pattern '^\[.*\]' | ForEach-Object { $_ -replace '[\[\]]', '' } # Use fzf to select a profile $selectedProfile = $profiles | fzf if ($selectedProfile) { $env:AWS_PROFILE = $selectedProfile Write-Output "AWS_PROFILE set to '$selectedProfile'" } else { Write-Output "No profile selected" }
- PowerShell Profile 적용 (리눅스 alias 대체)
# 관리자 권한 PowerShell에서 실행 notepad $profile # 새로 생성하겠냐는 알림창이 나오면 확인 클릭 후에 하단 내용 입력 # 위에서 생성한 PowerShell 스크립트가 있는 경로로 설정 function awspf { . "C:\your path\\aws_profile_switch.ps1" }
- 리눅스와 동일하게 파워스크립트 창에서 awspf 명령어로 실행하고 방향키로 프로파일 선택 후에 자격증명 변경 가능
[추가]
- assume role을 사용하는 profile은 ~/.aws/config 파일에 다음과 같은 형식으로 저장이 됨
- --profile 환경변수 사용하는 로직은 동일
- 파워쉘 스크립트 수정
- $HOME\.aws\credentials
- $HOME\.aws\config
# credentials 파일에서 프로파일 목록 가져오기 $credentialsProfiles = Get-Content "$HOME\.aws\credentials" | Select-String -Pattern '^\[.*\]' | ForEach-Object { $_ -replace '[\[\]]', '' } # config 파일에서 프로파일 목록 가져오기 $configProfiles = Get-Content "$HOME\.aws\config" | Select-String -Pattern '^\[profile .*' | ForEach-Object { $_ -replace '\[profile ', '' -replace '\]', '' } # 두 파일에서 프로파일을 병합하고 중복 제거 $profiles = $credentialsProfiles + $configProfiles | Sort-Object -Unique # Use fzf to select a profile $selectedProfile = $profiles | fzf if ($selectedProfile) { $env:AWS_PROFILE = $selectedProfile Write-Output "AWS_PROFILE set to '$selectedProfile'" } else { Write-Output "No profile selected" }
- 읽어주셔서 감사합니다
반응형'클라우드 > AWS' 카테고리의 다른 글
EC2 윈도우 서버 SSH 설정 배포 자동화하기 (feat.AWS SSM) (0) 2024.10.15 윈도우10에서 SSH 접속 시 pem 파일 권한변경 (0) 2024.09.05 솔데스크 AWS 클라우드 교육 과정 후기 (2) 2023.08.26 ECS를 활용한 웹 애플리케이션 배포 - 개인프로젝트 (0) 2023.08.16 API Gateway 란 (0) 2023.08.14 다음글이 없습니다.이전글이 없습니다.댓글