3.2. 最新ではないアクセスキーの無効化 (handson-iam-user)¶
作業の目的 [why]¶
IAMユーザ"handson-iam-user"の最新ではないアクセスキーを無効化します。
完了条件/事前条件 [設計者用情報]
完了条件 [after]
主処理は、以下を満たしたときに成功したものとします。
- 完了条件1
- IAMユーザ"handson-iam-user"の最新ではないアクセスキーが無効である。
事前条件 [before]
主処理の実施は、以下の状態であることを前提とします。
- 事前条件1
- IAMユーザ"handson-iam-user"には複数の有効なアクセスキーが存在する。
作業対象 [what]¶
- IAMアクセスキー
標準時間(合計)¶
8分
パラメータ設定¶
パラメータ設定の標準時間: | 2分 |
---|
作業に必要なモノ・情報 [resource]¶
作業開始には、以下が全て揃っていることが必要です。
リソース1: IAMユーザ名
- アクセスキーを更新するIAMユーザの名称です。
- 今回は"handson-iam-user"とします。
パラメータの指定¶
作業に必要なパラメータを変数に格納をします。
パラメータの保存¶
設定されている変数の保存先となるファイル名を指定します。
変数の設定:
DIR_PARAMETER="${HOME}/tmp/parameter-handson-iam" FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-iam-access_key-update.env" \ && echo ${FILE_PARAMETER}
結果(例):
${HOME}/tmp/parameter-handson-iam/2019-04-30-iam-access_key-update.env
各変数に正しいパラメータ値が格納されていることを確認しながら保存します。
変数の確認:
cat << EOF > ${FILE_PARAMETER} # 0.1. IAM_USER_NAME:"handson-iam-user" IAM_USER_NAME="${IAM_USER_NAME}" EOF cat ${FILE_PARAMETER}
下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。
タスクの実施¶
タスク標準時間: | 6分 |
---|
1. 前処理¶
1.1. 処理対象の状態確認¶
主処理の実施は、以下の状態であることを前提とします。
前提と異なることが判明した場合、直ちに処理を中止します。
事前条件1: IAMユーザ"handson-iam-user"には複数の有効なアクセスキーが存在する。
「IAMユーザ"handson-iam-user"には複数の有効なアクセスキーが存在する。」ことを確認します。
コマンド:
aws iam list-access-keys \ --user-name ${IAM_USER_NAME} \ --query 'AccessKeyMetadata[].[join(``,[CreateDate,`,`,Status])]' \ --output text
結果(例):
2018-01-01T00:00:00Z,Active 2019-04-30T01:23:45Z,Active
1.2. 主処理に必要な情報の取得¶
アクセスキーの作成日付取得
コマンド:
ARRAY_DATE_ISO8601=$( \ aws iam list-access-keys \ --user-name ${IAM_USER_NAME} \ --query 'AccessKeyMetadata[].CreateDate' \ --output text \ ) \ && echo ${ARRAY_DATE_ISO8601}
結果(例):
2018-01-01T00:00:00Z 2019-04-30T01:23:45Z
一番古い日付の選択
コマンド:
unset ARRAY_DATETIME_UNIX
コマンド:
if [ $(uname) == 'Linux' ]; then \ for i in $(echo ${ARRAY_DATE_ISO8601} ); do \ DATETIME_UNIX="$( date -d ${i} +%s )" \ ARRAY_DATETIME_UNIX="${ARRAY_DATETIME_UNIX} ${DATETIME_UNIX}" \ ;done \ else \ for i in $(echo ${ARRAY_DATE_ISO8601} ); do \ DATETIME_UNIX="$( date -u -jf %FT%TZ ${i} +%s )" \ ARRAY_DATETIME_UNIX="${ARRAY_DATETIME_UNIX} ${DATETIME_UNIX}" \ ;done \ fi echo ${ARRAY_DATETIME_UNIX}
コマンド:
DATETIME_UNIX=$( \ echo ${ARRAY_DATETIME_UNIX} \ | awk 'BEGIN{CONVFMT = "%.10d"; OFMT = "%.10d";};{ num = int (split($0, arr_input, " ")); current = 1; for (i = 1; i <= num; i++) { arr_output[current] = arr_input[1]; for (j = 1; j <= num; j++) { if ( j <= num ) { if ( arr_input[j] != NULL && arr_output[current] > arr_input[j] ){ arr_output[current] = int (arr_input[j]); del = j; } } } delete arr_input[del]; current++; } print arr_output[1]; }' \ ) \ && echo ${DATETIME_UNIX}
コマンド:
if [ $(uname) == 'Linux' ]; then \ DATE_ISO8601=$( date -d @${DATETIME_UNIX} +%Y-%m-%dT%TZ ); \ else \ DATE_ISO8601=$( date -u -r ${DATETIME_UNIX} +%FT%TZ ); \ fi echo ${DATE_ISO8601}
IAMアクセスキーIDの取得
コマンド:
IAM_ACCESS_KEY_ID=$( \ aws iam list-access-keys \ --user-name ${IAM_USER_NAME} \ --query "AccessKeyMetadata[?CreateDate == \`${DATE_ISO8601}\`].AccessKeyId" \ --output text \ ) \ && echo ${IAM_ACCESS_KEY_ID}
結果(例):
AKIAXXXXXXXXXXXXXXXX
2. 主処理¶
IAMアクセスキーの無効化¶
変数の確認:
cat << ETX # IAM_ACCESS_KEY_ID:"AKIAXXXXXXXXXXXXXXXX" IAM_ACCESS_KEY_ID="${IAM_ACCESS_KEY_ID}" ETX
コマンド:
aws iam update-access-key \ --user-name ${IAM_USER_NAME} \ --access-key-id ${IAM_ACCESS_KEY_ID} \ --status Inactive
結果(例):
(出力なし)
3. 後処理¶
完了条件の確認¶
主処理は、以下を満たしたときに成功したものとします。
完了条件1: IAMユーザ"handson-iam-user"の最新ではないアクセスキーが無効である。
「IAMユーザ"handson-iam-user"の最新ではないアクセスキーが無効である。」ことを確認します。
コマンド:
aws iam list-access-keys \ --user-name ${IAM_USER_NAME} \ --query 'AccessKeyMetadata[].[join(``,[CreateDate,`,`,Status])]' \ --output text
結果(例):
2018-01-01T00:00:00Z,Inactive 2019-04-30T01:23:45Z,Active