Azure PowerShell을 사용하여 사용자 지정 역할 만들기 또는 업데이트
Azure 기본 제공 역할이 조직의 특정 요구 사항을 충족하지 않는 경우 고유한 사용자 지정 역할을 만들 수 있습니다. 이 문서에서는 Azure PowerShell을 사용하여 사용자 지정 역할을 나열, 만들기, 업데이트 또는 삭제하는 방법을 설명합니다.
사용자 지정 역할을 만드는 방법에 대한 단계별 자습서는 자습서: Azure PowerShell을 사용하여 Azure 사용자 지정 역할 만들기를 참조하세요.
참고 항목
Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.
필수 조건
사용자 지정 역할을 만들려면 다음이 필요합니다.
- 사용자 액세스 관리istrator와 같은 사용자 지정 역할을 만들 수 있는 권한
- Azure Cloud Shell 또는 Azure PowerShell
사용자 지정 역할 나열
범위에서 할당에 사용할 수 있는 역할을 나열하려면 Get-AzRoleDefinition 명령을 사용합니다. 다음 예제에서는 선택한 구독에서 할당에 사용할 수 있는 모든 역할을 나열합니다.
Get-AzRoleDefinition | FT Name, IsCustom
Name IsCustom
---- --------
Virtual Machine Operator True
AcrImageSigner False
AcrQuarantineReader False
AcrQuarantineWriter False
API Management Service Contributor False
...
다음 예제에서는 선택한 구독에 할당할 수 있는 사용자 지정 역할만을 나열합니다.
Get-AzRoleDefinition -Custom | FT Name, IsCustom
Name IsCustom
---- --------
Virtual Machine Operator True
선택한 구독이 역할에 없는 AssignableScopes
경우 사용자 지정 역할이 나열되지 않습니다.
사용자 지정 역할 정의 나열
사용자 지정 역할 정의를 나열하려면 Get-AzRoleDefinition을 사용합니다. 기본 제공 역할에 사용하는 것과 동일한 명령입니다.
Get-AzRoleDefinition <role_name> | ConvertTo-Json
PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | ConvertTo-Json
{
"Name": "Virtual Machine Operator",
"Id": "00000000-0000-0000-0000-000000000000",
"IsCustom": true,
"Description": "Can monitor and restart virtual machines.",
"Actions": [
"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Support/*"
],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/11111111-1111-1111-1111-111111111111"
]
}
다음 예제에서는 역할의 작업만 나열합니다.
(Get-AzRoleDefinition <role_name>).Actions
PS C:\> (Get-AzRoleDefinition "Virtual Machine Operator").Actions
"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Insights/diagnosticSettings/*",
"Microsoft.Support/*"
사용자 지정 역할 만들기
사용자 지정 역할을 만들려면 New-AzRoleDefinition 명령을 사용합니다. 개체 또는 JSON 템플릿을 사용하여 PSRoleDefinition
역할을 구조화하는 두 가지 방법이 있습니다.
리소스 공급자에 대한 작업 가져오기
사용자 지정 역할을 만드는 경우 리소스 공급자에서 가능한 모든 작업을 알고 있어야 합니다. 리소스 공급자 작업 목록을 보거나 Get-AzProviderOperation 명령을 사용하여 이 정보를 가져올 수 있습니다. 예를 들어 가상 머신에 사용 가능한 모든 작업을 검사 하려면 다음 명령을 사용합니다.
Get-AzProviderOperation <operation> | FT OperationName, Operation, Description -AutoSize
PS C:\> Get-AzProviderOperation "Microsoft.Compute/virtualMachines/*" | FT OperationName, Operation, Description -AutoSize
OperationName Operation Description
------------- --------- -----------
Get Virtual Machine Microsoft.Compute/virtualMachines/read Get the propertie...
Create or Update Virtual Machine Microsoft.Compute/virtualMachines/write Creates a new vir...
Delete Virtual Machine Microsoft.Compute/virtualMachines/delete Deletes the virtu...
Start Virtual Machine Microsoft.Compute/virtualMachines/start/action Starts the virtua...
...
PSRoleDefinition 개체를 사용하여 사용자 지정 역할 만들기
PowerShell을 사용하여 사용자 지정 역할을 만드는 경우 기본 제공 역할 중 하나를 시작 지점으로 사용하거나 처음부터 시작할 수 있습니다. 이 섹션의 첫 번째 예제는 기본 제공 역할로 시작한 다음 더 많은 권한으로 사용자 지정합니다. 특성을 편집하여 추가하거나 AssignableScopes
원하는 특성을 추가Actions
NotActions
한 다음 변경 내용을 새 역할로 저장합니다.
다음 예제에서는 Virtual Machine Contributor 기본 제공 역할로 시작하여 Virtual Machine Operator라는 사용자 지정 역할을 만듭니다. 새 역할은 Microsoft.Compute, Microsoft.Storage 및 Microsoft.Network 리소스 공급자의 모든 읽기 작업에 대한 액세스 권한을 부여하고 가상 머신을 시작, 다시 시작 및 모니터링할 수 있는 권한을 부여합니다. 사용자 지정 역할은 두 구독에서 사용할 수 있습니다.
$role = Get-AzRoleDefinition "Virtual Machine Contributor"
$role.Id = $null
$role.Name = "Virtual Machine Operator"
$role.Description = "Can monitor and restart virtual machines."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Storage/*/read")
$role.Actions.Add("Microsoft.Network/*/read")
$role.Actions.Add("Microsoft.Compute/*/read")
$role.Actions.Add("Microsoft.Compute/virtualMachines/start/action")
$role.Actions.Add("Microsoft.Compute/virtualMachines/restart/action")
$role.Actions.Add("Microsoft.Authorization/*/read")
$role.Actions.Add("Microsoft.ResourceHealth/availabilityStatuses/read")
$role.Actions.Add("Microsoft.Resources/subscriptions/resourceGroups/read")
$role.Actions.Add("Microsoft.Insights/alertRules/*")
$role.Actions.Add("Microsoft.Support/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/00000000-0000-0000-0000-000000000000")
$role.AssignableScopes.Add("/subscriptions/11111111-1111-1111-1111-111111111111")
New-AzRoleDefinition -Role $role
다음 예제에서는 Virtual Machine Operator 사용자 지정 역할을 만드는 다른 방법을 보여 줍니다. 새 PSRoleDefinition
개체를 만들어 시작합니다. 작업은 perms
변수에 지정되고 Actions
속성으로 설정됩니다. 이 NotActions
속성은 Virtual Machine 기여자 기본 제공 역할을 읽 NotActions
어 설정됩니다. Virtual Machine 기여자가 없NotActions
으므로 이 줄은 필요하지 않지만 다른 역할에서 정보를 검색하는 방법을 보여 줍니다.
$role = [Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition]::new()
$role.Name = 'Virtual Machine Operator 2'
$role.Description = 'Can monitor and restart virtual machines.'
$role.IsCustom = $true
$perms = 'Microsoft.Storage/*/read','Microsoft.Network/*/read','Microsoft.Compute/*/read'
$perms += 'Microsoft.Compute/virtualMachines/start/action','Microsoft.Compute/virtualMachines/restart/action'
$perms += 'Microsoft.Authorization/*/read'
$perms += 'Microsoft.ResourceHealth/availabilityStatuses/read'
$perms += 'Microsoft.Resources/subscriptions/resourceGroups/read'
$perms += 'Microsoft.Insights/alertRules/*','Microsoft.Support/*'
$role.Actions = $perms
$role.NotActions = (Get-AzRoleDefinition -Name 'Virtual Machine Contributor').NotActions
$subs = '/subscriptions/00000000-0000-0000-0000-000000000000','/subscriptions/11111111-1111-1111-1111-111111111111'
$role.AssignableScopes = $subs
New-AzRoleDefinition -Role $role
JSON 템플릿을 사용하여 사용자 지정 역할 만들기
JSON 템플릿을 사용자 지정 역할의 원본 정의로 사용할 수 있습니다. 다음 예제에서는 스토리지 및 컴퓨팅 리소스에 대한 읽기 액세스, 지원 액세스 권한을 허용하는 사용자 지정 역할을 만들고 해당 역할을 두 구독에 추가합니다. 다음 예제를 사용하여 새 파일을 C:\CustomRoles\customrole1.json
만듭니다. 새 ID가 자동으로 생성되므로 초기 역할 생성 시 ID를 설정 null
해야 합니다.
{
"Name": "Custom Role 1",
"Id": null,
"IsCustom": true,
"Description": "Allows for read access to Azure storage and compute resources and access to support",
"Actions": [
"Microsoft.Compute/*/read",
"Microsoft.Storage/*/read",
"Microsoft.Support/*"
],
"NotActions": [],
"AssignableScopes": [
"/subscriptions/00000000-0000-0000-0000-000000000000",
"/subscriptions/11111111-1111-1111-1111-111111111111"
]
}
구독에 역할을 추가하려면 다음 PowerShell 명령을 실행합니다.
New-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"
사용자 지정 역할 업데이트
사용자 지정 역할을 만드는 것과 마찬가지로 개체 또는 JSON 템플릿을 사용하여 PSRoleDefinition
기존 사용자 지정 역할을 수정할 수 있습니다.
PSRoleDefinition 개체를 사용하여 사용자 지정 역할 업데이트
사용자 지정 역할을 수정하려면 먼저 Get-AzRoleDefinition 명령을 사용하여 역할 정의를 검색합니다. 둘째, 역할 정의를 원하는 변경합니다. 마지막으로 Set-AzRoleDefinition 명령을 사용하여 수정한 역할 정의를 저장합니다.
다음 예에서는 Virtual Machine Operator 사용자 지정 역할에 Microsoft.Insights/diagnosticSettings/*
작업을 추가합니다.
$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.Actions.Add("Microsoft.Insights/diagnosticSettings/*")
Set-AzRoleDefinition -Role $role
PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.Actions.Add("Microsoft.Insights/diagnosticSettings/*")
PS C:\> Set-AzRoleDefinition -Role $role
Name : Virtual Machine Operator
Id : 88888888-8888-8888-8888-888888888888
IsCustom : True
Description : Can monitor and restart virtual machines.
Actions : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
Microsoft.Compute/virtualMachines/start/action...}
NotActions : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
/subscriptions/11111111-1111-1111-1111-111111111111}
다음 예제에서는 Virtual Machine Operator 사용자 지정 역할의 할당 가능한 범위에 Azure 구독을 추가합니다.
Get-AzSubscription -SubscriptionName Production3
$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.AssignableScopes.Add("/subscriptions/22222222-2222-2222-2222-222222222222")
Set-AzRoleDefinition -Role $role
PS C:\> Get-AzSubscription -SubscriptionName Production3
Name : Production3
Id : 22222222-2222-2222-2222-222222222222
TenantId : 99999999-9999-9999-9999-999999999999
State : Enabled
PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.AssignableScopes.Add("/subscriptions/22222222-2222-2222-2222-222222222222")
PS C:\> Set-AzRoleDefinition -Role $role
Name : Virtual Machine Operator
Id : 88888888-8888-8888-8888-888888888888
IsCustom : True
Description : Can monitor and restart virtual machines.
Actions : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
Microsoft.Compute/virtualMachines/start/action...}
NotActions : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
/subscriptions/11111111-1111-1111-1111-111111111111,
/subscriptions/22222222-2222-2222-2222-222222222222}
다음 예제에서는 Virtual Machine Operator 사용자 지정 역할에 관리 그룹을 AssignableScopes
추가합니다.
Get-AzManagementGroup
$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.AssignableScopes.Add("/providers/Microsoft.Management/managementGroups/{groupId1}")
Set-AzRoleDefinition -Role $role
PS C:\> Get-AzManagementGroup
Id : /providers/Microsoft.Management/managementGroups/marketing-group
Type : /providers/Microsoft.Management/managementGroups
Name : marketing-group
TenantId : 99999999-9999-9999-9999-999999999999
DisplayName : Marketing group
PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.AssignableScopes.Add("/providers/Microsoft.Management/managementGroups/marketing-group")
PS C:\> Set-AzRoleDefinition -Role $role
Name : Virtual Machine Operator
Id : 88888888-8888-8888-8888-888888888888
IsCustom : True
Description : Can monitor and restart virtual machines.
Actions : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
Microsoft.Compute/virtualMachines/start/action...}
NotActions : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
/subscriptions/11111111-1111-1111-1111-111111111111,
/subscriptions/22222222-2222-2222-2222-222222222222,
/providers/Microsoft.Management/managementGroups/marketing-group}
JSON 템플릿을 사용하여 사용자 지정 역할 업데이트
이전 JSON 템플릿을 사용하여 기존 사용자 지정 역할을 쉽게 수정하여 작업을 추가하거나 제거할 수 있습니다. 다음 예에 표시된 것처럼 JSON 템플릿을 업데이트하고 네트워킹에 대한 읽기 작업을 추가합니다. 템플릿에 나열된 정의는 기존 정의에 점증적으로 적용되지 않습니다. 즉, 템플릿에 지정한 것과 똑같이 역할이 표시됩니다. 또한 ID 필드를 역할의 ID로 업데이트해야 합니다. 이 값을 잘 모르는 경우 Get-AzRoleDefinition cmdlet을 사용하여 이 정보를 가져올 수 있습니다.
{
"Name": "Custom Role 1",
"Id": "acce7ded-2559-449d-bcd5-e9604e50bad1",
"IsCustom": true,
"Description": "Allows for read access to Azure storage and compute resources and access to support",
"Actions": [
"Microsoft.Compute/*/read",
"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Support/*"
],
"NotActions": [],
"AssignableScopes": [
"/subscriptions/00000000-0000-0000-0000-000000000000",
"/subscriptions/11111111-1111-1111-1111-111111111111"
]
}
기존 역할을 업데이트하려면 다음 PowerShell 명령을 실행합니다.
Set-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"
사용자 지정 역할 삭제
사용자 지정 역할을 사용하는 역할 할당을 제거합니다. 자세한 내용은 사용자 지정 역할을 삭제할 역할 할당 찾기를 참조하세요.
Remove-AzRoleDefinition 명령을 사용하여 사용자 지정 역할을 삭제합니다.
다음 예제에서는 Virtual Machine Operator 사용자 지정 역할을 제거합니다.
Get-AzRoleDefinition "Virtual Machine Operator" Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" Name : Virtual Machine Operator Id : 88888888-8888-8888-8888-888888888888 IsCustom : True Description : Can monitor and restart virtual machines. Actions : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read, Microsoft.Compute/virtualMachines/start/action...} NotActions : {} AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000, /subscriptions/11111111-1111-1111-1111-111111111111} PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition Confirm Are you sure you want to remove role definition with name 'Virtual Machine Operator'. [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y