3.6. AWS認証ファイルの作成

作業の目的 [why]

CLIで作成したアクセスキーファイルをもとに認証ファイルを作成します。

完了条件/事前条件 [設計者用情報]

完了条件 [after]

主処理は、以下を満たしたときに成功したものとします。

完了条件1
iniファイルが存在する。
完了条件2
configファイル(単体)が存在する。

事前条件 [before]

主処理の実施は、以下の状態であることを前提とします。

事前条件1
アクセスキーファイル用ディレクトリが存在する。
事前条件2
アクセスキーファイルがIAMユーザ"handson-cli-website-https-webMaintUser"のものである。

作業対象 [what]

  • IAMアクセスキーファイル

標準時間(合計)

8分

パラメータ設定

パラメータ設定の標準時間:2分

作業に必要なモノ・情報 [resource]

作業開始には、以下が全て揃っていることが必要です。

リソース1: アクセスキーファイル用ディレクトリ

アクセスキーファイルを配置したディレクトリ"${HOME}/.aws/access-key"です。

リソース2: クレデンシャルファイル用ディレクトリ

今回は"${HOME}/.aws/source"をクレデンシャルファイル用ディレクトリとします。

ディレクトリが存在することを確認します。

コマンド:

ls -d ${HOME}/.aws/source

結果(例:存在する場合):

${HOME}/.aws/source

存在しない場合は作成します。

コマンド

mkdir -p ${HOME}/.aws/source

リソース3: IAMユーザ名

  • アクセスキーを作成するIAMユーザ名です。
  • 今回は"handson-cli-website-https-webMaintUser"とします。

リソース4: デフォルトリージョン

  • IAMユーザがデフォルトで利用するリージョンです。
  • 今回は"ap-northeast-1"とします。

パラメータの指定

作業に必要なパラメータを変数に格納をします。

0.1. アクセスキーファイル用ディレクトリの指定

変数の設定:

DIR_ACCESS_KEY="${HOME}/.aws/access-key"

0.2. クレデンシャルファイル用ディレクトリの指定

変数の設定:

DIR_CREDENTIAL="${HOME}/.aws/source"

0.3. IAMユーザ名の指定

IAMユーザ名を指定します。

変数の設定:

IAM_USER_NAME="handson-cli-website-https-webMaintUser"

0.4. デフォルトリージョンの指定

IAMユーザがデフォルトで利用するリージョンを指定します。

変数の設定:

REGION_AWS_CONFIG='ap-northeast-1'

0.5. アクセスキーファイル名の指定

ダウンロードしたアクセスキーファイル名を指定します。

変数の設定:

IAM_ACCESS_KEY_CURRENT='0'

変数の設定:

FILE_ACCESS_KEY="${DIR_ACCESS_KEY}/${IAM_USER_NAME}-token-${IAM_ACCESS_KEY_CURRENT}.json" \
  && echo ${FILE_ACCESS_KEY}

結果(例):

${HOME}/.aws/access-key/handson-cli-website-https-webMaintUser-token-0.json

パラメータの保存

設定されている変数の保存先となるファイル名を指定します。

変数の設定:

DIR_PARAMETER="${HOME}/tmp/parameter-handson-cli-website-https"
FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-awscli-credentials-create.env" \
  && echo ${FILE_PARAMETER}

結果(例):

${HOME}/tmp/parameter-handson-cli-website-https/2019-07-14-awscli-credentials-create.env

各変数に正しいパラメータ値が格納されていることを確認しながら保存します。

変数の確認:

cat << EOF > ${FILE_PARAMETER}

  0.1. DIR_ACCESS_KEY:"${HOME}/.aws/access-key"
       DIR_ACCESS_KEY="${DIR_ACCESS_KEY}"
  0.2. DIR_CREDENTIAL:"${HOME}/.aws/source"
       DIR_CREDENTIAL="${DIR_CREDENTIAL}"
  0.3. IAM_USER_NAME:"handson-cli-website-https-webMaintUser"
       IAM_USER_NAME="${IAM_USER_NAME}"
  0.4. REGION_AWS_CONFIG:"ap-northeast-1"
       REGION_AWS_CONFIG="${REGION_AWS_CONFIG}"
  0.5. FILE_ACCESS_KEY:"${HOME}/.aws/access-key/handson-cli-website-https-webMaintUser-token-0.json"
       FILE_ACCESS_KEY="${FILE_ACCESS_KEY}"

EOF

cat ${FILE_PARAMETER}

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

タスクの実施

1. 前処理

処理対象の状態確認

主処理の実施は、以下の状態であることを前提とします。

前提と異なることが判明した場合、直ちに処理を中止します。

事前条件1: アクセスキーファイル用ディレクトリが存在する。

「アクセスキーファイル用ディレクトリが存在する。」ことを確認します。

コマンド:

ls -d ${DIR_ACCESS_KEY}

結果(例):

${HOME}/.aws/access-key

