個人AWSアカウントのIAMユーザをSSOユーザに切り替えた

Study

概要

セキュアにAWS CLIを使う方法を模索していたところ、結局AWSが推奨するAWS IAM Identity Centerで良かった、という話。

前置き

以前に下記の記事で述べたように、マネジメントコンソールよりAWS CLIを使った方が絶対に効率が上がる場面がいくつかある

この記事内でも述べたが、IAMユーザを使ってAWS CLIを使用するにはアクセスキー・シークレットアクセスキーが必要になる。
これらは永続クレデンシャルといわれるもので、有効期限がない認証情報のためセキュリティリスクが伴う

そのため、MFAを強制するポリシーを設定してCLI上で認証する等方法があるのだがこれが割と面倒。

それを解決するためにAWS CLIでMFAを行う用のCLIツールが開発されていたりする。

GitHub - broamski/aws-mfa: Manage AWS MFA Security Credentials
Manage AWS MFA Security Credentials. Contribute to broamski/aws-mfa development by creating an account on GitHub.

ただ、ツールによっては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のポータルから一時認証情報をコピーして設定するやり方もある。

SSOアクセスポータル。「Access Keys」からCLI用の認証情報を取得できる。

また、IdPはAWSアカウントとは別に用意する必要があると思っていたのだが、Identity Center内のIdPを利用することができるらしい。

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を管理しているらしい。

  • Identity CenterでのMFA認証とスイッチロールでのMFA認証のチェック
    Identity CenterでのMFA認証とIAMでのMFA認証は別扱いされている(MFAデバイスが別扱いなのが根拠)ため、例えば以下のようにスイッチロール先のIAMロールにて信頼関係のポリシーに対しMFA認証されていることを必須にした場合、Identity CenterでMFA認証を有効化し、MFA認証したとしてもIAMではMFA認証していないことになるため、このスイッチロールは失敗する
AWS Identity Centerの備忘録:https://qiita.com/Ishikawa_Kazuyoshi/items/c9bc9bb2c3a9acdc4261

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強制しているスイッチロールがある場合は注意

参考

AWS CLI のいろんな認証方式
AWS CLIからのMFA(多要素認証)を楽にするツール(aws-mfa)を使ってみた - Qiita
AWS CLIからのMFA(多要素認証)を楽にするツール(aws-mfa)を使ってみたはじめにこんにちは、エンジニアのogadyです。うちの会社では、IAMユーザーのMFAをマストとしています…
AWS Identity Centerの備忘録 - Qiita
AWS Identity Center(旧Single Sign On、SSO)の基本概念公式サイト:AWS Identity Center (successor to AWS Single …
デフォルトの IAM アイデンティティセンターディレクトリを使用してユーザーアクセスを設定する - AWS IAM Identity Center
IAM アイデンティティセンターを初めて有効にすると、Identity Center ディレクトリがデフォルトの ID ソースとして自動的に構成されるため、ID ソースを選択する必要はありません。組織が AWS Directory Serv...
タイトルとURLをコピーしました