본문 바로가기
CSP (Cloud Service Provider)/AWS

AWS CLI MFA 인증

by BTC_루피 2023. 11. 24.

 

베하 ~!

문땅훈과 루피입니다.

 

기온이 하루 아침에 뚝 떨어졌네요.

다들 감기 조심하세요 !

 


오늘은 AWS IAM user에 MFA 기능이 활성화 되어 있을 때,

CLI를 사용하는 인증 방법에 대해 알아보겠습니다.

 

 

 

 

먼저, 필요한 것은 MFA 인증이 되어 있을 계정의 키 입니다.

 

키가 없을 경우 생성해줍니다.

 

 

1. Key 생성

IAM -> 사용자 콘솔에서 키를 생성할 사용자를 선택해줍니다.

액세스 키가 없는 경우, 키를 생성하고 Access Key와 Secret access key를 메모장에 기록해둡니다.

또는, 키 파일을 다운로드 합니다.

 

위 과정을 거치지 않고 창을 넘기는 경우, 추후 생성된 키를 다시 확인할 수 없으니 꼭! 메모를 해두세요.

 

 

2. AWS CLI 설치

  • 아래 명령어는 리눅스 환경의 설치 방법입니다.

 

  • 설치 파일을 다운로드 합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
  • 압축을 풉니다.
unzip awscliv2.zip
  • 설치 프로그램을 실행합니다.
sudo ./aws/install

 

3.  AWS config, configure 설정

config 명령어를 입력한 후, 위에서 생성한 Access key와 Secret Access key 를 입력해줍니다.

[root@localhost ~]# aws config

 

아래와 값을 넣어줍니다.

[root@localhost ~]# aws configure

[default]
aws_arn_mfa = arn:aws:iam::xxxxxxxxx:mfa/aws 계정
region = ap-northeast-2
output = json

 

4. AWS Credentials 설정

credentials 파일을 열어 저장된 값을 확인합니다.

[root@localhost ~]# vi ~/.aws/credentials

[default]
aws_access_key_id = aws_access_key_id 값
aws_secret_access_key = aws_secret_access_key 값

 

5. 스크립트 파일 저장

파일명을 aws_auth_mfa.sh로 저장하고 아래 값을 입력 후 저장합니다.

chomd 명령어를 사용해 700권한으로 변경합니다.

#!/bin/bash
# Author: Patryk Grabarczyk <grabarczyk.patryk@gmail.com>
# 04.10.2019

##### Parameters #####
aws_original_profile=$1
aws_mfa_token=$2
aws_mfa_profile_name="mfa"
session_duration=43200 #You can choose from 900 seconds (15 minutes) to 129,600 seconds (36 hours). I set it to 43200 (12 hours).
######################

create_new_credentials() {
    local aws_original_profile=$1
    local aws_mfa_token=$2
    local aws_mfa_profile_name=$3
    local session_duration=$4

    local mfa_serial_number=$(aws configure --profile "${aws_original_profile}" get aws_arn_mfa)
    if [ -z "${mfa_serial_number}" ] ; then
        echo "ERROR mfa_serial_number is empty for profile ${mfa_serial_number}. Set it in default credential file with key aws_arn_mfa"
        exit 1
    fi

    local tmp_credentials=$(aws sts get-session-token \
        --profile "${aws_original_profile}" \
        --serial-number "${mfa_serial_number}"  \
        --token-code "${aws_mfa_token}" \
        --duration-second "${session_duration}" )
    if [ $? -ne 0 ]; then
        echo "ERROR. Check your profile or MFA"
        exit 2
    fi

    local aws_access_key_id=$(echo "${tmp_credentials}" | jq .Credentials.AccessKeyId | sed "s/\"//g")
    local aws_secret_access_key=$(echo "${tmp_credentials}" | jq .Credentials.SecretAccessKey | sed "s/\"//g")
    local aws_session_token=$(echo "${tmp_credentials}" | jq .Credentials.SessionToken | sed "s/\"//g")

    aws configure --profile "${aws_mfa_profile_name}" set aws_access_key_id ${aws_access_key_id}
    aws configure --profile "${aws_mfa_profile_name}" set aws_secret_access_key ${aws_secret_access_key}
    aws configure --profile "${aws_mfa_profile_name}" set aws_session_token ${aws_session_token}

    echo "Done, now you can use your mfa profile ${aws_mfa_profile_name}"
}

create_new_credentials "${aws_original_profile}" "${aws_mfa_token}" "${aws_mfa_profile_name}" "${session_duration}"

 

6. MFA 인증

MFA 코드를 넣고 인증합니다.

./aws_auth_mfa.sh default MFA6자리 숫자

 

Done 메세지가 뜨면 CLI를 사용할 수 있습니다.

 


 

이상 MFA가 활성화 되어 있는 사용자의 CLI 인증 방법을 알아보았습니다.

다음에도 유익한 정보를 가져오겠습니다.

베빠!!!

 

'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글

AWS Step Functions  (0) 2023.11.24
[AWS] Glue  (0) 2023.11.24
[AWS] EC2 중단 없이 AMI 생성  (1) 2023.11.24
[AWS] EC2 인스턴스에서 공용 IP 제거  (1) 2023.11.24
AWS 디스크 증설  (1) 2023.11.24

댓글