В очередной раз натолкнулся на проблему некорректной отработки 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
Станислав, в последнем листинге опечатка – get-adpermission -> add-adpermission
2Ivan, спасибо, исправил.