🔼

[Azure AD]テナント間同期されたユーザーに自動的に権限を与えたい

2023/03/09に公開

はじめに

先日、「Azure AD のテナント間同期」機能を設定して動きを確認しました。
https://zenn.dev/tomot/articles/993ca14ba4e28a

その際の課題として、下のようなことを書いています。

ということで今回は、「同期されたユーザーを動的グループで管理して、あらかじめその動的グループに権限を割り当てしておこうね」という問題を考えてみます。

動的グループの作成

グループ作成

Azure AD>グループ>新しいグループ から新規グループを作成します。

「メンバーシップの種類」を「割り当て済み(デフォルト値)」から「動的ユーザー」に変更します。

動的メンバーシップの条件

続けて、「動的クエリの追加」から、動的グループに所属させる条件を考えます。
ここでは、以下のような条件で設定してみます。

ゲスト招待された外部ユーザーは下記のようなネーミングルールになっていますので、

<user名>_<home_tenant>.onmicrosoft.com#EXT#@<target_tenant>.onmicrosoft.com

UserPrincipalNameに含まれる「ホームテナント」のドメイン名を条件に引っかけることにします。

以上で、「同期設定をしたホームテナントからのゲストユーザーが自動的に含まれる動的グループ」が作成されます。

権限設定

動的グループであっても、通常のグループやユーザーと同様に、サブスクリプションやリソースグループのIAM設定で権限を割り当てます。

以上で完了です。簡単ですね…

グループに入れるユーザーを精査したい

先ほど書いた通り、ゲストユーザーの判定条件がドメイン名だと、「同期されたユーザー」という判定条件に使うには無理な部分があります。
もうちょっと…と考えると、下記のようなところがあり得るかなと思います。

テナント間同期設定の見直し

前回の記事で記載した「属性マッピング」の設定では、デフォルトで「ホームテナントのユーザー属性(プロパティ)をだいたい全部ターゲットテナントに設定します」という条件になっています。

ここでは、1つカスタマイズを行い、ユーザーの「拡張属性」に対して設定を行います。
この設定により、ユーザーの拡張属性(extensionAttribute1)に対して、好きな文字列を設定でき「このルールで同期されたユーザー」を一意に識別できるようになります。

同期されるデータ内容のリストに下記のように追加され、

これを保存すると下記のような確認を求められます。

これにより、ホームテナントのユーザーの属性に何か変更を加えなくても、改めての同期対象になるようです。

同期が成功したことを確認した後、各ユーザーのプロパティを確認すると「拡張属性」の「表示」リンクが活性化されており、

中身を見るとちゃんと「extensionAttribute1」に指定した値が設定されていることが分かります。

動的グループのメンバーシップ条件の見直し

続けて、条件を下記のように指定し直します。

単純に「extentionAttribute1」属性の値が「指定した文字列であること」です。

このような同期条件を駆使すれば、

  • 管理者ユーザ
    ・ホームテナントでAdministratorsグループに所属するユーザーは、同期時に拡張属性に「Administrator」という名称を設定する
    ・ターゲットテナントで「Administrators」を条件に動的グループを作る
    ・この動的グループには、サブスクリプションに対して「所有者ロール」を付与する

  • 開発者ユーザ
    ・ホームテナントでDedvelopersグループに所属するユーザーは、同期時に拡張属性に「Dedvelopers」という名称を設定する
    ・ターゲットテナントで「Dedvelopers」を条件に動的グループを作る
    ・この動的グループには、サブスクリプションに対して「共同作成者ロール」を付与する

といった運用が可能になります。

おわりに

今回は、Azure ADのテナント間同期機能と組み合わせて、自動的に権限を付与する方法を検討しました。
動的グループを使うことで、Azure(サブスクリプション)に対するロール付与まで実現できることが分かり、AzureにおいてもマルチAAD・マルチサブスクリプションな構成においてSSOに近いことがほぼほぼマネージドに実装できるということが分かりました。
残念ながらAzureADロールは現時点(2023/3)では実装できないようですが、これは今後のAzureの機能拡張に期待ですね。
もっとスマートなやり方を思いつくようでしたらぜひ教えてください!お待ちしてます。

Discussion