새소식

클라우드/AWS

[AWS] AWS CLI를 여러 계정으로 이용하기

  • -

AWS에는 다양한 서비스와 리소스가 있고, 여러 계정을 사용하여 이를 관리하는 경우가 많습니다. 이때 AWS CLI (Command Line Interface)를 사용하면 효과적으로 다중 계정을 관리할 수 있습니다. 본 포스팅에서는 AWS CLI를 활용하여 여러 계정을 이용하는 방법에 대해 알아보겠습니다.

AWS CLI 설치는 아래 포스팅을 참고해주세요!😎

[클라우드/AWS] - [AWS] Ubuntu 환경에서 AWS CLI 설치 방법

액세스 키 만들기

AWS CLI를 사용하기 위해서는 먼저 IAM 사용자의 액세스 키(Access Key)를 생성해야 합니다.

[그림 1] IAM 사용자의 보안 자격 증명 접근

IAM > 보안 자격 증명에 접근하여 내려가다보면 다음 [그림 2]와 같이 엑세스 키를 만들 수 있는 화면이 나옵니다.

[그림 2] 엑세스 키 만들기 화면

액세스 키 만들기 버튼을 누르고 CLI를 선택합니다.

[그림 3] 엑세스 키 CLI 선택

태그는 그냥 넘어가도 무방합니다. 그럼 액세스 키가와 비밀 액세스 키가 만들어집니다. 해당 비밀 액세스 키는 다음 [그림 4]를 넘어가면 더 이상 확인할 수 없기 때문에 표시 버튼을 눌러 비밀 엑세스 키를 잘 복사해두거나 아래의 .csv 파일 다운로드 버튼을 눌러 별도로 보관해둡시다.

[그림 4] 생성된 액세스 키, 비밀 액세스 키 확인

 

AWS Configure 명령을 통해 프로파일 설정

위에서 액세스 키를 만든 것을 다음 aws configure 명령을 통해 값을 넣어봅시다.

$ aws configure
AWS Access Key ID [None]: AKIA3MMYKQ2HH6TXJALZ
AWS Secret Access Key [None]: abcdefghijklmnopqrstuvwxyzs3g5PhfaltBNE
Default region name [None]: ap-northeast-2
Default output format [None]: json

region 부분의 ap-northeast-2는 서울 리전을 의미합니다.

설정이 잘 되었는지 확인하기 위해서는 ~/.aws/credentials 파일과 ~/.aws/config 파일을 확인하면 됩니다.

$ cat ~/.aws/credentials
[default]
aws_access_key_id = AKIA3MMYK5Q2H6TXJALZ
aws_secret_access_key = abcdefghijklmnopqrstuvwxyzs3g5PhfaltBNE

$ cat ~/.aws/config
[default]
region = ap-northeast-2
output = json

profile을 지정하지 않으면 기본적으로 default라는 프로파일에 값이 모두 저장되어 있는 것을 확인할 수 있습니다.

default 프로파일에 액세스 키를 정상적으로 등록하였으면 AWS CLI 명령을 다음과 같이 수행하여 봅시다.

$ echo $(aws iam get-user) | python -m json.tool
{
    "User": {
        "Path": "/",
        "UserName": "sonit",
        "UserId": "AIDA3MMYK5Q2A3EPQV7D4",
        "Arn": "arn:aws:iam::012345678901:user/sonit",
        "CreateDate": "2023-04-19T16:37:58+00:00",
        "PasswordLastUsed": "2023-04-22T07:42:03+00:00"
    }
}

위의 명령은 액세스 키에 해당하는 사용자에 대한 정보들을 나타내줍니다.

~/.aws/credentials 파일에서 aws_secret_access_key의 값을 다른 것으로 수정하여 위의 명령을 수행하면 즉, 액세스 키에 대한 비밀 액세스 키 값이 다르다면 다음 [그림 5]와 같이 SignatureDoesNotMach 에러가 나옵니다.