事前条件2: アクセスキーファイルがIAMユーザ"handson-cli-website-https-webMaintUser"のものである。

「アクセスキーファイルがIAMユーザ"handson-cli-website-https-webMaintUser"のものである。」ことを確認します。

コマンド:

cat ${FILE_ACCESS_KEY} \
  | jp.py 'AccessKey.UserName' \
  | grep ${IAM_USER_NAME}

結果(例):

"handson-cli-website-https-webMaintUser"

2. 主処理

認証情報個別ファイルの作成

iniファイル作成

~/.aws/creadentialsファイルに追加できるINI形式で出力します。

変数の設定:

FILE_USER_CREDENTIAL="${DIR_CREDENTIAL}/${IAM_USER_NAME}.ini" \
  && echo ${FILE_USER_CREDENTIAL}

結果(例):

${HOME}/.aws/source/handson-cli-website-https-webMaintUser.ini

変数の確認:

cat << ETX

  # FILE_ACCESS_KEY:"${HOME}/.aws/access-key/handson-cli-website-https-webMaintUser-token-0.json"
    FILE_ACCESS_KEY="${FILE_ACCESS_KEY}"
  # FILE_USER_CREDENTIAL:"${HOME}/.aws/source/handson-cli-website-https-webMaintUser.ini"
    FILE_USER_CREDENTIAL="${FILE_USER_CREDENTIAL}"

ETX

コマンド:

echo "[${IAM_USER_NAME}]" > ${FILE_USER_CREDENTIAL}

cat "${FILE_ACCESS_KEY}" \
  | jp.py 'AccessKey' \
  | sed '/[{}]/d' | sed 's/[\" ,]//g' | sed 's/:/=/' \
  | sed 's/AccessKeyId/aws_access_key_id/' \
  | sed 's/SecretAccessKey/aws_secret_access_key/' \
  | grep '^aws_' \
  >> ${FILE_USER_CREDENTIAL} \
    && cat ${FILE_USER_CREDENTIAL}

結果:

[handson-cli-website-https-webMaintUser]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

configファイル(単体)作成

~/.aws/configファイルに追加できる形式で出力します。

変数の設定:

REGION_AWS_CONFIG="ap-northeast-1" \
  && echo ${REGION_AWS_CONFIG}

変数の設定:

FILE_USER_CONFIG="${DIR_CREDENTIAL}/${IAM_USER_NAME}.config" \
  && echo ${FILE_USER_CONFIG}

変数の確認:

cat << ETX

  # IAM_USER_NAME:"handson-cli-website-https-webMaintUser"
    IAM_USER_NAME="${IAM_USER_NAME}"
  # REGION_AWS_CONFIG:"ap-northeast-1"
    REGION_AWS_CONFIG="${REGION_AWS_CONFIG}"
  # FILE_USER_CONFIG:"${DIR_CREDENTIAL}/handson-cli-website-https-webMaintUser.config"
    FILE_USER_CONFIG="${FILE_USER_CONFIG}"

ETX

コマンド:

echo "[profile ${IAM_USER_NAME}]" > ${FILE_USER_CONFIG} \
  && echo "region=${REGION_AWS_CONFIG}" >> ${FILE_USER_CONFIG} \
  && echo "" >> ${FILE_USER_CONFIG} \
  && cat ${FILE_USER_CONFIG}

結果(例):

[profile handson-cli-website-https-webMaintUser]
region=ap-northeast-1

3. 後処理

完了条件の確認

主処理は、以下を満たしたときに成功したものとします。

完了条件1: iniファイルが存在する。

「iniファイルが存在する。」ことを確認します。

コマンド:

ls ${FILE_USER_CREDENTIAL}

結果(例):

${HOME}/.aws/source/handson-cli-website-https-webMaintUser.ini

完了条件2: configファイル(単体)が存在する。

「configファイル(単体)が存在する。」ことを確認します。

コマンド:

ls ${FILE_USER_CONFIG}

結果(例):

${HOME}/.aws/source/handson-cli-website-https-webMaintUser.config

3.3. 後処理に必要な作業

  • ${HOME}/.aws/source/handson-cli-website-https-webMaintUser.iniの内容を~/.aws/credentialsに追記します。

    コマンド:

    cat ${HOME}/.aws/source/handson-cli-website-https-webMaintUser.ini >> ~/.aws/credentials
    
  • ${HOME}/.aws/source/handson-cli-website-https-webMaintUser.configの内容を~/.aws/configに追記します。

    コマンド:

    cat ${HOME}/.aws/source/handson-cli-website-https-webMaintUser.config >> ~/.aws/config
    

注釈

以下の環境変数を設定することで、プロファイル名"handson-cli-website-https-webMaintUser"の権限でAWSにアクセスできます。

変数の設定:

export AWS_DEFAULT_PROFILE="handson-cli-website-https-webMaintUser"

プロファイルの権限を無効にする場合は、環境変数を削除します。

変数の設定:

export -n AWS_DEFAULT_PROFILE

完了