[AWS] aws cli 용도 액세스 키 발급 및 credentials 등록 자동화(shell script)

HYEOB KIM·2022년 5월 30일
1

aws

목록 보기
22/62

주의!
해당 스크립트가 실행되기 위해서는 사용자에 대해서 액세스 키 관련 권한이 부여되어 있어야 합니다.

  • IAM 사용자명과 프로파일을 입력 받습니다.
    (프로파일은 유효한 프로파일을 입력할 때까지 반복해서 묻습니다)

  • 액세스 키는 2개를 초과해서 생성할 수 없습니다.

  • 액세스 키가 이미 2개가 있다면 현재 CLI config에 등록된 액세스 키를 알려주고, 2개의 키를 보여준 뒤 하나를 삭제하도록 유도합니다.
    (이때, 등록된 액세스 키가 아닌 키를 삭제해야 이후에 InvaildClientToken 오류가 발생하지 않습니다)

  • 그리고 새로운 access-key를 생성하고, credentials 파일에 등록한 뒤 기존의 키 파일을 삭제합니다.

#!/bin/bash

read -p "Username: " username

# 유효한 프로파일을 입력할 때까지 프로파일 입력 반복
while true
do
	read -p "Profile: " profile_name
	
    # 필드구분자(IFS)를 줄 바꿈을 기준으로 잠시 변경
	OLD_IFS=$IFS
	IFS=$'\n'
    # 프로파일이 유효하다면 true, 아니라면 false
	profile_exist=false
    # aws cli에 등록된 프로파일 목록
	profile_list=$(aws configure list-profiles)
	for element_profile in $profile_list
	do
    	# 프로파일이 존재하면 true로 변경
		if [ $element_profile = $profile_name ]
		then
			profile_exist=true
			break
		fi	
	done
	IFS=$OLD_IFS

	# 프로파일이 유효하다면 환경 변수로 등록
	if $profile_exist
	then
		export AWS_PROFILE=$profile_name
		echo "
Using AWS_PROFILE: $profile_name
.
.
.
		"
		break
	else
		echo "
Please write a valid profile...
------Your Profile List------
$profile_list
		"
	fi
done

echo "
checking if access key is more than 2
.
.
.
"

# 현재 사용자에 액세스 키가 몇 개 있는지 확인
tmp=$(mktemp)
aws iam list-access-keys --user-name $username --output text > $tmp
cnt=$(cat $tmp | wc -l)

# 액세스 키가 2개라면 하나를 지우도록 유도
if [ $cnt -eq 2 ]
then
	# 두 개의 액세스 키
	first_access_key=$(awk 'NR == 1 { print $2 }' $tmp)
	second_access_key=$(awk 'NR == 2 { print $2 }' $tmp)
	
	echo "
You already have '2' access-key...
#############################################
You should delete at least one key.
---------------------------------------------
1) ****************${first_access_key:(-4)}
2) ****************${second_access_key:(-4)}
	"

	# 현재 credentials 파일에 등록된 액세스 키 확인
	current_access_key=$(aws configure get aws_access_key_id)
	echo "Your Current Access key: ****************${current_access_key:(-4)}"

	# 해당되는 액세스 키를 삭제
	read -p "Select one: " number

	case $number in
		1)
			echo "Deleting ****************${first_access_key:(-4)}..."
			aws iam delete-access-key --user-name $username --access-key-id $first_access_key
			;;
		2)
			echo "Deleting ****************${second_access_key:(-4)}..."
			aws iam delete-access-key --user-name $username --access-key-id $second_access_key
			;;
		*)
			echo "Please choose one. You can't create more access-key."
			exit 0
			;;
	esac
fi

rm $tmp

# 현재 credentials 파일에 등록된 액세스 키와 시크릿 키를 변수에 할당
old_access_key=$(aws configure get aws_access_key_id)
old_secret_key=$(aws configure get aws_secret_access_key)

# 새로운 액세스 키 생성
tmp=$(mktemp)
echo "
Creating new access-key
.
.
.
"
aws iam create-access-key --user-name $username --output text > $tmp
access_key=$(cut -f 2 $tmp)
secret_key=$(cut -f 4 $tmp)
rm $tmp

# 새로 생성한 액세스 키와 시크릿 키를 credentials 파일에 등록
echo "
Changing AWS credentials
.
.
.
"
aws configure set aws_access_key_id $access_key
aws configure set aws_secret_access_key $secret_key
echo "Finished"
echo "---------------------------------------------"
echo "
Deleting last access-key
.
.
.
"
		
sleep 8

# 기존에 존재하던 액세스 키를 비활성화 후 삭제
aws iam update-access-key --user-name $username --access-key-id $old_access_key --status Inactive
aws iam delete-access-key --user-name $username --access-key-id $old_access_key
echo "Completed."
profile
Devops Engineer

0개의 댓글