Menambahkan atau mengedit kondisi penetapan peran Azure menggunakan Azure PowerShell

Kondisi penetapan peran Azure adalah pemeriksaan tambahan yang dapat Anda tambahkan secara opsional ke penetapan peran milik Anda untuk memberikan kontrol akses yang lebih terperinci. Misalnya, Anda dapat menambahkan kondisi yang mengharuskan objek memiliki tag tertentu untuk membaca objek. Artikel ini menjelaskan cara menambahkan, mengedit, mencantumkan, atau menghapus kondisi untuk tugas peran Anda menggunakan Azure PowerShell.

Prasyarat

Untuk informasi tentang prasyarat untuk menambah atau mengedit kondisi penetapan peran, lihat Prasyarat kondisi.

Menambahkan kondisi

Untuk menambahkan kondisi penetapan peran, gunakan New-AzRoleAssignment. Perintah New-AzRoleAssignment mencakup parameter berikut yang terkait dengan kondisi.

Parameter Jenis Deskripsi
Condition String Kondisi yang menjadi syarat pengguna dapat diberikan izin.
ConditionVersion String Versi sintaks kondisi. Harus ditetapkan ke 2.0. Jika Condition ditentukan, ConditionVersion juga harus ditentukan.

Contoh berikut menunjukkan cara untuk menginisialisasi variabel untuk menetapkan peran Storage Blob Data Reader dengan suatu kondisi. Kondisi ini memeriksa apakah nama kontainer sama dengan '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"

Gunakan New-AzRoleAssignment untuk menetapkan peran dengan kondisi.

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

Berikut adalah contoh output-nya:

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

Di PowerShell, jika kondisi Anda menyertakan tanda dolar ($), Anda harus mengawalinya dengan aksen rendah (`). Misalnya, kondisi berikut menggunakan tanda dolar untuk menguraikan nama kunci tag. Untuk informasi selengkapnya mengenai aturan untuk tanda kutip di PowerShell, lihat Mengenai Aturan Penawaran.

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

Mengedit kondisi

Untuk mengedit kondisi penetapan peran yang ada, gunakan Set-AzRoleAssignment. Hanya properti Condition, ConditionVersion, dan Description saja yang dapat diedit. Parameter -PassThru menyebabkan Set-AzRoleAssignment mengembalikan penetapan peran yang diperbarui, yang memungkinkan visualisasi atau penyimpanan dalam variabel untuk penggunaan lebih lanjut.

Ada dua cara untuk mengedit kondisi. Anda dapat menggunakan objek PSRoleAssignment atau file JSON.

Mengedit kondisi menggunakan objek PSRoleAssignment

  1. Gunakan Get-AzRoleAssignment untuk mendapatkan penetapan peran yang ada dengan kondisi sebagai objek PSRoleAssignment.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Edit kondisinya.

    $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. Inisialisasi kondisi dan deskripsi.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. Gunakan Set-AzRoleAssignment untuk memperbarui kondisi penetapan peran.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Berikut adalah contoh output-nya:

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

Mengedit kondisi menggunakan file JSON

Untuk mengedit kondisi, Anda juga dapat memberikan file JSON sebagai input. Berikut ini diperlihatkan contoh JSON ketika Condition dan Description diperbarui. Anda harus menentukan semua properti dalam berkas JSON untuk memperbarui sebuah kondisi.

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

Gunakan Set-AzRoleAssignment untuk memperbarui kondisi penetapan peran.

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

Berikut adalah contoh output-nya:

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

Mencantumkan kondisi

Untuk mencantumkan kondisi penetapan peran, gunakan New-AzRoleAssignment. Untuk informasi selengkapnya, lihat Mencantumkan penetapan peran Azure menggunakan Azure PowerShell.

Menghapus kondisi

Untuk menghapus kondisi penetapan peran, edit kondisi penetapan peran dan atur properti Condition dan ConditionVersion baik ke untai (karakter) kosong ("") atau $null.

Atau, jika Anda ingin menghapus baik penetapan peran dan kondisinya, Anda dapat menggunakan perintah Remove-AzRoleAssignment. Untuk informasi selengkapnya, lihat Menghapus penetapan peran Azure.

Langkah berikutnya