2023年2月26日日曜日

ログイン画面を通らずにAWSコンソールをコマンド一撃で開いてみる


私のPC環境

- SparkyLinux6.5

- aws-cli2.x

- jq


私のAWS環境

- AWSアカウントが2つあります。

- 認証用と検証用です。

 

私がAWSコンソールを使用するときは、サインインするときにMFAの認証コードを入力しています。

また、認証用アカウントにサインインしてから検証用アカウントにスイッチロールする手順にしています。


ちょっと見たいだけのときは、これがめんどくさいので、コマンド一撃で検証用アカウントのAWSコンソールを開くようにしました。

下記URLの情報を参考にしています。


下記のコードを ~/awsc_open.sh のPATHで保存します。

ROLE には、スイッチロールで使用するIAM Role名を設定します。

AUTH_PROFILE には、認証アカウントのprofile名(aws-cli)を設定します。

#!/bin/bash

AWS_FED_URL=https://signin.aws.amazon.com/federation
AWS_CONSOLE_URL=https://console.aws.amazon.com/
ROLE=<IamRole>
AUTH_PROFILE=<prfoile>

function urlencode
{
    echo $1 | jq -Rr '@uri'
}


arn=$(aws iam list-roles \
    --query "Roles[?RoleName == '${ROLE}'].Arn" \
    --output text)

if [ "${arn}" == "" ]; then
    echo "${ROLE} is not found."
    exit 1
fi

key=$(aws sts assume-role \
    --profile ${AUTH_PROFILE} \
    --role-arn "${arn}" \
    --role-session-name OneTimeSession \
    --query "Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" \
    --output text)

access_key=$(echo "${key}" | awk -F"\t" '{printf("%s",$1)}')
secret_access_key=$(echo "${key}" | awk -F"\t" '{printf("%s",$2)}')
session_token=$(echo "${key}" | awk -F"\t" '{printf("%s",$3)}')

if [ "${access_key}" == "" ]; then
    echo "assume-role failed."
    exit 1
fi

json="{\"sessionId\":\"${access_key}\",\"sessionKey\":\"${secret_access_key}\",\"sessionToken\":\"${session_token}\"}"

token=$(curl -s "${AWS_FED_URL}?Action=getSigninToken&Session=$(urlencode ${json})" \
    | jq -r .SigninToken)

if [ "${token}" == "" ]; then
    echo "get signin token failed."
    exit 1
fi

url="${AWS_FED_URL}?Action=login&Issuer=&Destination=$(urlencode ${AWS_CONSOLE_URL})&SigninToken=$(urlencode ${token})"

#echo ${url}
google-chrome --incognito ${url}

exit 0

このファイルを bash aliasに登録します。

~/.bashrc などに下記のように記載します。

alias awsc='~/awsc_open.sh'


ターミナルで awsc と入力してENTERすると、

下図のようなかんじでAWSコンソールを開けます。

ログイン画面は通らずに、いきなりホーム画面にいけます。



環境変数のAWS_PROFILEに設定したAWSアカウントのAWSコンソールが開きます。

Chromeのシークレットモードで開きます。

セッションの有効期限は1時間です。