RBAC: пошаговое руководство по созданию роли, которая может очищать устройства ActiveSync

Дата публикации исходной статьи: среда, 12 сентября 2012 г.

Вопрос, который несколько раз поднимался за последние месяцы: как создать роли RBAC, которые имеют только очень ограниченную функциональность по управлению ActiveSync?

Перед погружением в ответ на этот вопрос приведем краткий обзор того, что собой представляют роли RBAC (управление доступом на основе ролей).

До Exchange 2010 разрешения задавались с помощью таких средств, как DSACLS и ADSIEdit. Они позволяли указать, какие объекты пользователь или группа могут изменять и что они могут делать с объектами как целым. Если пользователю требовался доступ на запись для одного заданного свойства объекта, но не для всех свойств, то не существовало простого способа решения этой задачи. RBAC не определяет разрешения для объекта; вместо этого оно определяет разрешения для командлетов PowerShell, которые могут изменять объект. Командлеты PowerShell добавляются в роль, а пользователь или группа назначается на роль. Если необходимый командлет и параметры являются частью роли, в которой вы участвуете, то вы сможете запустить командлет.

В командной консоли Exchange можно запустить командлет (get-excommand).count, чтобы увидеть, к какому количеству командлетов Exchange вы в текущий момент имеете доступ. В панели управления Exchange (ECP) и консоли управления Exchange командлеты, к которым вы имеете доступ, определяют, какие параметры отображаются. Поэтому если для открытия окна в пользовательском интерфейсе этих средств требуется наличие в вашей роли определенных командлетов PowerShell, но у вас их нет, возможен один из двух результатов:

  • Окно не будет отображаться (параметры, которые приводят к этому, скорее всего не будут предлагаться).
  • Окно будет отображаться, но все содержимое будет отключено (это обычно происходит, если имеются подходящие командлеты Get-, но недостает одного или нескольких командлетов Set, New, Add и т. д.).

Дополнительные сведения о RBAC см. в следующих статьях:

Exchange 2010 с пакетом обновления 2 (SP2) содержит 71 роль RBAC. Но ни одна из них не предлагает ограниченные поднаборы команд ActiveSync, которые можно назначить персоналу службы поддержки. Чтобы создать такие роли, вы должны поработать сами. Если служба поддержки работает с PowerShell, это достаточно просто, так как можно создать роль, содержащую только командлет PowerShell и необходимые параметры. Если пользователи работают только через панель управления Exchange, процесс более сложный, так как пользователь должен быть способен перейти в точку, где операция выполняется.

В данном примере клиенту требуется, чтобы персонал службы поддержки смог очистить устройства ActiveSync через панель управления Exchange. Проблема была в том, что только члены группы ролей "Organization Management (управление организацией)" могли перейти в необходимое окно в панели управления Exchange и выполнить очистку устройства. Добавление пользователей "HelpDesk" в группу ролей "Organization Management" не рассматривалось — эта группа просто имеет слишком много прав.

Администратор пытался создать роль RBAC, содержавшую только командлет Clear-ActiveSyncDevice. Проблема была в том, что новая роль не позволяла получать доступ к функциональности через панель управления Exchange. Панель управления Exchange не позволяла пользователям переходить в то место, где отображается кнопка "Wipe Device (очистить устройство)", так как кнопка вложена несколькими уровнями ниже. Пользователь должен иметь возможность перечислять пользователей в организации, просматривать их свойства телефона и голосовой почты и открывать диалоговые окна на всех этапах. Роль, содержащая только командлет Clear-ActiveSyncDevice не включает другие командлеты, которые требуются этим другим шагам в панели управления Exchange. Что нам здесь можно сделать — это представить порядок действий, которые необходимо добавить в роль, чтобы можно было перейти в окно и нажать кнопку "Wipe Device (очистить устройство)".

Первый шаг в этом процессе — определить, какие роли содержатся в группе ролей "Organization Management". Для этого мы запустим командлет:

[PS] C:\>$FormatEnumerationLimit=999
[PS] C:\>get-rolegroup "organization management" | fl roles

