ExchangeOnlineのユーザー役割についてのまとめ(ユーザーベースのアクセス制御)

#はじめに
ExchangeOnlineでは、RBAC(ユーザーベースのアクセス制御)と呼ばれるアクセス許可モデルを用いて、ユーザーの権限(役割)の制御を行っている。ユーザーには、既定で各種権限(役割)が付与されているが、管理者はユーザーに権限(役割)を追加/削除するといった形で、ユーザーがどういった操作ができて/できないかを制御することが可能である。ここでは、特定の権限を削除する方法について検証をし、RBACの仕組み、実装方法について理解を深めた。

#RBACの仕組み
ユーザーに役割が割り当たる仕組みは以下ような構成によって成り立っている。
![ユーザー役割.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688695/b53322b5-8062-33ae-885b-a07dc5cf6c75.png)

|番号|コンポーネント|説明|関連コマンド|
|---|---|---|---|
|①|役割割り当て<br>ポリシー|ポリシーには複数の役割を紐づけることが可能。<br>1ユーザーにつき、1つのポリシーのみ割り当ている<br>ことができる。既定でDefault Role Assignment Policyという<br>名前の役割ポリシーがユーザーに割り当てっている。|get-roleassignmentpolicy<br>set-roleassingnmentpolicy<br>new-roleassignmentpolicy<br>remove-roleassignmentpolicy
|②|役割の割り当て|役割割り当てポリシーと役割を紐づける役割を担っている。|get-managemenoleassignment<br>set-managementroleassignment<br>new-managementoroleassignment<br>remove-managementroleassignment
|③|役割|複数の役割エントリ(権限の単位)をグループ化する。|get-managementrole<br>set-managementrole<br>new-managementrole<br>remove-managementrole
|④| 役割エントリ|ユーザーが実行できる操作がコマンド・パラメータ単位で<br>定義されている。|get-managementroleentry<br>set-managementorolseentry<br>remove-managementroleentry

#既定のユーザー役割
既定でユーザーに割り当たるDefault Role Assignment Policyには以下の役割が割り当たっている。

|役割|説明|
|---|---|
|MyContactInformation|個々のユーザーは、住所と電話番号を含めた自分の連絡先情報を変更できる。|
|MyProfileInformation|個々のユーザーは自分の名前を変更できまる。|
|MyDistributionGroups|個々のユーザーは配布グループを作成、変更、および表示することと、自らが所有する配布グループでメンバーを変更、表示、削除、および追加することができる。|
|MyDistributionGroupMembership|個々のユーザーは組織内にある配布グループの自分のメンバーシップを表示および変更できる。ただし、それらの配布グループで、グループ メンバーシップの操作が許可されていることが前提。|
|My Custom Apps|ユーザーはカスタム アプリケーションへの接続を表示して変更できる。|
|My Marketplace Apps|ユーザーはマーケットプレース アプリケーションへの接続を表示して変更できる。|
|My ReadWriteMailbox Apps|ReadWriteMailbox のアクセス許可を持つユーザーはアプリをインストールできる。|
|MyBaseOptions|個々のユーザーは、自分のメールボックスの基本的な構成と関連する設定を表示し変更できる。|
|MyMailSubscriptions|個々のユーザーは、メッセージの形式およびプロトコルの既定値のような、電子メール サブスクリプションの設定を表示および変更できる。|
|MyMailboxDelegation|この役割により、管理者はメールボックスのアクセス許可を委任できる。|
|MyRetentionPolicies|個々のユーザーは保持タグの表示や、保持タグ設定と既定値の表示および変更を実行できる。|
|MyTeamMailboxes|個々のユーザーはサイト メールボックスを作成して SharePoint サイトに接続できるようになる。|
|MyTextMessaging|個々のユーザーはテキスト メッセージング設定の作成、表示、および変更を実行できる。|
|MyVoiceMail|個々のユーザーは自分のボイス メールの設定を表示および変更できます。|

#カスタムの役割割り当てポリシーと役割を作成

今回はMyDistributionGroupsの役割(配布グループの作成、変更)からメーリングリスト(配布グループ)の作成権限を削除したカスタムの役割を作成し、それを別途作成するカスタムの役割割り当てポリシーに紐づけをする。
(その他の役割はそのままの状態でカスタムの役割割り当てポリシーに紐づけを行う。)

###MyDistributionGroupsの役割をカスタマイズ
MyDistributionGroupsには既定で以下の役割エントリが紐づいている。

