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. Condition
Yalnızca , ConditionVersion
ve 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
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
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'))"
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"
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 $null
olarak 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.