IAM Identity Center を使うようになってから、組織内のメンバーアカウントに SSO ログインできて非常に便利になりました。
ただし慣れてくると、ログインの反復動作はできるだけ早く終えたくなるのが人間の性。
CLI ログイン用に bash でファンクション化しておきました。
単なる短縮ではなく、「入力削減」「誤操作防止」「プロファイルの明示性維持」を同時に満たすことを目指しました。
IAM Identity Center を使ってマルチアカウント運用している方で、CLI 利用が日常になってきた方には共感いただけるかもしれません。
1. 結論
bash ファイルに以下を追加します。
追加するファンクション
function aws-profiles() {
command -v aws >/dev/null 2>&1 || { echo "aws CLI not found"; return 127; }
aws configure list-profiles
}
function aws-login() {
if [ -z "$1" ]; then
echo "Usage: aws-login <profile-name>"
echo "Tip: run aws-profiles to list your AWS profiles"
return 2
fi
command -v aws >/dev/null 2>&1 || { echo "aws CLI not found"; return 127; }
if ! aws sso login --profile "$1"; then
return 1
fi
export AWS_PROFILE="$1"
aws-who
}
function aws-who() {
command -v aws >/dev/null 2>&1 || { echo "aws CLI not found"; return 127; }
if [ -z "$AWS_PROFILE" ]; then
printf "\nAWS_PROFILE -> ❌\n"
else
printf "\nAWS_PROFILE -> %s\n" "$AWS_PROFILE"
fi
local REGION
if [ -n "$AWS_PROFILE" ]; then
REGION=$(aws configure get region --profile "$AWS_PROFILE" 2>/dev/null)
else
REGION=$(aws configure get region 2>/dev/null)
fi
if [ -z "$REGION" ]; then
REGION="${AWS_REGION:-$AWS_DEFAULT_REGION}"
fi
if [ -z "$REGION" ]; then
printf "AWS_REGION -> ❌\n"
else
printf "AWS_REGION -> %s\n" "$REGION"
fi
if [ -n "$AWS_PROFILE" ]; then
aws sts get-caller-identity --profile "$AWS_PROFILE"
else
aws sts get-caller-identity
fi
printf "\n"
}
function aws-unset() {
unset AWS_PROFILE AWS_DEFAULT_PROFILE
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
unset AWS_REGION AWS_DEFAULT_REGION
aws-who
}
2. 正規ルート
AWS CLI で IAM Identity Center に接続する公式手順はこちらです。
おおまかに以下の手順となります。
- SSO セッションとアカウントプロファイルを
~/.aws/configに設定します -
aws sso login --profile <プロファイル名>でログインします -
aws sts get-caller-identity --profile <プロファイル名>で認証情報を確認します - プロファイルを指定しつつ aws コマンドを実行します
素晴らしく便利なのですが、コマンドを短縮したいのと、プロファイル指定を省略したくなる気持ちが芽生えます。
その上で、アカウントの取り違えなど誤操作もできるだけ防げるような仕組みにしたい。
そしてデフォルトのプロファイルに頼らない設計も維持したい。
と色々と構想が膨らんでいきました。
3. ファンクションの使い方
bash ファイルに記述を追加すると、以下のファンクションが使えるようになります。
入力文字数の削減だけでなく、プロファイルの明示性を保ちながら安全に切り替えられる点がポイントです。
~/.aws/config の設定は完了している前提です。
aws-profiles
登録しているプロファイルを一覧で出せます。
以下を実行しているだけではあります。
aws configure list-profiles
aws-login <プロファイル名>
プロファイル名を指定するとログインできます。
SSO ログインが済んでいない場合はブラウザが開きますので、AWS アクセスポータルにログインして認証します。
次の aws-who が同時に実行され、プロファイル名、リージョン、AWS アカウント、ロール名が出力されるのがミソです。
すでに有効な SSO セッションがある場合は再認証なしで終了し、AWS_PROFILE が切り替わります。
aws-who
プロファイル名、リージョン、AWS アカウント、ロール名を出力します。
間違った情報でログインしていないか、いつでも確認できます。
AWS_PROFILE -> TT-dev-readonly
AWS_REGION -> ap-northeast-1
{
"UserId": "AXXXX:tadokoro",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/AWSReservedSSO_ReadOnlyAccess_xxxxx/tadokoro"
}
aws-unset
AWS ログイン関連の環境変数をひと通り消去します。
SSO セッション自体はキャッシュに残りますが、AWS_PROFILE を解除することで CLI からの利用を停止できます。
まとめ
小さな工夫ですが、マルチアカウント運用では どのアカウントに入っているかを常に意識できる仕組み が重要だと改めて感じました。
効率化に繋がるものは何でも積極的に取り入れていきたいですね。
今日も小さな学びを。
IAM Identity Center 関連記事