概要
セキュアにAWS CLIを使う方法を模索していたところ、結局AWSが推奨するAWS IAM Identity Centerで良かった、という話。
前置き
以前に下記の記事で述べたように、マネジメントコンソールよりAWS CLIを使った方が絶対に効率が上がる場面がいくつかある。
この記事内でも述べたが、IAMユーザを使ってAWS CLIを使用するにはアクセスキー・シークレットアクセスキーが必要になる。
これらは永続クレデンシャルといわれるもので、有効期限がない認証情報のためセキュリティリスクが伴う。
そのため、MFAを強制するポリシーを設定してCLI上で認証する等方法があるのだがこれが割と面倒。
それを解決するためにAWS CLIでMFAを行う用のCLIツールが開発されていたりする。
ただ、ツールによってはCLIのデフォルトプロファイル以外は動作しなかったりと、使い勝手の点で若干不満があった。
結論としては、AWSが推奨しているAWS IAM Identity Center(旧AWS SSO)を使用すれば良いと思う。
内容
AWS IAM Identity Centerとは
Identity Centerは、もともとAWS SSOという名前で提供されていたサービスである。
複数のAWSアカウント、アプリケーションへのアクセスを一元管理することが可能になる。
組織が複数のAWSアカウントを利用している場合に、Identity Provider(IdP)というところで一元管理された認証情報を使用することで、アカウント毎に認証情報を管理する必要がなくなる。
今回IAMユーザから移行した理由
冒頭でも触れたとおり、Identity CenterはAWSが推奨している方法であり、もともとMFAが有効化されている。
そのおかげか、AWS CLIでのSSOユーザでのMFAの利用方法は煩雑ではない。aws sso login
を実行してブラウザからMFAを行える。
$ aws sso login
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.ap-northeast-1.amazonaws.com/
Then enter the code:
XXXX-XXXX
gio: https://device.sso.ap-northeast-1.amazonaws.com/?user_code=XXXX-XXXX: Operation not supported
Successfully logged into Start URL: https://x-xxxxxxxxxx.awsapps.com/start/
手軽な方法として、SSOのポータルから一時認証情報をコピーして設定するやり方もある。
![](https://www.akahige-life.com/wp-content/uploads/2024/05/sso-portal-access-keys.png)
また、IdPはAWSアカウントとは別に用意する必要があると思っていたのだが、Identity Center内のIdPを利用することができるらしい。
![](https://www.akahige-life.com/wp-content/uploads/2024/05/identity-center-settings.png)
この「Identity Center directory」というのが、Identity Center内で管理されるIdPである。
IAMユーザからの移行で少し詰まった点
今回SSOユーザ利用に切り替えたアカウントでは、他アカウントへのスイッチロールを想定しており、MFAなしでのスイッチロールを禁止していた。
具体的には、スイッチロールに下記のような信頼関係を設定していた。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountId:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}
ただ、このままだとSSOユーザではスイッチロールができなかった。
MFA制限用のCondition
句が原因としか考えられないので、削除してみたところスイッチロールできた。
どうやら、SSOユーザの場合はIAMと別でMFAを管理しているらしい。
AWS Identity Centerの備忘録:https://qiita.com/Ishikawa_Kazuyoshi/items/c9bc9bb2c3a9acdc4261
- Identity CenterでのMFA認証とスイッチロールでのMFA認証のチェック
Identity CenterでのMFA認証とIAMでのMFA認証は別扱いされている(MFAデバイスが別扱いなのが根拠)ため、例えば以下のようにスイッチロール先のIAMロールにて信頼関係のポリシーに対しMFA認証されていることを必須にした場合、Identity CenterでMFA認証を有効化し、MFA認証したとしてもIAMではMFA認証していないことになるため、このスイッチロールは失敗する
SSOユーザのみにスイッチロールを許可する設定にしておいた。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountId:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:PrincipalArn": "arn:aws:iam::AccountId:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/*"
}
}
}
]
}
これである程度セキュリティを保ちながらスイッチロールできるようになった。
まとめ
もし普段使いでIAMユーザを使っていたら、SSOユーザに乗り換えてもいいのでは。
特に、IAMユーザ+MFAでCLIを頑張っている方へ。
感想
IAMユーザでAWS CLIを使うこともできるけど、なんといっても永続クレデンシャルが微妙。
Identity Centerは、IdPをこっちで用意しないと使えなそう、料金がかかりそう、等と思って手を出していなかったが、全然そんなことはなかった。
セキュアにAWS CLIが使える環境が手軽にセットアップできるので、複数アカウントを持っていなくても使用した方が良いと思った。
MFA強制しているスイッチロールがある場合は注意。
参考
![](https://res.cloudinary.com/zenn/image/upload/s--RkfI9uWb--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:AWS%2520CLI%2520%25E3%2581%25AE%25E3%2581%2584%25E3%2582%258D%25E3%2582%2593%25E3%2581%25AA%25E8%25AA%258D%25E8%25A8%25BC%25E6%2596%25B9%25E5%25BC%258F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:NH%25238939%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2JhZmYxZWFjMDIuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QVdTJTIwQ0xJJUUzJTgxJThCJUUzJTgyJTg5JUUzJTgxJUFFTUZBJTI4JUU1JUE0JTlBJUU4JUE2JTgxJUU3JUI0JUEwJUU4JUFBJThEJUU4JUE4JUJDJTI5JUUzJTgyJTkyJUU2JUE1JUJEJUUzJTgxJUFCJUUzJTgxJTk5JUUzJTgyJThCJUUzJTgzJTg0JUUzJTgzJUJDJUUzJTgzJUFCJTI4YXdzLW1mYSUyOSVFMyU4MiU5MiVFNCVCRCVCRiVFMyU4MSVBMyVFMyU4MSVBNiVFMyU4MSVCRiVFMyU4MSU5RiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YjM3MjJmZDBmOGVmZDRlNzNjMDBkMzYzZGY0NzNkMTI&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBvZ2FkeSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YWNjNWZmN2I1ZWViOTBkODkxOTU4ZTc1NmNlZjNjNGE&blend-x=142&blend-y=486&blend-mode=normal&s=3bc7f47ea8cd0da2e82d4a8405ab232e)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QVdTJTIwSWRlbnRpdHklMjBDZW50ZXIlRTMlODElQUUlRTUlODIlOTklRTUlQkYlOTglRTklOEMlQjImdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWUxZGEyNGFmN2M4ZGE2N2JlZmI5YTVkY2Q2MjNhMjdi&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBJc2hpa2F3YV9LYXp1eW9zaGkmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWU2OWNjZGE2ZGQ5ZGEwN2UyNDcwMDllZGQzOWYxMTE3&blend-x=142&blend-y=486&blend-mode=normal&s=ab0d0650ec2f6fc8f53c5f5229ba02d4)