다음을 통해 공유


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, ConditionVersionDescription 속성만 편집할 수 있습니다. -PassThru 매개 변수는 Set-AzRoleAssignment가 업데이트된 역할 할당을 반환하도록 하여 추가 사용을 위해 변수에 시각화 또는 저장을 허용합니다.

두 가지 방법으로 조건을 편집할 수 있습니다. PSRoleAssignment 개체 또는 JSON 파일을 사용할 수 있습니다.

PSRoleAssignment 개체를 사용하여 조건 편집

  1. Get-AzRoleAssignment를 사용하여 조건을 PSRoleAssignment 개체로 포함하는 기존 역할 할당을 가져옵니다.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. 조건을 편집합니다.

    $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'))"
    
  3. 조건과 설명을 초기화합니다.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. 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 파일을 입력으로 제공할 수도 있습니다. 다음은 ConditionDescription이 업데이트되는 예제 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 역할 할당 나열을 참조하세요.

조건 삭제

역할 할당 조건을 삭제하려면 역할 할당 조건을 편집하고 ConditionConditionVersion 속성을 빈 문자열("") 또는 $null로 설정합니다.

또는 역할 할당과 조건을 모두 삭제하려는 경우 Remove-AzRoleAssignment 명령을 사용합니다. 자세한 내용은 Azure 역할 할당 제거를 참조하세요.

다음 단계