# profile一覧の確認
cat ~/.aws/credentials
# profileがdefaultのクレデンシャルを更新
PROFILE=default ;curl -sf https://gist.githubusercontent.com/wakusei-meron-/9349d27819b9a2879cfc9e83875c000c/raw/5ba5be5278a4f436b1ec64b7104df1566ea57c6f/aws-iam-user-key-rotation.sh | sh -s $PROFILE
# 意図しない更新をした場合、クレデンシャルのバックアップの確認
cat ~/.aws/credentials.bak
Forked from TAKEDA-Takashi/aws-iam-user-key-rotation.sh
Last active
October 6, 2021 08:26
-
-
Save wakusei-meron-/9349d27819b9a2879cfc9e83875c000c to your computer and use it in GitHub Desktop.
指定したAWSプロファイルのアクセスキー をローテーションするスクリプト。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -euo pipefail | |
# | |
# Usage: | |
# $ aws-iam-user-key-rotation.sh [profile] [credential_file] | |
# | |
declare -x AWS_DEFAULT_PROFILE=${1:-default} | |
declare credential_file=${2:-~/.aws/credentials} | |
declare -x AWS_SHARED_CREDENTIALS_FILE=$credential_file | |
echo "${AWS_DEFAULT_PROFILE} プロファイルのアクセスキーをローテーションします。" | |
declare iam_user_name | |
iam_user_name=$(aws iam get-user | jq -r '.User.UserName') | |
declare current_access_keys | |
current_access_keys=$(aws iam list-access-keys) | |
echo "対象のIAMユーザーは ${iam_user_name} です。" | |
# AWSのアクセスキーは一度に2個までしか作成できないため先にチェックしておく | |
if (( $(echo "$current_access_keys" | jq '.AccessKeyMetadata | length') == 2 )); then | |
echo "アクセスキーが2個存在しています。使用していないアクセスキーを削除してから再実行してください。" 1>&2 | |
exit 1 | |
fi | |
cp "$credential_file"{,.bak} | |
declare new_credentials | |
new_credentials=$(aws iam create-access-key --user-name "$iam_user_name") | |
echo "新規アクセスキーを作成しました。" | |
declare response_text="$(echo "$new_credentials" | jq -r '.AccessKey.AccessKeyId') | |
$(echo "$new_credentials" | jq -r '.AccessKey.SecretAccessKey') | |
" | |
echo "$response_text" | aws configure > /dev/null | |
echo "クレデンシャルファイルを更新しました。" | |
declare updated_access_keys | |
echo "新しいアクセスキーで試行します。" | |
set +e | |
while :; do | |
echo "5秒待機します..." | |
sleep 5s | |
# このコマンドは新しいアクセスキーで実行される | |
updated_access_keys=$(aws iam list-access-keys 2> /dev/null) | |
(( $? == 0 )) && break | |
done | |
set -e | |
# ここがfalseになることはないはず | |
if (( $(echo "$updated_access_keys" | jq '.AccessKeyMetadata | length') != 2 )); then | |
echo "アクセスキーが2個存在していません。何かおかしいようです。" 1>&2 | |
exit 1 | |
fi | |
aws iam delete-access-key --user-name "$iam_user_name" --access-key-id "$(echo "$current_access_keys" | jq -r '.AccessKeyMetadata[0].AccessKeyId')" | |
echo "古いアクセスキーを削除しました。" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment