Azure PowerShell을 사용하여 Azure 역할 할당 조건 추가 또는 편집
Azure 역할 할당 조건은 더 세분화된 액세스 제어를 제공하기 위해 선택적으로 역할 할당에 추가할 수 있는 추가 검사입니다. 예를 들어 개체를 읽을 특정 태그를 포함하는 개체를 필요로 하는 조건을 추가할 수 있습니다. 이 문서에서는 Azure PowerShell을 사용하여 역할 할당에 대한 조건을 추가, 편집, 나열 또는 삭제하는 방법을 설명합니다.
필수 조건
역할 할당 조건을 추가하거나 편집하기 위한 사전 요구 사항은 조건 및 사전 요구 사항을 참조하세요.
조건 추가
역할 할당 조건을 추가하려면 New-AzRoleAssignment를 사용합니다. New-AzRoleAssignment 명령에는 조건과 관련된 다음 매개 변수가 포함됩니다.
매개 변수 | 형식 | 설명 |
---|---|---|
Condition |
문자열 | 사용자에게 사용 권한을 부여할 수 있는 조건입니다. |
ConditionVersion |
문자열 | 조건 구문의 버전입니다. 2.0으로 설정해야 합니다. Condition 이 지정된 경우 ConditionVersion 도 지정해야 합니다. |
다음 예제에서는 조건으로 변수를 초기화하여 스토리지 Blob 데이터 읽기 권한자 역할을 할당하는 방법을 보여줍니다. 조건은 컨테이너 이름이 'blobs-example-container'와 같은지 여부를 확인합니다.
$subscriptionId = "<subscriptionId>"
$resourceGroup = "<resourceGroup>"
$roleDefinitionName = "Storage Blob Data Reader"
$roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
$userObjectId = "<userObjectId>"
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
$description = "Read access if container name equals blobs-example-container"
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))"
$conditionVersion = "2.0"
조건과 함께 New-AzRoleAssignment를 사용하여 역할을 할당합니다.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
출력 예는 다음과 같습니다.
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName : User1
SignInName : user1@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
ObjectId : <userObjectId>
ObjectType : User
CanDelegate : False
Description : Read access if container name equals blobs-example-container
ConditionVersion : 2.0
Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))
PowerShell에서 조건에 달러 기호($)가 포함된 경우에는 앞에 백틱(`)을 붙여야 합니다. 예를 들어 다음 조건은 달러 기호를 사용하여 태그 키 이름을 표시합니다. PowerShell의 따옴표 규칙에 대한 자세한 내용은 따옴표 규칙 정보를 참조하세요.
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"
조건 편집
기존 역할 할당 조건을 편집하려면 Set-AzRoleAssignment를 사용합니다. Condition
, ConditionVersion
및 Description
속성만 편집할 수 있습니다. -PassThru
매개 변수는 Set-AzRoleAssignment가 업데이트된 역할 할당을 반환하도록 하여 추가 사용을 위해 변수에 시각화 또는 저장을 허용합니다.
두 가지 방법으로 조건을 편집할 수 있습니다. PSRoleAssignment
개체 또는 JSON 파일을 사용할 수 있습니다.
PSRoleAssignment 개체를 사용하여 조건 편집
Get-AzRoleAssignment를 사용하여 조건을
PSRoleAssignment
개체로 포함하는 기존 역할 할당을 가져옵니다.$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
조건을 편집합니다.
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))"
조건과 설명을 초기화합니다.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
Set-AzRoleAssignment를 사용하여 역할 할당에 대한 조건을 업데이트합니다.
Set-AzRoleAssignment -InputObject $testRa -PassThru
출력 예는 다음과 같습니다.
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : User1 SignInName : user1@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access if container name equals blobs-example-container or blobs-example-container2 ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))
JSON 파일을 사용하여 조건 편집
조건을 편집하기 위해 JSON 파일을 입력으로 제공할 수도 있습니다. 다음은 Condition
및 Description
이 업데이트되는 예제 JSON 파일을 보여줍니다. 조건을 업데이트하려면 JSON 파일의 모든 속성을 지정해야 합니다.
{
"RoleDefinitionId": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
"ObjectId": "<userObjectId>",
"ObjectType": "User",
"Scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>",
"Condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))",
"ConditionVersion": "2.0",
"CanDelegate": false,
"Description": "Read access if container name equals blobs-example-container or blobs-example-container2",
"RoleAssignmentId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>"
}
Set-AzRoleAssignment를 사용하여 역할 할당에 대한 조건을 업데이트합니다.
Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru
출력 예는 다음과 같습니다.
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName : User1
SignInName : user1@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
ObjectId : <userObjectId>
ObjectType : User
CanDelegate : False
Description : Read access if container name equals blobs-example-container or blobs-example-container2
ConditionVersion : 2.0
Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))
여러 역할 할당의 조건 편집
여러 역할 할당에 대해 동일한 업데이트를 수행해야 하는 경우 루프를 사용할 수 있습니다. 다음 명령은 다음 작업을 수행합니다.
조건에
<find-condition-string-1>
또는<find-condition-string-2>
문자열이 있는 구독에서 역할 할당을 찾습니다.$tenantId = "<your-tenant-id>" $subscriptionId = "<your-subscription-id>"; $scope = "/subscriptions/$subscriptionId" $findConditionString1 = "<find-condition-string-1>" $findConditionString2 = "<find-condition-string-2>" Connect-AzAccount -TenantId $tenantId -SubscriptionId $subscriptionId $roleAssignments = Get-AzRoleAssignment -Scope $scope $foundRoleAssignments = $roleAssignments | Where-Object { ($_.Condition -Match $findConditionString1) -Or ($_.Condition -Match $findConditionString2) }
다음 명령은 다음 작업을 수행합니다.
찾은 역할 할당의 조건에서
<condition-string>
을(를)<replace-condition-string>
(으)로 바꿉니다.역할 할당을 변경 내용으로 업데이트합니다.
$conditionString = "<condition-string>" $conditionStringReplacement = "<condition-string-replacement>" $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ } $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
문자열에 대괄호([ ])와 같은 특수 문자가 포함된 경우 백슬래시(\)를 사용하여 이러한 문자를 이스케이프 처리해야 합니다.
조건 나열
역할 할당 조건을 나열하려면 Get-AzRoleAssignment를 사용합니다. 자세한 내용은 Azure PowerShell을 사용하여 Azure 역할 할당 나열을 참조하세요.
조건 삭제
역할 할당 조건을 삭제하려면 역할 할당 조건을 편집하고 Condition
및 ConditionVersion
속성을 빈 문자열(""
) 또는 $null
로 설정합니다.
또는 역할 할당과 조건을 모두 삭제하려는 경우 Remove-AzRoleAssignment 명령을 사용합니다. 자세한 내용은 Azure 역할 할당 제거를 참조하세요.