최초 문서 게시일: 2012년 9월 12일 수요일

최근 몇 개월간 여러 차례 제기된 한 가지 질문은 매우 제한적인 ActiveSync 관리 기능만을 제공하는 RBAC 역할을 만들려면 어떻게 해야 하는가입니다.

이에 대한 답변을 자세히 설명하기 전에 RBAC(역할 기반 액세스 제어)에 대해 간략하게 살펴보겠습니다.

Exchange 2010 이전에는 DSACLS 및 ADSIEdit와 같은 도구를 사용하여 권한이 정의되었습니다. 이를 통해 사용자 또는 그룹이 액세스할 수 있는 개체와 해당 개체 전체에 대해 수행 가능한 작업을 지정할 수 있었습니다. 사용자에게 개체의 특정 속성에 대한 쓰기 권한이 필요하지만 다른 속성은 필요 없는 경우 이를 처리하는 간단한 방법이 없었습니다. RBAC는 개체에 대한 권한이 아니라 개체를 수정할 수 있는 PowerShell cmdlet에 대한 권한을 정의합니다. PowerShell cmdlet이 역할에 추가되고 이 역할에 사용자 또는 그룹이 할당됩니다. 사용자는 필요한 cmdlet과 매개 변수가 참여하는 역할에 포함된 경우 해당 cmdlet을 실행할 수 있습니다.

Exchange 관리 셸에서 (get-excommand).count를 실행하면 현재 액세스할 수 있는 Exchange cmdlet 수를 확인할 수 있습니다. ECP(Exchange Control Panel) 및 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의 관련 창으로 이동하여 장치 데이터 지우기를 수행할 수 있다는 점이었습니다. 조직 관리 역할 그룹에 지원 센터 사용자를 추가하는 것은 불가능했습니다. 조직 관리 역할 그룹은 너무 많은 권한을 갖기 때문입니다.

이 관리자는 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}

여기서 장치 데이터 지우기와 직접적으로 관련되지 않은 역할을 제거해야 합니다. “Remote and Accepted Domains”와 같은 일부 역할에는 관련 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이 언급되어 있는지 살펴보면, QuarantinedDevices.ASCX의 Set-CasMailbox가 눈에 띕니다. 따라서 다음을 실행하여 이 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” 역할을 사용해 볼 수 있습니다. 이 역할은 Mail Recipients 역할에 없는 ActiveSyncAllowedDeviceIDs 및 ActiveSyncBlockedDeviceIDs 매개 변수에 액세스할 수 있는 것을 볼 수 있습니다.

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

다음 단계는 ECP의 해당 위치로 이동하여 장치 데이터 지우기를 수행할 수 있을 때까지 cmdlet을 한 번에 하나씩 이 역할에 다시 추가하는 것입니다. 방법은 단순합니다. 한 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를 참조하십시오.