概要
セキュアに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のポータルから一時認証情報をコピーして設定するやり方もある。
また、IdPはAWSアカウントとは別に用意する必要があると思っていたのだが、Identity Center内のIdPを利用することができるらしい。
この「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強制しているスイッチロールがある場合は注意。