[그림 5] 비밀 액세스 키가 일치하지 않을 때 CLI 오류

위의 에러가 발생한다면 비밀 엑세스 키가 올바르게 입력되어 있는지 다시 확인해야 할 것입니다.

 

AWS CLI 멀티 프로파일 설정 

다음으로 다른 사용자의 프로파일을 등록해보겠습니다. 여기서 기존 사용자는 sonit이고, 새로운 사용자는 sonit_sub 입니다. 

[그림 6] 새로 만든 사용자의 액세스 키 생성

새로 만든 sonit_sub 사용자의 액세스 키를 새로 만들어 해당 액세스 키를 aws configure 명령을 통해 등록하겠습니다. 다만 이번에는 --profile 옵션을 추가하여 프로파일 명을 지정할 것 입니다.

$ aws configure --profile sonit_sub
AWS Access Key ID [None]: AKIA3MMYK5Q2PEF7OWJ7
AWS Secret Access Key [None]: abcdefghijklmnopqrstuvwxyzBO7vJgZdK1CN5b
Default region name [None]: ap-northeast-2
Default output format [None]: json

새로운 프로파일을 추가하고  ~/.aws/credentials 파일과 ~/.aws/config 파일을 다시 확인해봅시다.

$ cat ~/.aws/credentials
[default]
aws_access_key_id = AKIA3MMYK5Q2H6TXJALZ
aws_secret_access_key = abcdefghijklmnopqrstuvwxyzs3g5PhfaltBNE
[sonit_sub]
aws_access_key_id = AKIA3MMYK5Q2PEF7OWJ7
aws_secret_access_key = abcdefghijklmnopqrstuvwxyzBO7vJgZdK1CN5b

$ cat ~/.aws/config
[default]
region = ap-northeast-2
output = json
[profile sonit_sub]
region = ap-northeast-2
output = json

--profile 옵션을 지정하면 해당 프로파일 명에 해당하는 액세스 키가 등록되고, --profile 옵션이 없다면 default 프로파일에 액세스 키가 덮어써지게 됩니다.

aws 명령을 수행할 때도 마찬가지 입니다. --profile 옵션이 없다면 default 프로파일에 해당하는 유저의 권한으로 명령을 수행하게 되고, --profile을 지정하면 지정한 프로파일에 해당하는 유저의 권한으로 명령을 수행합니다.

$ echo $(aws iam get-user --profile sonit_sub) | python3 -m json.tool
{
    "User": {
        "Path": "/",
        "UserName": "sonit_sub",
        "UserId": "AIDA3MMYK5Q2CAYMY3TBA",
        "Arn": "arn:aws:iam::012345678901:user/sonit_sub",
        "CreateDate": "2023-04-22T07:43:00+00:00"
    }
}

위의 명령을 수행하면 sonit_sub 프로파일에 해당하는 유저의 권한으로 유저 정보를 획득하는 명령을 수행하게 되어 위의 출력 결과가 나오게 되는 것입니다.

 

AWS_PROFILE 환경 변수 지정

AWS_PROFILE 환경 변수에 프로파일 값을 입력하면 해당 프로파일이 default가 되어 aws 명령을 수행할 수 있습니다.

$ export AWS_PROFILE=sonit_sub
$ echo $(aws iam get-user) | python3 -m json.tool
{
    "User": {
        "Path": "/",
        "UserName": "sonit_sub",
        "UserId": "AIDA3MMYK5Q2CAYMY3TBA",
        "Arn": "arn:aws:iam::782540401716:user/sonit_sub",
        "CreateDate": "2023-04-22T07:43:00+00:00"
    }

원래 default 프로파일은 sonit 사용자로 설정 되어 있지만, AWS_PROFILE을 sonit_sub로 지정하였기 때문에 sonit_sub 사용자의 권한으로 명령이 수행됨을 확인할 수 있습니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.