Roles : {Active Directory Permissions, Address Lists, ApplicationImpersonation, Audit Logs, Cmdlet Extension Agents, Database Availability Groups, Database Copies, Databases, Disaster Recovery, Distribution Groups, Edge Subscriptions, E-Mail Address Policies, Exchange Connectors, Exchange Server Certificates, Exchange Servers, Exchange Virtual Directories, Federated Sharing, Information Rights Management, Journaling, Legal Hold, Mail Enabled Public Folders, Mail Recipient Creation, Mail Recipients, Mail Tips, Mailbox Import Export, Mailbox Search, Message Tracking, Migration, Monitoring, Move Mailboxes, Organization Client Access, Organization Configuration, Organization Transport Settings, POP3 And IMAP4 Protocols, Public Folder Replication, Public Folders, Receive Connectors, Recipient Policies, Remote and Accepted Domains, Retention Management, Role Management, Security Group Creation and Membership, Send Connectors, Support Diagnostics, Transport Agents, Transport Hygiene, Transport Queues, Transport Rules, UM Mailboxes, UM Prompts, UnScoped Role Management, Unified Messaging, User Options, View-Only Audit Logs, View-Only Configuration, View-Only Recipients, MyBaseOptions, MyContactInformation, MyDiagnostics, MyDistributionGroupMembership, MyDistributionGroups, MyProfileInformation, RetentionPolicies, MyTextMessaging, MyVoiceMail, MyMailboxDelegation}

Отсюда нам надо исключить роли, которые не связаны напрямую с очисткой устройства. Некоторые из этих ролей, такие как "Remote and Accepted Domains (удаленные и обслуживаемые домены)" очевидно не будут содержать необходимые командлеты. Далее найдем содержимое потенциально интересных ролей. Для этого запустим следующий комендлет:

[PS] C:\storage>Get-ManagementRoleEntry "Mail Recipients\*"

