RBAC:建立一個可抹除 ActiveSync 裝置的角色 (演練篇)

英文原文已於 2012 年 9 月 12 日星期三發佈

最近幾個月,經常聽到一個問題:我如何建立只提供極有限 ActiveSync 管理功能的 RBAC 角色?

探討答案前,我們先快速檢視 RBAC (角色型存取控制) 是什麼。

在 Exchange 2010 之前,權限都是透過 DSACLS 和 ADSIedit 等工具定義。這可讓您指定使用者或群組可觸碰哪些物件,以及使用者可對整體物件執行的動作 。若使用者必須要有某物件一個特定屬性的寫入權限,但不要有其他屬性的寫入權限,沒有方法可以輕鬆處理這個問題。RBAC 不定義物件的權限,但會定義可修改物件物件的 PowerShell Cmdlet 的權限。您可將 PowerShell Cmdlet 新增到一個角色中,並將使用者或群組指派到該角色。若您需要的 Cmdlet 和參數屬於您參與的角色,那麼您將能執行 Cmdlet。

在 Exchange 管理命令介面中,您可以執行 (get-excommand).count,查看您目前存取了多少 Exchange Cmdlet。Exchange 控制台 (ECP) 和 Exchange 管理主控台將會顯示您為了判斷選項而存取的 Cmdlet。因此,若其中一個 GUI 視窗要求您的角色必須要有特定的 PowerShell cmdlet,但您卻沒有,則可能發生下列兩種結果之一:

  • 不會出現視窗 (事實上不可能出現能讓視窗顯示出來的選項)
  • 出現視窗,但所有的內容皆遭停用 (若您有相關的 Get-Cmdlet,但缺乏一個以上的「設定」、「新增」、「加入」等,通常就會發生這種情況)

有關 RBAC 詳細資訊,請參閱下列網址:

Exchange 2010 SP2 包含 71 個 RBAC 角色。然而,這些角色無法提供可分派給支援人員的 ActiveSync 命令有限子集。要建立這樣的角色,您必須自己解決這些問題。若您的支援人員使用 PowerShell,這代表程序相當簡單,是因為您可以建立一個只包含他們所要求 PowerShell Cmdlet 和參數的角色。若使用者操作透過 ECP 單獨操作,代表此程序更為複雜,因為使用者必須能夠瀏覽執行操作的位置。

在這個例子中,客戶需要支援人員協助才能透過 Exchange 控制台抹除 ActiveSync 裝置。問題是,只有組織管理會員才能瀏覽到 ECP 中的適當視窗,並執行裝置抹除。將支援人員加入組織管理角色群組是不可能的,這樣只是擁有過多權限而已。

系統管理員尚試建立一個只包含 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

我們剛剛建立的角色是郵件收件者的子項,因此擁有父項的所有權限。為什麼不使用「郵件收件者」這個角色就好呢?隨著工作的進行,我打算移除這個角色的某些部分,盡可能取得最底層的權限。千萬不要修改郵件收件者等內建角色,因為這樣將破壞功能。還有一個重點要提出說明:一個角色的子項只能指派到其父項的功能;您不能給予子項任何權限或讓子項存取父項已不再擁有的功能。

建立了角色後,我們需要建立一個角色群組。這樣以後指派角色給使用者時將更簡單。測試時,我們使用一個名為 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,因為這兩個值的參數無助於抹除裝置。我們已試過郵件收件者的子項角色,那個角色沒有用。這樣我們可以試用的角色就剩下「組織用戶端存取」。您會發現「組織用戶端存取」存取了 ActiveSyncAllowedDeviceIDs 和 ActiveSyncBlockedDeviceIDs 參數,且 未出現在郵件收件者角色中。

既然我們已經看到檔案列出 Set-CasMailbox,我們可以嘗試建立一個「組織用戶端存取」的新子項角色,刪除所有東西,只留下 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 (「郵件收件者」的子項) 仍然有過多權限。我們要在這個步驟使用下列 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,當我將這個 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