RBAC:创建可擦除 ActiveSync 设备的角色的演练

原文发布于 2012 年 9 月 12 日(星期三)

最近几个月中已出现多次的问题是:我如何创建仅显示非常有限的 ActiveSync 管理功能的 RBAC 角色?

在深入探讨答案之前,我们先快速了解下什么是 RBAC(基于角色的访问控制)。

在 Exchange 2010 之前,权限是通过 DSACLS 和 ADSI 编辑器之类的工具定义的。这样您可以指定用户或组可以接触哪些对象以及可以对整个对象执行哪些操作。如果用户需要对某个对象的一个特定属性(而非其他属性)的写权限,那么没有简单方法来处理此问题。RBAC 不在对象上定义权限,而是在可修改该对象的 PowerShell cmdlet 上定义权限。PowerShell cmdlet 将添加到角色中,用户或组将分配给该角色。如果您所需的 cmdlet 和参数是您参与的角色的一部分,那么您将可以运行此 cmdlet。

在 Exchange 命令行管理程序中,您可以运行 (get-excommand).count 以查看您当前有权访问多少个 Exchange cmdlet。在 Exchange 控制面板 (ECP) 和 Exchange 管理控制台中,您有权访问的 cmdlet 决定了显示哪些选项。因此,如果任一 GUI 中的窗口需要您所属的角色具有特定 PowerShell cmdlet,但您没有这些 cmdlet,则可能会出现以下两种结果中的一种:

  • 该窗口不会显示(实际上不太可能提供导致此结果的选项)
  • 该窗口会显示,但所有内容都将被禁用(如果您具有相关的 Get- cmdlet 但缺少 Set、New、Add 等命令中的一个或多个,则通常会出现此结果。)

有关 RBAC 的更多详细信息,请开始阅读以下内容:

Exchange 2010 SP2 包含 71 个 RBAC 角色。然而,所有这些角色都不能提供可分配给技术支持人员的有限 ActiveSync 命令子集。要创建此类角色,您必须亲自处理它们。如果您的技术支持使用 PowerShell,则此过程比较简单,因为您可以创建只具有其所需的 PowerShell cmdlet 和参数的角色。如果用户完全通过 ECP 操作,则此过程比较复杂,因为用户必须能够导航到执行此操作的点。

在此示例中,客户需要技术支持人员协助才能通过 Exchange 控制面板擦除 ActiveSync 设备。问题在于,只有“组织管理”的成员才能导航到 ECP 中的正确窗口并执行设备擦除。无法将 HelpDesk 用户添加到“组织管理”角色组中 – 如果这样做的话权限就太多了。

管理员尝试创建一个只包含 Clear-ActiveSyncDevice cmdlet 的 RBAC 角色。问题在于,新角色不允许他们通过 ECP 访问相关功能。ECP 不允许用户导航到显示“擦除设备”按钮的位置,因为该按钮嵌套在下面几个级别中。用户需要能够列出组织中的用户,查看其电话和语音属性,并且能够同时打开对话框。只包含 Clear-ActiveSyncDevice cmdlet 的角色不包括 ECP 中的其他那些步骤所需的其他 cmdlet。我们在此只需确定必须向此角色中添加什么,以便我们可以导航到相应窗口并单击“擦除设备”按钮。

此过程的第一步是查看“组织管理”角色组中包括哪些角色。为此,我们运行:

[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}

在此,我们需要忽略不会直接与擦除设备直接相关的角色。其中某些角色(如“远程域和接受域”)明显不会包含相关 cmdlet。对于有潜在意义的角色,我们的下一步是查明其包含什么。为此,我们运行如下 cmdlet:

[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,...

我截短了这里的输出内容,只包括几行作为演示(实际 cmdlet 生成 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 并访问 ECP。我们发现,大多数情况下我们都可以导航到 ECP 中的所需选项,但并非总是如此。这表明需要其他角色。

如果您查看 Exchange 目录(默认为 c:\Program Files\Microsoft\Exchange),您会找到以下路径“ClientAccess\ecp\PhoneVoice”。仔细查看此处的文件后,您会得到一些有关您接下来可能需要添加的内容的提示。Web.Config 文件多次提及 OrganizationConfig,但不够具体。我们可以浏览该文件夹以查看是否有任何文件提到我们可以使用但不属于我们已定义的角色的特定 cmdlet。比较醒目的一个是 Set-CasMailbox(它位于 QuarantinedDevices.ASCX 中)。然后我们检查该 cmdlet 所在的位置:

[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 尝试擦除设备时,他们可以访问 ECP 中的按钮。仍存在一个问题:StrictlyRecipActiveSyncDeviceWipe(“Mail Recipients”的子级)仍具有太多权限。在此,我们使用以下 cmdlet 从 StrictlyRecipActiveSyncDeviceWipe 中删除大多数 cmdlet:

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

下一阶段涉及将 cmdlet 添加回角色中,一次添加一个,直到我们可以导航到 ECP 中的正确位置并执行设备擦除为止。例程很简单:添加 cmdlet,尝试此操作。如果它未能退出 OWA,请添加另一个 cmdlet 并重试。当我们使其正常运行时,我们可以停止或者返回删除单个 cmdlet 以尝试实现最低级别的权限。下面是一些我们可使用的 cmdlet 示例。

要重新添加 cmdlet,我们需要执行此操作:

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

/Aside

如果您需要放回多个 cmdlet,可以使用下面示例中的语法:

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

在这篇博客中,我只想一次插入一个 cmdlet,但仍然包含了此内容以方便演示。

/End Aside

如果希望从角色中删除单个 cmdlet,我们可以使用此命令:

Remove-ManagementRoleEntry "StrictlyRecipActiveSyncDeviceWipe\Get-Mailbox"

(出现“是否确定?”提示时,选择“是”或“全是”)

在这篇博客中,我包括了有关实现最终版本的一组 cmdlet 所经历的过程的许多详细信息。我省去了大部分令人厌烦的重试操作,希望所含的内容足够详细,可以让您自己完成此过程。

我在下面粘贴了所有 cmdlet 的摘要,希望对想以一种简明的表示形式一并查看所有内容的用户有所帮助:

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

(出现“是否确定?”提示时,选择 A)

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

(出现“是否确定?”提示时,选择 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

这些 cmdlet 运行后,WipeTest 用户(或您指定的用户或组)即可打开 OWA,导航到 ECP 并打开到达其可擦除设备的点所需的每个对话框。

感谢 Matt Byrd 和 Brad Hughes 在我撰写本文时给予的帮助。

Chris Pollitt

这是一篇本地化的博客文章。请访问 RBAC: Walkthrough of creating a role that can wipe ActiveSync Devices 以查看原文