AWS SSO
Control TowerのOUにアカウントを属させて、OUの再登録を行うと、アカウントのrootユーザーメールアドレス宛にInvitation to join AWS Single Sign-On
という件名のメールが来る。
Hello Admin User,
Your AWS Organization (AWS Account #xxxxxxxxxxxx) uses AWS Single Sign-On (SSO) to provide access to AWS accounts and business applications.
Your administrator has invited you to access the AWS Single Sign-On (SSO) user portal. Accepting this invitation activates your AWS SSO user account so that you can access assigned AWS accounts and applications. Click on the link below to accept this invitation.
サインアップ > サインインし、アカウント > AWSAdministratorAccessのマネコンを選択するとマネコンにログインできる。
AWSReservedSSO_AWSAdministratorAccessというRoleでログインした状態となる。
また、アカウント内に以下のRoleが自動作成されていることが確認できた。
- AWSReservedSSO_AWSAdministratorAccess_xxxxxxxxxxxxxxxx
- AWSReservedSSO_AWSOrganizationsFullAccess_xxxxxxxxxxxxxxxx
- AWSReservedSSO_AWSPowerUserAccess_xxxxxxxxxxxxxxxx
- AWSReservedSSO_AWSReadOnlyAccess_xxxxxxxxxxxxxxxx
Root OUのアカウントのSSOのコンソールを見ると、先ほどSSOの招待を受けたアカウントで、前述の4Roleのアクセス権限セットが存在することを確認できた。
IdPとしてGoogle Workspacesを使うことにする。
SAML連携するところまでは、以下の記事の通りで実現できた。
ただ、AWS SSO側にユーザーをいちいち作成しなければならないのがつらい。
Google Workspaceが情シス管理だったとすると、情シスからSREが情報共有を受けて、AWS SSO側にユーザーを追加しなければならない。その運用は(たとえAWS SSOのユーザーをTerraform管理していたとしても)つらい。
AWS SSOを使わず、SAML連携でシングルサインオンを実現することも可能なので、そちらも考えてみる。
この場合、AWS側はRoleのみ用意し、Google Workspace側で誰がどのRoleを引き受けできるかを管理することになる。Google Workspace側のユーザーをTerraform管理することもできるだろう。
ただ、やっぱりGoogle Workspace側は情シス管理のケースが多いだろうし、情シスにTerraformの利用をお願いしてやってくれるかは情シスにもよるだろう。
となると、AWS SSO利用にしてssosyncを使う以下の事例が最適解な気がする。
ssosyncまでは使わないにしても、IdPのユーザーごとの権限はAWS SSOで集中管理できるので、AWS SSO無しSAML連携よりは、AWS SSOの方が便利かも。
新規ユーザーを特定のAWSアカウントにSSOさせるまでの流れ
以下のような感じ
- 事前準備
- どのSSOグループが、どのAWSアカウントにログインできるのか、また何のアクセス権限セットを持つのかを設定する
- 例
- FooDevelopersグループは、
- foo-prodアカウントに、AWSReadOnlyAccess権限セットを持つ
- foo-devアカウントに、AWSAdministratorAccess権限セットとAWSReadOnlyAccess権限セットを持つ
- 結果はAWS SSOのAWSアカウント画面で確認できる
- FooDevelopersグループは、
- 例
- どのSSOグループが、どのAWSアカウントにログインできるのか、また何のアクセス権限セットを持つのかを設定する
- ユーザーを追加する
- ユーザー名はIdPのIDと同じにする
- 例えば、Google Workspaceのメールアドレス
- そのユーザーを任意のSSOグループに追加する
- 例
- FooDevelopersグループに追加する
- 例
- ユーザー名はIdPのIDと同じにする
- ユーザーポータルURLにブラウザでアクセスしてもらう
- アカウント一覧が表示される
- foo-prodとfoo-dev
- アカウントを選ぶと、アクセス権限セットが表示される
- foo-prodは、AWSReadOnlyAccess
- foo-devは、AWSAdministratorAccessとAWSReadOnlyAccess
その他
- ユーザーは複数のグループに入れる
- ユーザーまたはグループは各アカウントに対して、それぞれ複数のアクセス権限セットを持てる
- アクセス権限セットは10個のAWS管理ポリシーと、1個のインラインポリシーを持てる