AWS Control Tower構成でIAM Identity Centerユーザの管理を管理アカウントから分離する方法
こんにちは。かめでございます。
今回は、AWS Control Towerにて作成したAWSアカウント構成にて発生しうる、管理面での課題について考えてみましたので、共有させて頂きます。
解決したい課題
Control Towerを適用した場合、自動的に Organizations および Identity Center が作成され、リソースの作成などの開発行為はIdentity Centerで払い出されたユーザーを利用して行うができるようになります。
デフォルトではこのIdentity Centerのユーザー追加作業は管理アカウントで実施することとなりますが、Identity Centerユーザーの払い出し作業自体はOrganizations所属のメンバーアカウント側で行いたいというケースが考えられます。
しかしながら、管理アカウント自体はIdentity Centerにて払い出されたユーザーにはアクセスさせたくないケースも多いかと思います。
こういった場合に、Identity Centerの管理をOrganizationメンバーアカウントに対して委任することで、委任したアカウントでIdentity Centerグループ/ユーザの追加削除などの管理が可能になります。
しかしながら、Identity Center内に、管理アカウントに対してアクセス可能な許可セットがアサインされたグループがあると、Identity Centerユーザのグループへの追加は抑制できないため、管理アカウントに対してアクセス可能なIdentity Centerユーザが作成できてしまいます。
OrganizationsのSCPで解決出来ないのか?
SCPで制御できるかも?と思い、試してみたのですが、、、
2023/07/19現在、全てのIdentity Centerグループに対するidentitystore:CreateGroupMembership
アクション(AWS Console上でのIdentity Centerグループへのメンバー追加)、sso-directory:AddMemberToGroup
(AWS Console上でのIdentity Centerグループへのメンバー追加)は可能ですが、特定のIdentity Centerグループに対するユーザの追加はSCP等で制御出来ないようです。
SCPで特定のIdentity Centerグループへメンバー追加に関する細かな制御ができれば、管理アカウントへのアクセスが出来るメンバーをIdentity Centerグループで管理ができ、より柔軟な管理が出来るのですが、今後の改善を期待したいところです。
解決方法
概要
今回提示する内容では、以下の対応を行います。
- Identity Centerユーザー管理用アカウントの作成・・・管理アカウント以外でIdentity Centerユーザーを管理するためのAWSアカウントを作成します。
- Identity Centerユーザ管理権限の委任・・・上記で作成したAWSアカウントに、Identity Centerユーザーの管理権限を委任します。
- 管理アカウントへ割り当てられたグループの削除・・・これにより、Identity Centerにて作成されたユーザーの管理アカウントへのアクセスを禁止します。
これらの作業は、全て管理アカウントで実施してください。
Identity Centerユーザー管理用アカウントの作成
今回は、Identity Centerユーザーの管理を、管理アカウントではなく、専用のアカウントにて実施するようにしてみます。もちろん、Auditアカウントや既存のワークロードアカウントに対してIdentity Centerユーザーの管理責務を持たせることも可能ですので、そこは適宜読み替えてください。
コンソールよりControl Towerに移動し、左ペインより「Account Factory」を選んでください。
今回はSandbox OU以下に UserManagementという名前でアカウントを作成します。
「アクセス設定」では、このUserManagementアカウントにログイン出来るユーザーを作成します。
Identity Centerユーザ管理権限の委任
デフォルトのままだと管理アカウントにてIdentity Centerユーザーの管理を実施することになりますが、以下の設定を行うことにより、管理アカウントではなくユーザーアカウントにてIdentity Centerユーザーの管理を行うことが出来るようになります。
コンソールよりIdentity Centerに移動後、左ペインより「設定」を選択し、管理タブ内にある委任された管理者のアカウント登録ボタンを押してください。
「委任された管理者を登録」の画面で、先ほど作成したIdentity Centerユーザー管理用のアカウント、UserManagementを選択して登録を行います。
管理アカウントへ割り当てられたグループの削除
Identity Centerでは、先に説明したとおり、Identity Centerユーザの特定のグループへのアサインを禁止する手段がありません。そのため、管理アカウントへアクセス可能なグループは、次の手順にて全て削除する必要が有ります。
Identity Centerの左ペインより「AWSアカウント」を選択し、Root OUの直下にある管理アカウントを選択します。
Identity Centerをセットアップした直後は、
- AWSServiceCatalogAdmins
- AWSControlTowerAdmins
- AWSSecurityAuditors
- AWSSecurityAuditPowerUsers
- AWSAccountFactory
のグループが管理アカウントに対して割り当てられている状態となっていますが、これを全て「アクセスの削除」を行い、グループが割り当てられてない状態にしてください。
管理アカウントへアクセス可能なユーザーの作成
これまでの手順にて、Identity Centerユーザーは管理アカウントへアクセス出来なくなっています。Identity CenterユーザーではなくIAMユーザーでの管理アカウントへのアクセスは可能なのですが、以下の手順を実施することで、特定のIdentity Centerユーザーのみを管理アカウントへのアクセスを許可することが可能です。
Identity Centerの左ペインより「ユーザー」を選択し、管理アカウントへアクセス可能なユーザーを新規作成します。ここではユーザー名をRootAdminとします。
次にIdentity Centerの左ペインより「AWSアカウント」を選択し、Root OUの直下にある管理アカウントを選択します。
「ユーザーまたはグループを割り当て」内の「ユーザー」タブで、先ほど新規作成したIdentity Centerユーザー「RootAdmin」を選択します。
次へボタンを押すと許可セットの選択画面になりますので、ここは与えたいアクセス権限を元に許可セットを選択してください。ここではAWSAdministratorAccessを選択します。
以上により管理アカウントへアクセス可能なユーザーの作成作業は完了です。
動作確認
今回の目的である、「管理アカウントへアクセス許可したユーザは管理アカウントへアクセス出来ること」「ユーザー管理用アカウント内から、Identity Centerユーザーに対して管理アカウントへのアクセス権限を付与できないこと」を確認してみます。
まず「管理アカウントへアクセス許可したユーザは管理アカウントへアクセス出来ること」の確認を行います。
先ほど作成したRootAdminユーザにてログインを行ってみます。このユーザは管理アカウントへのアクセスを許可していますので、管理アカウントへログイン出来れば成功です。
Identity Centerサインインリンクよりサインインを行います。
ほとんど黒塗りになってしまって申し訳ないですが、管理アカウントへアクセス出来ることが確認出来ました。
次に、「ユーザー管理用アカウント内から、Identity Centerユーザーに対して管理アカウントへのアクセス権限を付与できないこと」の確認を行います。
先ほど「Identity Centerユーザー管理用アカウントの作成」にて作成した、UserManagementアカウント用のIdentity Centerユーザーでサインインし、UserManagementアカウント内のIdentity Centerへ移動してください。
左ペインの「AWSアカウント」に移動し、管理アカウントへチェックを入れた上で「ユーザーまたはグループを割り当て」を行ってみます。
このようにエラーダイアログが表示され、管理アカウントへの割り当てに失敗したら正しく設定が行われています。
また、新規Identity Centerユーザー作成時も、全てのグループで管理アカウントへのアクセス許可を外しているため、管理アカウントへのアクセスが可能なIdentity CenterユーザーがUserManagementアカウント内で作成されることもありません。
まとめ
今回の例を応用することにより、「管理アカウントへ割り当てられたグループの削除」にて紹介した手順にて、特定の許可セットでのみ管理アカウントへのアクセスを許可する構成も可能です。