```
PS C:\WINDOWS\system32> Get-ManagementRoleEntry "MyDistributionGroups\*"

Name                           Role                      Parameters
----                           ----                      ----------
Update-DistributionGroupMember MyDistributionGroups      {Confirm, ErrorAction, ErrorVariable, Identity...}
Set-Group                      MyDistributionGroups      {DisplayName, ErrorAction, ErrorVariable, Identity...}
Set-DynamicDistributionGroup   MyDistributionGroups      {ErrorAction, ErrorVariable, Identity, MailTip...}
Set-DistributionGroup          MyDistributionGroups      {AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, A...
Remove-DistributionGroupMember MyDistributionGroups      {Confirm, ErrorAction, ErrorVariable, Identity...}
Remove-DistributionGroup       MyDistributionGroups      {Confirm, ErrorAction, ErrorVariable, Identity...}
New-DistributionGroup          MyDistributionGroups      {Alias, Confirm, CopyOwnerToMember, DisplayName...}
Get-Recipient                  MyDistributionGroups      {Anr, AuthenticationType, BookmarkDisplayName, ErrorAction...}
Get-Group                      MyDistributionGroups      {Anr, ErrorAction, ErrorVariable, Filter...}
Get-EligibleDistributionGro... MyDistributionGroups      {ErrorAction, ErrorVariable, Identity, ManagedBy...}
Get-DistributionGroupMember    MyDistributionGroups      {ErrorAction, ErrorVariable, Identity, IncludeSoftDeletedOb...
Get-DistributionGroup          MyDistributionGroups      {Anr, ErrorAction, ErrorVariable, Filter...}
Get-AcceptedDomain             MyDistributionGroups      {Identity}
Add-DistributionGroupMember    MyDistributionGroups      {Confirm, ErrorAction, ErrorVariable, Identity...}
```

ここから、New-DistributionGroupの管理エントリを削除したカスタムの役割を作成する。

役割は新規に作成することができないため、既存の役割を親としてまずはコピーを作成し、必要な変更を行う。
MyDistributionGroups役割を親として、MyDistributionGroupsCustom役割を作成。

```
new-managementrole -parent MyDistributionGroups -name MyDistributionGroupsCustom 
```

作成したカスタムの役割から特定の役割エントリ(New-DistributionGroup)を削除する。

```
remove-managementroleentry MyDistributionGroupsCustom\New-DistributionGroup
```

作成したMyDistributionGroupsCustom役割に紐づく役割エントリを確認する。

```
PS C:\WINDOWS\system32> Get-ManagementRoleEntry "MyDistributionGroupsCustom\*"

Name                           Role                      Parameters
----                           ----                      ----------
Add-DistributionGroupMember    MyDistributionGroupsCu... {Confirm, ErrorAction, ErrorVariable, Identity...}
Get-AcceptedDomain             MyDistributionGroupsCu... {Identity}
Get-DistributionGroup          MyDistributionGroupsCu... {Anr, ErrorAction, ErrorVariable, Filter...}
Get-DistributionGroupMember    MyDistributionGroupsCu... {ErrorAction, ErrorVariable, Identity, IncludeSoftDeletedOb...
Get-EligibleDistributionGro... MyDistributionGroupsCu... {ErrorAction, ErrorVariable, Identity, ManagedBy...}
Get-Group                      MyDistributionGroupsCu... {Anr, ErrorAction, ErrorVariable, Filter...}
Get-Recipient                  MyDistributionGroupsCu... {Anr, AuthenticationType, BookmarkDisplayName, ErrorAction...}
Remove-DistributionGroup       MyDistributionGroupsCu... {Confirm, ErrorAction, ErrorVariable, Identity...}
Remove-DistributionGroupMember MyDistributionGroupsCu... {Confirm, ErrorAction, ErrorVariable, Identity...}
Set-DistributionGroup          MyDistributionGroupsCu... {AcceptMessagesOnlyFrom, AcceptMessagesOnlyFromDLMembers, A...
Set-DynamicDistributionGroup   MyDistributionGroupsCu... {ErrorAction, ErrorVariable, Identity, MailTip...}
Set-Group                      MyDistributionGroupsCu... {DisplayName, ErrorAction, ErrorVariable, Identity...}
Update-DistributionGroupMember MyDistributionGroupsCu... {Confirm, ErrorAction, ErrorVariable, Identity...}
```
New-DistributionGroupの役割エントリが一覧にないことを確認できた。

###カスタムの役割割り当てポリシーを作成

Custom Role Assignmment Policyというカスタムの役割割り当てポリシーを作成し、役割の割り当てを行う。
ここに、上で作成したMyDistributionGroupsCustomの役割に加え、MyDistributionGroupを除く、デフォルトのDefaul Role Assignment Policyと同じ役割を割り当てる。

```
PS C:\WINDOWS\system32> New-RoleAssignmentPolicy -Name "Custom Role Assignment Policy" -Roles "MyContactInformation", "MyProfileInformation", "MyDistributionGroupsCustom", "MyDistributionGroupMembership", "My Custom Apps", "My Marketplace Apps", "My ReadWriteMailbox Apps", "MyBaseOptions", "MyMailSubscriptions", "MyMailboxDelegation", "MyRetentionPolicies", "MyTeamMailboxes", "MyTextMessaging", "MyVoiceMail"
```
###作成した役割割り当てポリシーをユーザーメールボックスに割り当てる

ここではExchange管理センターから、ユーザーメールボックスに対して、上で作成した役割割り当てポリシー(Custom Role Assignment Policy)を割り当てる。
![役割割り当て.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688695/2c0d097e-fed6-6ddc-3bda-72b60f21d7cb.png)

#ユーザーの操作を確認する

それぞれのポリシーをユーザーに割り当てた場合の、ユーザー操作について確認。メーリングリスト(配布グループ)の作成権限を削除した、Custom Role Assignment Policyを割り当てると、メーリングリスト作成ボタン「＋」が非表示になることが確認できた。(WebのOutlookで確認)
![roleassignment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688695/288d54b8-c151-121f-cb7b-4cab2d287351.png)