使用 Azure PowerShell 新增或編輯 Azure 角色指派條件
Azure 角色指派條件是額外的檢查,您可以選擇性地將其新增至您的角色指派,以提供更精細的存取控制。 例如,您可以新增需要物件具有特定標記才能讀取物件的條件。 本文說明如何使用 Azure PowerShell 來新增、編輯、列出或刪除角色指派條件。
必要條件
如需新增或編輯角色指派條件的必要條件相關資訊,請參閱條件必要要件。
新增條件
若要新增角色指派條件,請使用 New-AzRoleAssignment。 New-AzRoleAssignment 命令包含下列與條件相關的參數。
參數 | 類型 | 描述 |
---|---|---|
Condition |
String | 使用者可獲得授權的條件。 |
ConditionVersion |
String | 條件語法的版本。 必須設為 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 檔案作為輸入。 下列顯示範例 JSON 檔案,其中 Condition
和 Description
已更新。 您必須指定 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-2>
字串的訂<find-condition-string-1>
用帳戶中尋找角色指派。$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 角色指派。