LoginSignup
1
1

More than 1 year has passed since last update.

MFA 保護で AWS CLI 利用を簡単にする関数

Posted at

はじめに

以下のようにMFA保護を強制されたIAMユーザーの場合、MFA認証されていない場合すべてのAWSアクションへのアクセスが拒否されます。
IAMユーザーの認証情報を利用する場合もMFAトークンの入力が必要になり、AWS CLIを利用したい場合は一時認証情報を払い出す必要があります。

FYIにあるようにget-session-tokenで払い出した一時認証情報を環境変数へエクスポートを行うのですが、コピペする手間を極力無くすために関数にすることで簡略化できます

FYI

Require

  • AWS CLI
  • jq

コード

.bashrcや.zshrcに追記してご利用ください

function _aws_get_session_token() {
    local PROFILE_NAME=$1
    local MFA_TOKEN_CODE=$2
    local DURATION_SECONDS=3600

    # プロファイル, mfa
    if [ $# -ne 2 ]; then
        echo "引数が足りません"
        return 1
    fi

    local TARGET_AWS_ACCOUNT_ID=$(aws sts get-caller-identity \
        --query 'Account' \
        --output text \
        --profile $PROFILE_NAME \
        )

    local SERIAL_NUMBER=$(aws sts get-caller-identity \
        --query 'Arn' \
        --output text \
        --profile $PROFILE_NAME \
        | sed -e s/:user/:mfa/g
        )

    local SESSION_TOKEN=$(aws sts get-session-token \
        --duration-seconds ${DURATION_SECONDS} \
        --serial-number $SERIAL_NUMBER \
        --token-code $MFA_TOKEN_CODE \
        --profile $PROFILE_NAME \
        )

    echo "${TARGET_AWS_ACCOUNT_ID} MFA Authentication Success. (${SERIAL_NUMBER})"

    _unset_aws_session_token

    export AWS_ACCESS_KEY_ID=$(echo $SESSION_TOKEN | jq -r .Credentials.AccessKeyId)
    export AWS_SECRET_ACCESS_KEY=$(echo $SESSION_TOKEN | jq -r .Credentials.SecretAccessKey)
    export AWS_SESSION_TOKEN=$(echo $SESSION_TOKEN | jq -r .Credentials.SessionToken)
}

function _unset_aws_session_token() {
    unset AWS_ACCESS_KEY_ID
    unset AWS_SECRET_ACCESS_KEY
    unset AWS_SESSION_TOKEN
}

# エイリアスコマンド
alias mfa_session_token="_aws_get_session_token my_profile_name"

利用方法

MFAトークンを引数としエイリアスコマンドを実行します。

mfa_session_token NNNNNN

一時認証が成功すれば以下が出力されます。

123456789012 MFA Authentication Success. (arn:aws:iam::123456789012:mfa/daisuke-araki)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1