AWS-CLIをSSOでログインしてから別のIAMロールに切り替える設定
はじめに
この記事は、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
手順
- SSO用プロファイル(
profile-for-sso
)を指定して、AWS SSOにログイン。 - IAMロール用プロファイル(
profile-for-role-s
)を指定して、任意のAWS-CLIコマンドが実行可能!
詳細
設定と手順を説明します。
ポイントは次の2つ。(これがAWSの公式ドキュメントには意外にも載っていない)
- AWS-CLIのconfigファイル(
.aws/config
)のsource_profile
には、SSOを設定しているプロファイル(profile-for-sso
)も、問題なく指定できる。 -
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
)を設定します。
手順
- 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
(毎回異なる)を入力してください。
- 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-vault(
- AWS-CLI以外の、configファイル(
.aws/config
)を使うアプリケーションが上記の設定に対応していない場合がある。- 環境変数(
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
、AWS_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