Azure AD と Salesforce のロール(プロファイル)の関連性について

#はじめに
以前から気になっていたのが、 Azure AD にエンタープライズ アプリケーションのユーザー割り当てをする画面にて、
 Salesforce とそのほかの SaaS アプリケーションとの間で明らかに異なる点がある。

具体的に見てみると。
こちらが Box のユーザーの割り当ての追加の画面。
「ロールの選択」がグレーアウトされていて選択ができない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/774717f3-91b8-5120-b3a8-dba9c09494ca.png)

こちらが Salesforce の画面。
ロールの選択をクリックすると、 Salesforce の「プロファイル」で割り当てるプロファイル一覧が表示されている。
このロールのいずれかを選択しないと、ユーザー(グループ)の割り当てができないようになっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2ec0a251-ac3d-8e8d-bd1d-8d3234d253b7.png)

そもそも Azure AD では「ロール」と記載されていて、 Salesforce では「プロファイル」となっているのも気になる(表記を合わせて欲しいという意味で)が、それぞれで別々のロール(プロファイル)を割り当てた場合にどのような動作になるのかを確認してみた。

#やってみる1
まずはプロビジョニングをしないで、シンプルに Azure AD 側と Salesforce 側で別々のロール(プロファイル)を割り当てた場合の動作を確認してみる。

ちなみに Azure AD で割り当てたロールは、「エンタープライズ アプリケーション」→「Salesforce」→「ユーザーとグループ」の「割り当てられたロール」で確認できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6ddc6c80-5079-f69e-f068-077d221f9cab.png)

Salesforce 側は「顔アイコン」→「設定」→「私の個人情報」→「高度なユーザの詳細」の中のプロファイル欄で確認ができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/46c1b214-640c-bb14-b220-46e60a083a22.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/bf348f61-356e-0bc4-a8e6-dcb9186b3178.png)


例えば Azure AD と Salesforce でそれぞれ下記のようにロール(プロファイル)を割り当てた場合。

□Azure AD
Contract Manager

□Salesforce
ソリューション管理者

Contract Manager のロールのユーザーが Salesforce に SSO したとき、Salesforce でプロファイルを確認してみたところ、「ソリューション管理者」としてサインインした。

この動作はなんとなく納得できる。
Azure AD 上で保持しているロールの情報を Salesforce 側に上書きするような操作、動作をしていないので。
とはいえこれは運用上どうだろう、という疑問も生まれる。
これだったらそもそも Azure AD 側でロール割り当てる必要ないんじゃないかと思うし。

#やってみる2
次に「やってみる1」のようにそれぞれでロール(プロファイル)を割り当てたあとに、 Azure AD のプロビジョニングを設定して、ユーザー同期をした後にロール(プロファイル)が書き換わるのかどうかを確認する。

例えば Azure AD と Salesforce でそれぞれ下記のようにロール(プロファイル)を割り当てた場合。

□Azure AD
System Administrator

□Salesforce
ソリューション管理者

##### 注意点
ちなみにプロビジョニングの動作検証を Salesforce の試用版で行うときの注意点が 2 つある。
まず、これは Microsoft の公開情報にも書いてあるが、通常の Salesforce の評価版ではプロビジョニング動作検証はできない。「無料の開発者アカウント」を使用する必要がある。

公開情報
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/salesforce-provisioning-tutorial

>	 重要
Salesforce.com の試用アカウントを使用している場合は、自動化されたユーザー プロビジョニングを構成できません。 試用アカウントの場合、アカウントを購入するまでは、必要な API にアクセスできません。 無料の開発者アカウント を使用してこのチュートリアルを完了することで、この制限を回避できます。

「無料の開発者アカウント」つまり dev 版の Salesforce の 評価版は下記 URL から入手できる。

URL:https://developer.salesforce.com/signup
ここからサインアップするとプロビジョニングの動作検証を行えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0b9facab-bce9-e933-68e6-bf3d27ba3af2.png)

注意点その 2 、プロビジョニングできるユーザーは**最大2ユーザーまで**と制限されている。
3ユーザー目をプロビジョニングしようとすると Azure AD の監査ログに下記のとおりにエラーがでてプロビジョニングに失敗する。(実際に私もこの制限に引っかかってしまった)

