e2010В очередной раз натолкнулся на проблему некорректной отработки RBAC в случае работы с общими папками. Стоит задача – делегировать права на заведение mail-enabled общих папок. То есть по факту, на командлет Enable-MailPublicFolder. Право на запуск этого командлета делегировано всего одной роли:

[PS] C:Windowssystem32>Get-ManagementRoleEntry '*Enable-MailPublicFolder' | fl Name, Role

Name : Enable-MailPublicFolder
Role : Mail Enabled Public Folders

По идее, достаточно назначить эту роль группе ролей, в которую будет входить нужный нам делегат и дело в шляпе. В итоге получаем:

[PS] C:Windowssystem32>Enable-MailPublicFolder -Identity 'Public Folder'
MapiExceptionNoAccess: Unable to set properties on object. (hr=0x80070005, ec=-2147024891)
...
+ CategoryInfo          : NotSpecified: (0:Int32) [Enable-MailPublicFolder], MapiExceptionNoAccess
+ FullyQualifiedErrorId : 1CA8E050,Microsoft.Exchange.Management.MapiTasks.EnableMailPublicFolder

Самая вкуснятина в конце предпоследней строки: MapiExceptionNoAccess. Оказывается, чтобы создавать mail-enabled общие папки штатного механизма RBAC не достаточно. В Exchange 2000/2003 за процедуру создания mail-enabled общих папок отвечало специальное разрешение ms-Exch-Mail-Enabled-Public-Folder. Назначалось оно на уровне конкретной организации Exchange в разделе конфигурации в AD. Что интересно, в Exchange 2010 оно там же и осталось. Более того, этим разрешением обладают две группы – Organization Management и Public Folder Management:

[PS] C:Windowssystem32>Get-ADPermission -Identity "CN=OrgName,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=o365test,DC=pro" | ? {$_.ExtendedRights -like 'ms-Exch-Mail-Enabled-Public-Folder'} | select User

User
----
Organization Management
Public Folder Management

Ради интереса привожу полный список разрешений группы Public Folder Management на контейнер почтовой организации:

[PS] C:Windowssystem32>Get-ADPermission -Identity "CN=OrgName,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=0365test,DC=pro" | ? {$_.User -like '*Public Folder Management'} | select AccessRights, ExtendedRights

AccessRights                                                ExtendedRights
------------                                                --------------
{GenericRead}
{ExtendedRight}                                             {ms-Exch-Create-Public-Folder}
{ExtendedRight}                                             {ms-Exch-Modify-Public-Folder-Deleted-Item-Retention}
{ExtendedRight}                                             {ms-Exch-Modify-Public-Folder-Replica-List}
{ExtendedRight}                                             {ms-Exch-Modify-Public-Folder-Expiry}
{ExtendedRight}                                             {ms-Exch-Modify-PF-Admin-ACL}
{ExtendedRight}                                             {ms-Exch-Modify-Public-Folder-Quotas}
{ExtendedRight}                                             {ms-Exch-Mail-Enabled-Public-Folder}
{ExtendedRight}                                             {ms-Exch-Modify-PF-ACL}
{ExtendedRight}                                             {ms-Exch-Store-Create-Named-Properties}
{ExtendedRight}                                             {ms-Exch-Store-Admin}
{ExtendedRight}                                             {ms-Exch-Store-Visible}
{ExtendedRight}                                             {ms-Exch-Create-Top-Level-Public-Folder}

Дело осталось за малым – назначить соответствующие разрешения для нашего делегата:

Add-ADPermission -Identity "CN=OrgName,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=0365test,DC=pro" -User "Public Folders Delegates" -AccessRights GenericRead

Add-ADPermission -Identity "CN=OrgName,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=0365test,DC=pro" -User "Public Folders Delegates" -ExtendedRights ms-Exch-Mail-Enabled-Public-Folder 

Интересные ссылки:
Beyond RBAC: Delegating the ‘Mail-enable Public Folders’ right
Permissions Available in Exchange