Name Role Parameters
---- ---- ----------
Write-AdminAuditLog Mail Recipients {Comment, Confirm, Debug, DomainController, ErrorAction, Er...
Update-Recipient Mail Recipients {Confirm, Credential, Debug, DomainController, ErrorAction,...
Test-MAPIConnectivity Mail Recipients {Archive, Confirm, Debug, ErrorAction, ErrorVariable, Ident...
Set-User Mail Recipients {AssistantName, CertificateSubject, City, Company, Confirm,...

Я сократил здесь выходные данные и оставил только несколько строк для демонстрации (действительный командлет выдает 96 результатов).

Следующим шагом будет создание новых дочерних ролей для тех ролей, которые мы считаем полезными для нашей работы. Например:

new-managementrole -parent "Mail Recipients" -name StrictlyRecipActiveSyncDeviceWipe

Только что созданная роль является дочерней от роли "Mail Recipients (получатели почты)", поэтому она имеет все разрешения родительской роли. Почему не использовать саму роль "Mail Recipients"? В дальнейшем я собираюсь удалить из этой роли некоторые части, поэтому мы сможем получить наименее возможный уровень разрешений. Никогда не изменяйте встроенные роли, такие как "Mail Recipients", так как это нарушит функциональность. Другой момент: дочерней роли можно назначить только функциональность родительской роли; ей невозможно предоставить никакие права или доступ к функциональности, которых нет в родительской роли.

После создания роли необходимо создать группу ролей. Это упростит назначение роли пользователям в будущем. Для тестирования мы используем учетную запись, называемую WipeTest. После завершения тестирования замените WipeTest необходимыми учетными записями или группами.

New-RoleGroup -Name "OnlyActiveSyncDeviceWipe" -Roles "StrictlyRecipActiveSyncDeviceWipe " -members WipeTest

WipeTest может войти в OWA и получать доступ к панели управления Exchange. Мы обнаружили, что можем проходить большую часть пути к необходимому параметру в панели управления Exchange, но не весь путь. Это говорит о том, что требуется дополнительная роль.

Если вы просмотрите каталог Exchange (по умолчанию c:\Program Files\Microsoft\Exchange), то обнаружите следующий путь: "ClientAccess\ecp\PhoneVoice". Просмотр файлов здесь даст некоторую подсказку о том, что стоит добавить далее. Файл Web.Config имеет множество упоминаний OrganizationConfig, но это недостаточно конкретно. Мы можем просмотреть папку, чтобы определить, содержит ли какой-либо файл упоминание определенных командлетов, которые мы могли использовать, но которые не включены в уже определенную роль. Выделяется один командлет — Set-CasMailbox (он находится в файле QuarantinedDevices.ASCX). После этого мы проверяем, где этот командлет расположен:

[PS] C:\>Get-ManagementRoleEntry "*\set-casmailbox" | fl name,role,parameters

Name : Set-CASMailbox
Role : Mail Recipients
Parameters : {ActiveSyncDebugLogging, ActiveSyncEnabled, ActiveSyncMailboxPolicy, Confirm, Debug, DisplayName, DomainController, ECPEnabled, EmailAddresses, ErrorAction, ErrorVariable, EwsAllowEntourage, EwsAllowList, EwsAllowMacOutlook, EwsAllowOutlook, EwsApplicationAccessPolicy, EwsBlockList, EwsEnabled, HasActiveSyncDevicePartnership, Identity, IgnoreDefaultScope, ImapEnabled, ImapEnableExactRFC822Size, ImapMessagesRetrievalMimeFormat, ImapSuppressReadReceipt, ImapUseProtocolDefaults, MAPIBlockOutlookNonCachedMode, MAPIBlockOutlookRpcHttp, MAPIBlockOutlookVersions, MAPIEnabled, Name, OutBuffer, OutVariable, OWAEnabled, OwaMailboxPolicy, PopEnabled, PopEnableExactRFC822Size, PopMessagesRetrievalMimeFormat, PopSuppressReadReceipt, PopUseProtocolDefaults, PrimarySmtpAddress, SamAccountName, ShowGalAsDefaultView, Verbose, WarningAction, WarningVariable, WhatIf}

Name : Set-CASMailbox
Role : Organization Client Access
Parameters : {ActiveSyncAllowedDeviceIDs, ActiveSyncBlockedDeviceIDs, Confirm, Debug, DomainController, ErrorAction, ErrorVariable, Identity, OutBuffer, OutVariable, Verbose, WarningAction, WarningVariable, WhatIf}

Name : Set-CASMailbox
Role : User Options
Parameters : {ActiveSyncDebugLogging, Confirm, ErrorAction, ErrorVariable, Identity, ImapMessagesRetrievalMimeFormat, ImapSuppressReadReceipt, ImapUseProtocolDefaults, OutBuffer, OutVariable, PopMessagesRetrievalMimeFormat, PopSuppressReadReceipt, PopUseProtocolDefaults, ShowGalAsDefaultView, WarningAction, WarningVariable, WhatIf}

Name : Set-CASMailbox
Role : MyBaseOptions
Parameters : {ActiveSyncDebugLogging, Confirm, ErrorAction, ErrorVariable, Identity, ImapMessagesRetrievalMimeFormat, ImapSuppressReadReceipt, ImapUseProtocolDefaults, OutBuffer, OutVariable, PopMessagesRetrievalMimeFormat, PopSuppressReadReceipt, PopUseProtocolDefaults, ShowGalAsDefaultView, WarningAction, WarningVariable, WhatIf}

Интересно заметить, что параметры отличаются. Мы можем исключить "MyBaseOptions" и "UserOptions", так как их параметры не помогут нам очистить устройство. Мы уже пытались использовать дочернюю роль "Mail Recipients", и эта роль не работала. Остается роль "Organization Client Access", которую надо попробовать. Вы заметите, что эта роль имеет доступ к параметрам "ActiveSyncAllowedDeviceIDs" и "ActiveSyncBlockedDeviceIDs", которые не присутствуют в роли "Mail Recipients".

Так как мы видели, что командлет Set-CasMailbox присутствует в файлах, мы можем попытаться создать новую дочернюю роль от роли "Organization Client Access" и убрать все, кроме Set-CasMailbox.

new-managementrole -parent "organization client access" -name OrgClientAccessWipeDeviceOnly
get-managementroleentry "OrgClientAccessWipeDeviceOnly\*" |where{$_.name -notlike "*set-casm*"}| Remove-ManagementRoleEntry

Теперь мы добавляем эту новую роль в группу ролей, созданную ранее:

New-ManagementRoleAssignment -Name "OCA Child ActiveSyncDevice Wipe" -SecurityGroup "OnlyActiveSyncDeviceWipe" -Role OrgClientAccessWipeDeviceOnly

Теперь, когда учетная запись WipeTest пытается очистить устройство, она может получать доступ к кнопке в панели управления Exchange. Остается одна проблема: StrictlyRecipActiveSyncDeviceWipe (дочерняя роль от "Mail Recipients") по-прежнему имеет слишком много прав. Поэтому удалим из StrictlyRecipActiveSyncDeviceWipe большинство командлетов с помощью следующего командлета:

get-managementroleentry "StrictlyRecipActiveSyncDeviceWipe\*" |where{$_.name -notlike "*activesync*"}| Remove-ManagementRoleEntry

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

Для добавления командлета обратно в роль необходимо сделать следующее:

add-ManagementRoleEntry "Mail Recipients\get-mailbox" -role StrictlyRecipActiveSyncDeviceWipe

/Aside

Если требуется вернуть несколько командлетов, можно использовать синтаксис из следующего примера:

Get-ManagementRoleEntry "Mail Recipients\*" | where{$_.name -like "get-m*"} | add-ManagementRoleEntry -role StrictlyRecipActiveSyncDeviceWipe

В этом блоге я хотел добавлять командлеты только по одному, но я включил этот пример для иллюстрации.

/End Aside

Если нам надо удалить отдельный командлет из роли, можно использовать следующий синтаксис:

Remove-ManagementRoleEntry "StrictlyRecipActiveSyncDeviceWipe\Get-Mailbox"

(Когда появится запрос "Are You Sure? (вы уверены?)", выберите "Да" или "Да для всех".)

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

Ниже я вставил обобщение всех командлетов для тех, кто хочет видеть все вместе в кратком представлении:

new-managementrole -parent "Mail Recipients" -name StrictlyRecipActiveSyncDeviceWipe
new-managementrole -parent "organization client access" -name OrgClientAccessWipeDeviceOnly
get-managementroleentry "OrgClientAccessWipeDeviceOnly\*" |where{$_.name -notlike "*set-casm*"}| Remove-ManagementRoleEntry

(Когда отображается запрос "Are you sure? (вы уверены?)", нажмите клавишу A.)

get-managementroleentry "StrictlyRecipActiveSyncDeviceWipe\*" |where{$_.name -notlike "*activesync*"}| Remove-ManagementRoleEntry

(Когда отображается запрос "Are you sure? (вы уверены?)", нажмите клавишу A.)

add-ManagementRoleEntry "Mail Recipients\get-mailbox" -role StrictlyRecipActiveSyncDeviceWipe
add-ManagementRoleEntry "Mail Recipients\get-user" -role StrictlyRecipActiveSyncDeviceWipe
add-ManagementRoleEntry "Mail Recipients\get-recipient" -role StrictlyRecipActiveSyncDeviceWipe
add-ManagementRoleEntry "Mail Recipients\get-casmailbox" -role StrictlyRecipActiveSyncDeviceWipe
New-RoleGroup -Name "OnlyActiveSyncDeviceWipe" -Roles StrictlyRecipActiveSyncDeviceWipe,OrgClientAccessWipeDeviceOnly -members WipeTest

После запуска этих командлетов пользователь WipeTest (или указанный вами пользователь или группа) сможет открыть OWA, перейти в панель управления Exchange и открыть все диалоговые окна, которые необходимы для достижения точки, в которой можно очистить устройство.

Благодарю Мэтта Бэрда (Matt Byrd) и Брэда Хьюза (Brad Hughes) за помощь в написании этой публикации.

Крис Поллит (Chris Pollitt)

Это локализованная запись блога. Исходная статья находится по адресу RBAC: Walkthrough of creating a role that can wipe ActiveSync Devices