**You are limited to just two regular users** と書いてあるのが分かる。
ちなみに Salesforce 側でユーザーを「凍結(削除)」してもダメで、3 ユーザー目のプロビジョニングは失敗するので、 2 ユーザーの中で検証をやりくりしないといけない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/380f5462-4c72-e9bd-7028-0a106d09f64f.png)

話しを戻して、下記ロール(プロファイル)を割り当てた状態でプロビジョニングを実行してみる。

□Azure AD
System Administrator

□Salesforce
ソリューション管理者

プロビジョニングの初期同期は下記「現在の状態を消去して、同期を再開します」のチェックボックスにチェックを入れた後に、「保存」ボタンをクリックすると開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ce39d0b2-1daf-1a3a-1352-b07a02c82618.png)

無事成功したようだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0e2a1385-b583-e09c-05e2-e0665f55e756.png)

この状態で Salesforce 側の「プロファイル」を見てみると。
「プロファイル」が「システム管理者」に上書きされているのが分かる。
つまり、ユーザー プロビジョニングを行うと、プロファイルは Azure AD の「ロール」に上書きされる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b86f60ba-0394-67d8-40a2-e748aaee8e7a.png)


ちなみに、 下記のとおり Salesforce 側であらかじめ「システム管理者」として設定した場合も上書きされてしまうのか確認してみる。

□Azure AD
Solution Manager

□Salesforce
システム管理者

プロビジョニングは問題なく完了している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/23d8954b-0aa6-b41f-52fa-43e1aef7342e.png)

同じように Salesforce 側の「プロファイル」を見てみると。
「プロファイル」が「ソリューション管理者 (Solution Manager)」に上書きされているのが分かる。
つまり、 Salesforce 側で「システム管理者」であったプロファイルが別のプロファイルに書き換わってしまう、これは注意が必要だ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/32951d8f-034d-5920-b546-23bfc7cf91b1.png)


最後に、 Salesforce 側でプロファイルを手動で「ソリューション管理者」から「システム管理者」に変えて、プロビジョニングをかけたあとに、「システム管理者」が「ソリューション管理者」に上書きされるかを確認してみた。

「ソリューション管理者」を、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/59445b55-0050-a1a7-cf90-aa157154afc7.png)


「システム管理者」に変更して保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/70a33379-bd3d-d5ca-52af-74057412b89d.png)

プロビジョニングを手動実行してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d23e5823-2401-8a91-427d-ed38e62ad664.png)

プロビジョニングは成功したようだ。「システム管理者」が「ソリューション管理者」に上書きされているか確認してみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f7134eee-e631-b3c9-7306-a9b140963873.png)

やはり、上書きされている。Salesforce側でプロファイルを書き換えても、プロビジョニングが走った時点で、 Azure AD 側のロール(プロファイル)に上書きされる動作とあることが分かった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b32248b9-7a9d-b029-0214-949e3fe2117f.png)

表にまとめるとこんな感じ。

| プロビジョニング有無                               |ロール(プロファイル)      |    
|:---------------------------------------------|:----------------------------------------------------------------|
| プロビジョニングなし                               | Salesforce のプロファイルが保持される |   
|プロビジョニングあり(Salesforce 側ユーザーなし)      | そのまま Azure AD のロールが Salesforce のプロファイルになる |      
|プロビジョニングあり(Salesforce 側ユーザーあり)      | Azure AD のロールが Salesforce のプロファイルに上書きされる |       


#結論
プロビジョニングをしない限りは、 Azure AD と Salesforce 間のロール(プロファイル)は干渉されないので、 Salesforce側のプロファイルには影響しない。
しかしながら、 Azure AD ユーザーで Salesforce に SSO するのだから、 Salesforce 側で人力でユーザーを作るのは現実的ではない。

Azure AD ユーザーを Salesforce 側に展開するのであれば、当然ユーザー プロビジョニングの方が手っ取り早い。
動作確認した結果、基本的には Azure AD ユーザーのプロファイルにすべて上書きされる動作になるので、Azure AD 側でユーザーを割り当てる際に、適切なロール(プロファイル)を割り当てる必要がある。

最後まで読んでいただき、ありがとうございました。