🔐
IAM Identity Center を試してみた
最初のセットアップ
この手順を実施すればひとまずできる。
権限セットの作成
この手順を実施すればひとまずできる。
aws-vault のプロファイルを作成する
シングルアカウントの場合
~/.aws/config
[profile homelabo-sso]
sso_start_url = https://<セットアップ中に表示された値>.awsapps.com/start
sso_region = ap-northeast-1
sso_account_id = <セットアップした先のAWSアカウント番号:12桁>
sso_role_name = AdministratorAccess # <権限セットの作成で指定した名前>
region = ap-northeast-1
マルチアカウントの場合
~/.aws/config
[profile homelabo-sso]
sso_start_url=https://<セットアップ中に表示された値>.awsapps.com/start
sso_region=ap-northeast-1
sso_registration_scopes = sso:account:access
[profile homelabo-sso-admin]
sso_account_id=<スイッチ先のAWSアカウント番号:12桁>
sso_role_name = AdministratorAccess # <権限セットの作成で指定した名前>
include_profile = homelabo-sso
[profile homelabo-sso-readonly]
sso_account_id=<スイッチ先のAWSアカウント番号:12桁>
sso_role_name = ReadonlyAccess
include_profile = homelabo-sso
簡単にスイッチするためのシェル設定
aws-vaultを使っていてめんどくさいのは、awscliコマンドを実行するたびコマンドの頭にaws-vaultを追加しないといけないこと。
コマンドを実行する時だけクレデンシャル情報が後続のコマンドに渡されるためセキュアではあるんだけど不便だ。
IAM Identity Center にすることで永続的なアクセスキーは発行されなくなったので、下記のようにしてクレデンシャル情報を環境変数に設定すると捗る。
エイリアス
シェルのエイリアスを設定しておくと便利。
~/.zshrc
alias lh='export $(aws-vault exec homelabo-sso -- env | grep AWS_ | grep -v AWS_VAULT)'
関数
関数にして複数Roleに対応してもよい。
~/.zshrc
set_aws_credential(){
if [ $# -eq 1 ];then
# Role指定有り
# クレデンシャルの初期化
unset AWS_DEFAULT_REGION
unset AWS_REGION
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN_TTL
unset AWS_ACCESS_KEY_ID
unset AWS_CREDENTIAL_EXPIRATION
unset AWS_SESSION_TOKEN
role=$1
echo "Switch: $role"
credential=$(aws-vault exec $role -- env | grep AWS_ | grep -v AWS_VAULT)
if [ "$?" -eq 0 ];then
export $credential
aws sts get-caller-identity --query "Account" --output text
else
echo 'Error: Role not found.'
fi
else
# Role指定無し
echo "Usage: set_aws_credential RoleName"
fi
}
使い方
$ set_aws_credential homelabo-sso
トラブルシューティング
久しぶりにaws-vaultの設定を行ったら、起動時にエラーが出たのでメモしておく。
gpg: error retrieving 'me@example.com' via WKD: No data
事象
aws-vault exec homelabo-sso
を実行した所、下記エラーが出力された。
Opening the SSO authorization page in your default browser (use Ctrl-C to abort)
https://device.sso.ap-northeast-1.amazonaws.com/?user_code=XXXX-XXXX
gpg: error retrieving 'me@example.com' via WKD: No data
gpg: me@example.com: skipped: No data
gpg: [stdin]: encryption failed: No data
Password encryption aborted.
aws-vault: error: exec: Failed to get credentials for homelabo-sso: exit status 1
解決策
gpg --gen-key
を実行して、me@example.com
に対応する鍵を作成する。
$ gpg --gen-key
<snip>
GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。
本名: <名前>
電子メール・アドレス: <ここにme@example.comを入力する>
コメント:
次のユーザIDを選択しました:
"me <me@example.com>"
もしかして
IAM Identity Centerに切り替えたことでGPGにメールアドレスが連携されるようになり、対応する鍵を探しに行くようになったため、これまでアクセスキーを暗号化するために適当な名前とメールアドレスで作っていた鍵では対応できなくなったのかもしれない。
Discussion