AWS IAM Identity Center(以下IdC)をEntra IDと組み合わせてSCIM連携を行いたいが、P1ライセンスがないために、グループやグループメンバーシップ(どのユーザーがどのグループに所属しているかの情報)の同期ができないケースがある。
そんな時、暫定措置となる方法について整理しておく。
背景
Entra ID(旧Azure AD)は無料で使用できるが、機能制約があり、解除するにはP1やP2といったライセンスの購入が必要になる。
やりたいこと | 無償版 | 有償版(P1以上) |
---|---|---|
IdCのIdPとして設定し、認証に使用する | ○ | ○ |
SCIM連携によってユーザーや属性をIdCに同期する | ○ | ○ |
SCIM連携によってグループやグループメンバーシップをIdCに同期する | × | ○ |
※他の機能は省略
検証環境でIAM Identity CenterやQuickSight、DataZoneなどと連携している分には問題ないのだが、本番運用を見据えた設計を行おうとすると、この機能制約が地味に効いてくる。規模が大きな環境では、ユーザー単位の認可設定を運用に載せることは現実的でないからだ。
人事異動や組織改編に伴う変更を、QuickSightをはじめとするアプリケーション側で個別に行うこともつらみがある。組織ごとに個別事情は当然あるとはいえ、Entra IDを管理する部門で(できれば人事データと自動連携させて)一元的に行い、個々の利用部門はその結果を享受する形が、やはり合理的である。
そうするとP1以上のライセンスを必要数分用意しなければならなくなるわけだが、有償ライセンスなので、大人の事情ですぐにはどうこうできない場合が多い。
せめて認証はEntra IDで一元化しつつ、P1ライセンスが準備できるまでの経過措置として、グループおよびグループメンバーシップをIdC側で管理できないか?というのが、ここでのモチベーションである。
解決策
AWS CLIを使って、IdC側でグループの作成・管理とグループメンバーシップの管理を行うことができる。SCIMで同期されたEntra IDユーザーをこれらのグループに参加させることも可能。
QuickSightやDataZoneはあくまで「IdC」と連携しているので、IdCにグループがあれば、ひとまずグループメンバーシップ問題には対処できる(一元管理を志向する場合、将来的にEntra IDグループへの移行は必要になる)。
なお、マネジメントコンソールではこれは実現できない。
マネジメントコンソール上は、IdPがEntra IDなど外部IdPの場合は「そちらで管理すべき」という基本姿勢を保っており、追加・修正系の操作ができないためだ。
もっとも、メンバーシップ管理が必要なユーザー数を考慮すれば、マネジメントコンソールでのマニュアル操作はそもそも現実的でないので、大勢に影響はないとも言える。
CLI
前置きが長くなったが、CLIは以下(IDは全てダミーです)。
aws identitystore create-group \
--identity-store-id d-1234567abc \
--display-name <グループ名> \
--profile <該当アカウントのSSOプロファイル>
aws identitystore create-group-membership \
--member-id UserId=1234ab56-7890-123a-1b23-45678901c2d3 \
--group-id a1b2cd34-56e7-8901-2345-6ab7c890123d \
--identity-store-id d-1234567abc \
--profile <該当アカウントのSSOプロファイル>
member-id
は、IdCで保持しているID(Entra IDのIDではない点に注意)。マネジメントコンソールからも確認できるが、CLIで一覧表示したい場合は以下。
aws identitystore list-users \
--identity-store-id d-1234567abc \
--profile <該当アカウントのSSOプロファイル> \
--output json
まとめ
Entra IDのP1ライセンスを入手するまでの経過措置として書いたが、P1の入手目処が立たない場合は恒久対策ともなり得る。その場合は、以下に注意して運用を組み立てる必要がある。
- グループおよびメンバーシップをIdCで管理することの組織内合意
- 誰が/どのように人事情報を反映するか
- 属性を元にした自動管理の余地(例:DynamoDBで属性と対応グループを管理し、SCIMイベントをトリガーにLambdaでメンバーシップを操作する)