🔐

IAM Identity Center を試してみた

2023/02/11に公開

最初のセットアップ

https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/get-started-enable-identity-center.html

この手順を実施すればひとまずできる。

権限セットの作成

https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/get-started-create-an-administrative-permission-set.html

この手順を実施すればひとまずできる。

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