クラウド事業部の原口です。

皆様は複数あるAWSアカウントの管理、どのように管理されているでしょうか?
一般的にある1つのサービスに対して以下のように環境に応じたアカウントを用意する事が多いのではないでしょうか。

「本番環境用アカウント」
「ステージング環境用アカウント」
「テスト環境用アカウント」

このように複数の環境を作ってくると問題となってくるのがログインにかかるコストになります。
MFAなどの設定をしていったり…といった事をすべての環境ぶん行う必要があったり、新しい人がジョインした、プロジェクトを抜けた、というたびにすべての環境のIAM設定が必要。またそれぞれの権限の範囲など…となってくると本当にバカにできないコストとなってきます。

これまで複数AWSアカウントの管理といえばIAMのスイッチロールを使うという方法がとられてきましたが、
今回、AWS SSOがMicrosoft AD以外も選択できるようになった、、具体的にはAWS SSO の ID ストアでユーザー ID を作成および管理ができるようになった、という事を知り、スイッチロールの代替になるのでは!?という事で検証してみました。
もう一度繰り返しますと ADが不要でAWS SSOの機能だけで利用可能となってました。
しかも無料なんですよね。すごい。

AWS SSOを利用する

0.AWS SSOに必要な環境

・AWS SSOを設定するアカウントがAWS Organizationを利用しており、その親アカウントである事
・バージニアリージョンでのみ利用可能(ですが特に問題はないかと)

①AWS SSOを有効化

まずはリージョンをバージニアに変更して AWS Single Sign-Onのページへ移動し、「AWS SSOを有効にする」をクリックします。
これだけで AWS SSO の ID ストアでユーザー ID を作成および管理ができる状態でセットアップされます

② ID ストアでユーザー ID を作成

IDソースを選択、もしくは左メニューのユーザをクリックして新規にユーザを登録します。
ユーザはパスワード認証の他にもMFA認証も対応していますので安心ですね。
ユーザ作成すると作成時に設定したメールアドレスに招待メールが送られますのでAcceptしてください。

③AWS アカウントでOrganizationに属するアカウントに対してユーザとログイン権限と認証の設定を行う

AWS アカウントを選択すると AWS Organizationで属している組織のアカウントがすべて表示されます。これらの中でログインさせたいアカウントをチェックし「ユーザの割り当て」を行います。ここで先程のIDプールで作成したユーザが一覧として出てきます。

ユーザーの設定を行ったあとは、該当組織の子アカウントに対するアクセス権限セットを設定します。IAMポリシーとほぼ同じようなイメージとなります。
これらはアカウント毎(グループ毎)に設定できる為、きめ細かな権限設定が可能です。
ちなみにここでポリシーを設定すると子アカウント側にはそのIAMロールが作られる形でした。
つまり内部的な技術仕様としてはスイッチロールを使用しているのとほぼ変わらない動きとなっているようです。
ちなみにこのIAMロールは子アカウントのrootアカウントでも削除はできませんでした。 また、cloudtrailではIDプールで設定したユーザ名で記録されていました。(完璧!)

④作成したユーザでログインする

SSOを作成した際に同時に作成されるユーザポータルよりログインします。
https://xxxxxxx.awsapps.com/start のものですね。
xxxxxxxの部分はカスタマイズ可能ですが変更は1度しかできないようですのできちんと意味のある名前にしたほうがよいです。
上記のURLにログインするとログイン画面が出てきます

ログインするとこんな形で設定したアカウントが一覧で表示されます。アタッチしている権限で Management console をクリックするとその権限でアカウントにログインできました!

感想

AWS SSO自身がIDプールを持つ事ができるようになったおかげで、Microsoft ADを使用せずとも気軽に複数アカウントへのログインが可能となりました。
内容としてはスイッチロールと大きく変わらないようなので、「スイッチロールの設定が簡単にできるようになった」と捉えて、スイッチロールの代替として使ってみてもいいのではないかと思います。
以下はAWS公式ブログより転載している画像ですがこれをきっかけに複数の他アプリへのログインやカスタムSAMLのアプリケーションへのSSOログインが可能です

まずは簡単にAWSアカウントの管理から初めてみて、今後組織のユーザのslackなどのアプリケーションもすべてこちらでログイン管理してしまうと大変便利になっていくのではないかという可能性を感じました。
AWS CLI v2 ではこのAWS SSOに対応しているという事でそのあたりもとても便利になりそうに思います。

現時点での不満点としては以下となります
・AWS Organizationが必須なので請求を一緒にできないアカウントでは厳しい
・スイッチしたロール名を変えれないので地味にどの環境にログインしているかわからなくなる

前半は仕方がないように思いますが、ログイン後のアカウントがどのAWSアカウントであるかはすぐにわかるようになると嬉しいな、、、と感じました。