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