⛑️

AWS-CLIをSSOでログインしてから別のIAMロールに切り替える設定

2022/05/30に公開

はじめに

この記事は、AWS SSOの利用者向けに、SSOログイン後にさらに別のIAMロールに切り替えて作業するためのAWS-CLIの設定を紹介する記事です。

次の画像のような環境で、AWS-CLIでIAMロールに切り替えて作業したいという場合に、今回紹介する設定が活躍します。この環境では、SSOで管理されているユーザAに許可セット(Permission Set)を割り当てて、IAMロールSにAssumeRoleできるように設定しています。

このような設定は、AWS SSOユーザにログインしてから、非Organizationのアカウントで作業したいというケースに有用です。

今回の記事では、この設定を前提として、AWS-CLIから、ユーザAにログインして、IAMロールSに切り替えて作業するための設定と手順を説明します。

結論

設定

AWS-CLIのconfigファイル(.aws/config

[profile profile-for-sso]
region = <Your-Region>
sso_start_url = https://<Your-Custom-Subdomain>.awsapps.com/start
sso_region = <Your-Region>
sso_account_id = <Account-AsumeRole-From>
sso_role_name = permission-set-x

[profile profile-for-role-s]
region = <Your-Region>
role_arn = arn:aws:iam::<Account-AsumeRole-To>:role/role-s
source_profile = profile-for-sso

手順

  1. SSO用プロファイル(profile-for-sso)を指定して、AWS SSOにログイン。
  2. IAMロール用プロファイル(profile-for-role-s)を指定して、任意のAWS-CLIコマンドが実行可能!

詳細

設定と手順を説明します。

ポイントは次の2つ。(これがAWSの公式ドキュメントには意外にも載っていない)

  1. AWS-CLIのconfigファイル(.aws/config)のsource_profileには、SSOを設定しているプロファイル(profile-for-sso)も、問題なく指定できる。
  2. aws sso loginコマンドで指定するプロファイルは、SSOを設定しているプロファイル(profile-for-sso)。

設定

AWS-CLIのconfigファイル(.aws/config

[profile profile-for-sso]
region = <Your-Region>
sso_start_url = https://<Your-Custom-Subdomain>.awsapps.com/start
sso_region = <Your-Region>
sso_account_id = <Account-AsumeRole-From>
sso_role_name = permission-set-x

[profile profile-for-role-s]
region = <Your-Region>
role_arn = arn:aws:iam::<Account-AsumeRole-To>:role/role-s
source_profile = profile-for-sso

ご存じのとおり、source_profileは、IAMロールへの切替を自動化するために、切替元のプロファイルを指定するオプションです。ここでは、切替元はSSOを設定しているプロファイル(profile-for-sso)で、切替先がIAMロールを設定しているプロファイル(profile-for-role-s)になりますね。つまり、IAMロールを設定しているプロファイル(profile-for-role-s)のsource_profileにSSOを設定しているプロファイル(profile-for-sso)を設定します。

手順

  1. SSO用プロファイル(profile-for-sso)を指定して、AWS SSOにログイン。
$ aws sso login --profile profile-for-sso
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.<Your-Region>.amazonaws.com/

Then enter the code:

ABCD-EFGH
Successully logged into Start URL: https://<Your-Custom-Subdomain>.awsapps.com/start

ここで、もし切替先であるIAMロールS用プロファイル(profile-for-role-s)を指定してしまうと、Missing the following required SSO configuration values: sso_start_url, sso_region, sso_role_name, sso_account_id. To make sure this profile is properly configured to use SSO, please run: aws configure sso(SSOの設定が無い)と怒られますから、注意してください。

自動でブラウザが開くので、ユーザAで認証してください。認証方法は、AWS SSOの設定方法によって異なりますので、ご注意ください。

もし自動でブラウザが開かなかったら、コマンドの出力文に従って手動で開き、https://device.sso.<Your-Region>.amazonaws.com/ABCD-EFGH(毎回異なる)を入力してください。

  1. IAMロール用プロファイル(profile-for-role-s)を指定して、任意のAWS-CLIコマンドが実行可能!

これで、AWS-CLIから、IAMロールSとして作業できるようになりました。IAMロール用プロファイル(profile-for-role-s)を指定すれば、IAMロールSとして任意のAWS-CLIコマンドを実行できます。

試しにaws sts get-caller-identityを実行すると、ちゃんとIAMロールSとして実行できていることがわかりますね。

aws sts get-caller-identity --profile profile-for-role-s
{
    "UserId": "AROAXXXXXXXXXXXXXXXXX:botocore-session-9999999999",
    "Account": "<Account-AsumeRole-To>",
    "Arn": "arn:aws:sts::<Account-AsumeRole-To>:assumed-role/role-s/botocore-session-9999999999"
}

まとめ

AWS-CLIから、SSOユーザにログインして、IAMロールに切り替えて作業するための設定と手順を紹介しました。かなり簡単に設定できました✨

今後の課題

  • SSO用プロファイル(profile-for-sso)を指定するのが面倒。
    • aws-vault(aws-vault exec profile-for-role-s)で解決できます。
  • AWS-CLI以外の、configファイル(.aws/config)を使うアプリケーションが上記の設定に対応していない場合がある。
    • 環境変数(AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)での認証に対応したアプリケーションならば、aws-vault(aws-vault exec profile-for-role-s)でサブシェルを立ち上げれば解決できます。

aws-vaultは救い・・・👼
詳しくは別記事で書ければ書きたいですね・・・。

参考(ていうか元ネタ)

Using an IAM Role with CLI + SSO · Issue #5933 · aws/aws-cli

Discussion