저는 aws cli를 자주 이용합니다. 이 프로그램은 credentials 라는 중요한 파일을 읽게 되는데요. profile과 연관이 되어 있어요. 이에 대해 간략하게 알아보도록 하겠습니다.
aws configure 명령어 사용하기
먼저 명령어랑 환경변수를 알아볼게요.
- aws configure list
- 프로필의 초기화 리스트를 확인합니다. –profile이 없는 경우 default 입니다.
- aws configure
- 프로필을 설정합니다. access_key와 secret_access_key를 입력합니다. 나중에 입력한 인증 정보로 aws 서비스에 접근합니다.
- AWS_PROFILE 환경변수
- aws cli의 프로필 이름입니다.
우리가 aws 서비스에 접근할 때, access_key와 secret_access_key를 이용해요. 이들과 profile을 연결할 수 있어요. 먼저, aws configure list를 입력해 볼게요.

저는 디폴트 프로필을 설정하지 않았어요. 고로, 아무 것도 없는 결과가 나오게 됩니다. IAM 계정을 하나 만들고 계정을 사용하기 위한 access_key를 생성하였습니다.

gh_s3_test의 권한입니다. s3_permission 이라는 정책 하나를 권한으로 가집니다. s3:GetObject 할 수 있는 권한을 가지는데요. Resource가 있어요. arn:aws:s3:::gh-wp-bucket/* 이라고 되어 있는데요. 아래의 의미를 가지게 됩니다.
- gh-wp-bucket 버킷에 있는 모든 객체에 대해서
- GetObject를 할 수 있다.
그렇다면, 이 계정과 연결된 access_key로 로그인 하면, gh-wp-bucket 버킷에 있는 모든 객체를 얻을 수 있게 됩니다. download 가능하다는 의미가 됩니다.

access key를 만들 때, 맨 마지막에 access key와 비밀 access key를 복사하는 부분이 있을 거에요. 이 창을 띄워 놓은 상태에서 shell 에서 작업합니다. security credentials 탭으로 돌아와서 보면, 아래와 같은 access key가 생성되어 있음을 볼 수 있어요.

이는 gh_s3_test에 대해서 해당 키로 로그인 할 수 있다는 의미입니다. 다시 말하면, 이 access key와 secret access key가 도난 당한다면, 해당 계정의 모든 권한이 탈취될 수도 있다는 의미입니다. 1

aws 접근 프로필을 설정하기 위해서는 aws configure 명령어를 입력합니다. 저는 gh_s3_test 라는 프로필로 설정할 것이니 뒤에 –profile gh_s3_test 를 추가로 입력합니다. 그러면, access key id와 secret access key를 적으라고 할 거에요.
아까 그 창에서 access key와 secret access key를 복사합니다. 그러면 gh_s3_test 에 대한 프로필 설정이 완료됩니다. 여기까지 이해하셨다면, 다음 탭으로 넘어갑시다.
aws credentials 파일
그러면, 이 인증 정보는 어디에 저장이 될까요? 디렉토리 .aws 밑에 credentials 파일에 저장됩니다.

이 파일에, [gh_s3_test] 라고 입력된 부분이 있어요. 이는 프로필 gh_s3_test 부분을 의미해요. 여기에 무엇이 들어가 있나요? access_key_id와 secret_access_key가 들어가 있어요. 그렇다면, 우리는 shell 에서 어떠한 조작으로 aws profile을 바꿀 수 있을 겁니다. 이를 바탕으로 사용할 IAM 계정을 switching 할 수 있겠네요.
이는 환경 변수 AWS_PROFILE과 관련이 있어요. 아래 글에서 환경 변수를 설정하는 명령어를 배웠어요.

export AWS_PROFILE=gh_s3_test를 입력하면, gh_s3_test 라는 이름으로 aws cli를 사용합니다.

gh-wp-bucket에 1.png가 있다면 가져올 수 있을 겁니다. aws s3 cp source dest는 source로부터 파일을 dest로 복사하는 명령어입니다. 위 예제에서는 gh-wp-bucket의 1.png를 로컬로 가져옵니다. 프로필 gh_s3_test는 해당 버킷에서 GetObject 권한이 있기 때문에 명령 실행을 성공하게 됩니다.
다른 프로필 추가하기
이제, 다른 IAM의 access key를 추가합시다. 해당 IAM은 어떠한 권한도 없습니다.

profile 이름을 gh_test로 설정했습니다.

이제 credentials 파일을 봅시다. 어떤 것이 추가되었나요? [gh_test] 가 추가되었지요? 이는, gh_test 라는 프로필이 추가되었다는 의미입니다. 이 프로필은 다른 계정에 연결된 것이기 때문에, gh-wp-bucket 과는 아무런 연관이 없습니다.

이제 aws profile을 바꿔봅시다. 어떻게 하면 된다고요? export AWS_PROFILE=gh_test로 하면 프로필을 gh_test로 쓰게 됩니다. 이 계정은 어떠한 권한도 없기 때문에, bucket 으로부터 1.png를 가져오는 aws s3 cp 명령은 실패하게 됩니다. 403 코드가 리턴된 것을 보면 알 수 있습니다. 이는 객체를 얻을 권한이 없다는 의미입니다.
- 절대로 루트 계정에 키를 추가하면 안 되는 이유입니다. ↩︎