Azure PowerShell kullanarak Azure rol atama koşullarını ekleme veya düzenleme

Azure rol atama koşulu, daha ayrıntılı erişim denetimi sağlamak için isteğe bağlı olarak rol atamanıza ekleyebileceğiniz ek bir denetimdir. Örneğin, bir nesnenin nesneyi okumak için belirli bir etikete sahip olmasını gerektiren bir koşul ekleyebilirsiniz. Bu makalede, Azure PowerShell kullanarak rol atamalarınız için koşulların nasıl ekleneceği, düzenleneceği, listeleneceği veya silineceği açıklanır.

Önkoşullar

Rol atama koşullarını ekleme veya düzenleme önkoşulları hakkında bilgi için bkz . Koşullar önkoşulları.

Koşul ekle

Rol atama koşulu eklemek için New-AzRoleAssignment kullanın. New-AzRoleAssignment komutu, koşullarla ilgili aşağıdaki parametreleri içerir.

Parametre Tür Veri Akışı Açıklaması
Condition String Kullanıcıya izin verilebilen koşul.
ConditionVersion String Koşul söz diziminin sürümü. 2.0 olarak ayarlanmalıdır. Belirtilirse Condition , ConditionVersion ayrıca belirtilmelidir.

Aşağıdaki örnekte, Depolama Blob Veri Okuyucusu rolünü bir koşulla atamak için değişkenlerin nasıl başlatılmış olduğu gösterilmektedir. Koşul, kapsayıcı adının 'blobs-example-container' değerine eşit olup olmadığını denetler.

$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"

Rolü bir koşulla atamak için New-AzRoleAssignment kullanın.

New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion

Çıkış örneği:

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'de, koşulunuz dolar işareti ($) içeriyorsa, ön ekini bir backtick (') ile belirtmeniz gerekir. Örneğin, aşağıdaki koşul etiket anahtarı adını çizmek için dolar işaretlerini kullanır. PowerShell'de tırnak işareti kuralları hakkında daha fazla bilgi için bkz . Kuralları Alıntılama Hakkında.

$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'))"

Koşulu düzenleme

Mevcut rol atama koşulunu düzenlemek için Set-AzRoleAssignment komutunu kullanın. ConditionYalnızca , ConditionVersionve Description özellikleri düzenlenebilir. -PassThru parametresi, Set-AzRoleAssignment'ın güncelleştirilmiş rol atamasını döndürmesine neden olur ve bu da bir değişkende görselleştirme veya depolamanın daha fazla kullanılmasına olanak tanır.

Koşulu düzenlemenin iki yolu vardır. nesnesini veya JSON dosyasını kullanabilirsiniz PSRoleAssignment .

PSRoleAssignment nesnesini kullanarak koşulu düzenleme

  1. Var olan rol atamasını nesne olarak PSRoleAssignment bir koşulla almak için Get-AzRoleAssignment kullanın.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Koşulu düzenleyin.

    $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. Koşulu ve açıklamayı başlatın.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. Rol atamasının koşulunu güncelleştirmek için Set-AzRoleAssignment komutunu kullanın.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Çıkış örneği:

    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 dosyası kullanarak koşulu düzenleme

Bir koşulu düzenlemek için giriş olarak bir JSON dosyası da sağlayabilirsiniz. Aşağıda ve Description güncelleştirilen Condition örnek bir JSON dosyası gösterilmektedir. Bir koşulu güncelleştirmek için JSON dosyasındaki tüm özellikleri belirtmeniz gerekir.

{
    "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>"
}

Rol atamasının koşulunu güncelleştirmek için Set-AzRoleAssignment komutunu kullanın.

Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru

Çıkış örneği:

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'))

Birden çok rol atamasında koşulları düzenleme

Birden çok rol ataması için aynı güncelleştirmeyi yapmanız gerekiyorsa döngü kullanabilirsiniz. Aşağıdaki komutlar aşağıdaki görevi gerçekleştirir:

  • Bir abonelikteki <find-condition-string-1> rol atamalarını veya <find-condition-string-2> koşuldaki dizeleri bulur.

    $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) }
    

Aşağıdaki komutlar aşağıdaki görevleri gerçekleştirir:

  • Bulunan rol atamalarının koşulunda, ile <replace-condition-string>değiştirilir<condition-string>.

  • Rol atamalarını değişikliklerle Güncelleştirmeler.

    $conditionString = "<condition-string>"
    $conditionStringReplacement = "<condition-string-replacement>"
    $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ }
    $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
    

Dizelerde köşeli ayraç ([ ]) gibi özel karakterler varsa, bu karakterlerden ters eğik çizgi (\) ile kaçış yapmanız gerekir.

Koşulu listeleme

Rol atama koşulunu listelemek için Get-AzRoleAssignment komutunu kullanın. Daha fazla bilgi için bkz . Azure PowerShell kullanarak Azure rol atamalarını listeleme.

Koşulu silme

Rol atama koşulunu silmek için rol atama koşulunu düzenleyin ve ve Condition ConditionVersion özelliklerini boş bir dize ("") veya $nullolarak ayarlayın.

Alternatif olarak, rol atamasını ve koşulu silmek isterseniz Remove-AzRoleAssignment komutunu kullanabilirsiniz. Daha fazla bilgi için, bkz. Azure rol atamalarını kaldırma.

Sonraki adımlar