إضافة شروط تعيين دور Azure أو تحريرها باستخدام Azure PowerShell
شرط تعيين دور Azure هو فحص إضافي يمكنك إضافته اختياريا إلى تعيين الدور الخاص بك لتوفير مزيد من التحكم في الوصول الدقيق. مثلاً، يمكنك إضافة شرط يتطلب كائناً ذا علامة معينة لقراءة الكائن. توضح هذه المقالة كيفية إضافة شروط تعيينات الدور أو تحريرها أو سردها أو حذفها باستخدام Azure PowerShell.
المتطلبات الأساسية
للحصول على معلومات حول المتطلبات الأساسية لإضافة شروط تعيين الدور أو تحريرها، انظر الشروط المطلوبة.
إضافة شرط
لإضافة شرط تعيين دور، استخدم New-AzRoleAssignment. يتضمن الأمر New-AzRoleAssignment المعلمات التالية المتعلقة بالشروط.
المعلمة | النوع | الوصف |
---|---|---|
Condition |
السلسلة | الشرط الذي يمكن بموجبه منح المستخدم الإذن. |
ConditionVersion |
السلسلة | إصدار بناء جملة الشرط. يجب تعيين إلى 2.0. إذا Condition تم تحديده، ConditionVersion يجب أيضا تحديده. |
يوضح المثال التالي كيفية تهيئة المتغيرات لتعيين دور Storage Blob Data Reader بشرط. يتحقق الشرط ما إذا كان اسم الحاوية يساوي "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-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 باستخدام Azure PowerShell.
حذف شرط
لحذف شرط تعيين دور، قم بتحرير شرط تعيين الدور وتعيين الخاصيتين Condition
و ConditionVersion
إما إلى سلسلة فارغة (""
) أو $null
.
بدلا من ذلك، إذا كنت تريد حذف كل من تعيين الدور والشرط، يمكنك استخدام الأمر Remove-AzRoleAssignment . لمزيد من المعلومات، راجع إزالة تعيينات دور Azure.