استخدام هوية مدارة معينة من قبل النظام لحساب التنفيذ التلقائي في Azure
توضح لك هذه المقالة كيفية تمكين الهوية المُدارة المعينة من قبل النظام لحساب التنفيذ التلقائي في Azure، وكيفية استخدامها للوصول إلى الموارد الأخرى. لمزيد من المعلومات حول كيفية عمل الهويات المدارة مع Azure Automation، راجع الهويات المدارة.
في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
حساب التنفيذ التلقائي في Azure. للحصول على التعليمات، راجع إنشاء حساب التنفيذ التلقائي في Azure.
أحدث إصدار من وحدات Az PowerShell النمطية للحسابات Az.Resources وAz.Automation وAz.KeyVault.
مورد Azure الذي تريد الوصول إليه من دفتر التشغيل التنفيذ الخاص بك. يحتاج هذا المورد إلى دور معرف للهوية المدارة، ما يساعد على مصادقة دفتر تشغيل التنفيذ التلقائي على الوصول إلى المورد. لإضافة أدوار، يجب أن تكون مالكا للمورد في مستأجر Microsoft Entra المقابل.
لا يوجد حد أدنى من متطلبات الإصدار ل Hybrid Runbook Worker المستند إلى الملحق، وستعمل جميع الإصدارات. الحد الأدنى من الإصدارات المطلوبة للعامل المختلط المستند إلى العامل هو:
- Windows Hybrid Runbook Worker: الإصدار 7.3.1125.0
- عامل تشغيل Linux Hybrid: الإصدار 1.7.4.0
للتحقق من الإصدارات:
- Windows Hybrid Runbook Worker: انتقل إلى مسار التثبيت -
C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\.
ويحتوي المجلد Azure Automation على مجلد فرعي برقم الإصدار كاسم المجلد الفرعي. - Linux Hybrid Runbook Worker: انتقل إلى المسار -
vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION.
ويحتوي الملف VERSION على رقم إصدار العامل المختلط.
لتعيين دور Azure، يجب أن يكون لديك
Microsoft.Authorization/roleAssignments/write
إذن مثل مسؤول وصول المستخدم أو المالك.
بمجرد التمكين، سيتم تعيين الخصائص التالية للهوية المُدارة التي خصصها النظام.
خاصية (JSON) | قيمة | الوصف |
---|---|---|
المعرف الأساسي | <principal-ID> | المعرف الفريد العمومي (GUID) للكائن الأساسي للخدمة للهوية المدارة المعينة من قبل النظام التي تمثل حساب التنفيذ التلقائي الخاص بك في مستأجر Microsoft Entra. يظهر هذا المعرف الفريد العمومي أحيانًا على أنه "عنصر كائن" أو عنصر كائن. |
tenantid | <Azure-AD-tenant-ID> | المعرف الفريد العمومي (GUID) الذي يمثل مستأجر Microsoft Entra حيث أصبح حساب التنفيذ التلقائي الآن عضوا. داخل مستأجر Microsoft Entra، يكون لمدير الخدمة نفس اسم حساب التنفيذ التلقائي. |
يمكنك تمكين الهوية المُدارة المعينة من قبل النظام لحساب Azure Automation باستخدام مدخل Microsoft Azure أو PowerShell أو Azure REST API أو قالب ARM. بالنسبة إلى الأمثلة التي تتضمن PowerShell، قم أولاً بتسجيل الدخول إلى Azure بشكل تفاعلي باستخدام الأمر Connect-AzAccount واتبع الإرشادات.
# Sign in to your Azure subscription
$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
Connect-AzAccount
}
# If you have multiple subscriptions, set the one to use
# Select-AzSubscription -SubscriptionId "<SUBSCRIPTIONID>"
ثم قم بتهيئة مجموعة من المتغيرات التي سيتم استخدامها في جميع الأمثلة. قم بمراجعة القيم أدناه ثم قم بالتنفيذ.
$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
هام
يتجاوز معرف مستوى حساب الأتمتة الجديد أي هويات سابقة مخصصة للنظام على مستوى الجهاز الظاهري، والتي تم وصفها في استخدام مصادقة دفتر التشغيل باستخدام الهويات المدارة. في حال كنت تقوم بتشغيل مهام مختلطة على Azure VMs التي تستخدم الهوية المعينة من النظام لـ VM للوصول إلى موارد دفتر التشغيل، فسيتم استخدام هوية الحساب التلقائي للمهام المختلطة.
في حال كنت ترغب في الاستمرار في استخدام الهوية المُدارة لجهاز VM، فلا يجب عليك تمكين هوية مستوى حساب التشغيل التلقائي. وفي حال قد قمت بتمكينه بالفعل، يمكنك تعطيل الهوية المُدارة التي خصصها النظام لحساب التشغيل الآلي. راجع تعطيل الهوية المُدارة لحساب Azure Automation الخاص بك.
قم بإجراء الخطوات التالية:
قم بتسجيل الدخول إلى بوابة Azure.
في مدخل Azure، انتقل إلى حساب Automation خاصتك.
ضمن Account Settings، حدد Identity.
تعيين الخيار تعيين النظام إلى تشغيل ثم اضغط علىحفظ. عندما تتم مطالبتك بالتأكيد، حدد نعم.
يمكن لحساب التنفيذ التلقائي الآن استخدام الهوية المعينة من قبل النظام، والمسجلة بمعرف Microsoft Entra ويتم تمثيلها بواسطة معرف كائن.
استخدام PowerShell cmdlet تعيين-AzAutomationAccount لتمكين الهوية المدارة المعينة من قبل النظام.
$output = Set-AzAutomationAccount `
-ResourceGroupName $resourceGroup `
-Name $automationAccount `
-AssignSystemIdentity
$output
يجب أن يبدو الإخراج مشابهًا لما يلي:
للحصول على ناتج إضافي، قم بتعديل المثال لتحديد:$output.identity | ConvertTo-Json
.
توفير بناء الجملة والخطوات كالمثال أدناه.
يُمكّن بناء الجملة الأساسية أدناه هوية مُدارة يعينها النظام لحساب أتمتة حالي باستخدام طريقة HTTP PATCH. ومع ذلك، فإن بناء الجملة هذا سيزيل أي هويات مُدارة معينة من قبل المستخدم مرتبطة بحساب الأتمتة.
{
"identity": {
"type": "SystemAssigned"
}
}
في حال كانت هناك هويات متعددة تم تعيينها من قِبل المستخدم، لتتمكن من الاحتفاظ بها وإزالة الهوية المعينة من قِبل النظام فقط، تحتاج إلى تحديد كل هوية معينة من قِبل المستخدم باستخدام قائمة محددة بفواصل. يستخدم المثال أدناه أسلوب HTTP PATCH.
{
"identity" : {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID": {},
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID2": {}
}
}
}
بناء جملة API كما يلي:
PATCH https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview
قم بإجراء الخطوات التالية.
انسخ صيغة النص والصقها في ملف باسم
body_sa.json
. احفظ الملف على جهازك المحلي أو في حساب تخزين Azure.تحديث قيمة المتغير أدناه ثم تنفيذ.
$file = "path\body_sa.json"
يستخدم هذا المثال أمر PowerShell cmdlet Invoke-RestMethod لإرسال طلب PATCH إلى حساب Automation خاصتك.
# build URI $URI = "https://management.azure.com/subscriptions/$subscriptionID/resourceGroups/$resourceGroup/providers/Microsoft.Automation/automationAccounts/$automationAccount`?api-version=2020-01-13-preview" # build body $body = Get-Content $file # obtain access token $azContext = Get-AzContext $azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile $profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile) $token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId) $authHeader = @{ 'Content-Type'='application/json' 'Authorization'='Bearer ' + $token.AccessToken } # Invoke the REST API $response = Invoke-RestMethod -Uri $URI -Method PATCH -Headers $authHeader -Body $body # Review output $response.identity | ConvertTo-Json
يجب أن يبدو الإخراج مشابهًا لما يلي:
{ "PrincipalId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "TenantId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "Type": 0, "UserAssignedIdentities": null }
توفير بناء الجملة والخطوات كالمثال أدناه.
يتيح نموذج بناء جملة النموذج أدناه هوية مُدارة يعينها النظام لحساب التنفيذ التلقائي الحالي. ومع ذلك، فإن بناء الجملة هذا سيزيل أي هويات مُدارة معينة من قبل المستخدم مرتبطة بحساب الأتمتة.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Automation/automationAccounts",
"apiVersion": "2020-01-13-preview",
"name": "yourAutomationAccount",
"location": "[resourceGroup().location]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"sku": {
"name": "Basic"
}
}
}
]
}
قم بإجراء الخطوات التالية.
مراجعة بناء الجملة من القالب أعلاه لاستخدام حساب التنفيذ التلقائي وحفظه إلى ملف مسمى
template_sa.json
.تحديث قيمة المتغير أدناه ثم تنفيذ.
$templateFile = "path\template_sa.json"
استخدام PowerShell cmdlet جديد AzResourceGroupDeploymentلتوزيع القالب.
New-AzResourceGroupDeployment ` -Name "SystemAssignedDeployment" ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile
الأمر لن ينتج إخراجاً ومع ذلك، يمكنك استخدام التعليمة البرمجية أدناه للتحقق:
(Get-AzAutomationAccount ` -ResourceGroupName $resourceGroup ` -Name $automationAccount).Identity | ConvertTo-Json
سيبدو الإخراج مشابهاً للإخراج المُوضَّح لمثال واجهة برمجة تطبيقات REST، أعلاه.
يمكن لحساب التنفيذ التلقائي استخدام هويته المدارة المعينة من قبل النظام للحصول على رموز مميزة للوصول إلى الموارد الأخرى المحمية بواسطة معرف Microsoft Entra، مثل Azure Key Vault. لا تمثل هذه الرموز المميزة أي مستخدم محدد للتطبيق. بدلاً من ذلك، تمثل التطبيق الذي يتم الوصول إلى المورد. في هذه الحالة، على سبيل المثال، يمثل الرمز المميز حساب Automation.
قبل أن تتمكن من استخدام الهوية المدارة المعينة من قبل النظام لتنفيذ أي إجراءات داخل Azure، قم بإعداد الوصول لهذه الهوية على مورد Azure حيث تخطط لاستخدام الهوية. لإكمال هذه المهمة، بادر بتعيين الدور المناسب إلى تلك الهوية على مورد Azure المستهدف.
اتبع مبدأ الامتياز الأقل وبادر بتعيين الأذونات المطلوبة بعنايةٍ فقط لتنفيذ دفتر التشغيل. على سبيل المثال، إذا كان حساب Automation مطلوبًا فقط لبدء أو إيقاف Azure VM، فإن الأذونات المعينة لحساب "تشغيل باسم" أو الهوية المُدارة يجب أن تكون فقط لبدء تشغيل الجهاز الظاهري أو إيقافه. وبالمثل، إذا كان دفتر التشغيل يقرأ من تخزين كائن ثنائي كبير الحجم، فقم بتعيين أذونات القراءة فقط.
يستخدم هذا المثال Azure PowerShell لإظهار كيفية تعيين دور المساهم في الاشتراك إلى مورد حساب Azure Automation. يتم استخدام دور المساهم كمثال، وقد يكون مطلوبًا أو غير مطلوب في حالتك.
New-AzRoleAssignment `
-ObjectId <automation-Identity-object-id> `
-Scope "/subscriptions/<subscription-id>" `
-RoleDefinitionName "Contributor"
للتحقق من دور إلى هوية مدارة معينة من قبل النظام لحساب التنفيذ التلقائي، اتبع الخطوات التالية:
قم بتسجيل الدخول إلى بوابة Azure.
انقل حساب التشغيل التلقائي الخاص بك.
ضمن Account Settings، حدد Identity.
ضمن أذونات، انقر فوق تعيينات دور Azure.
إذا تم تعيين الأدوار بالفعل إلى الهوية المدارة المحددة المعينة من قبل النظام، يمكنك مشاهدة قائمة بتعيينات الأدوار. تتضمن هذه القائمة جميع تعيينات الأدوار التي لديك الإذن بقراءتها.
لتغيير الاشتراك، انقر فوق القائمة المنسدلة Subscription وحدد الاشتراك المناسب.
انقر فوق إضافة تعيين دور (معاينة)
في القائمة المنسدلة، حدد مجموعة الموارد التي يطبقها تعيين الدور - الاشتراك ومجموعة الموارد والدور والنطاق.
إذا لم يكن لديك تعيين الدور، يمكنك عرض أذونات الكتابة للنطاق المحدد كرسالة مضمنة.في القائمة المنسدلة Role، حدد دورا كمساهم في الجهاز الظاهري.
انقر فوق حفظ.
بعد بضع دقائق، يتم تعيين الهوية المدارة للدور في النطاق المحدد.
بعد تمكين الهوية المدارة لحساب التنفيذ التلقائي الخاص بك وإعطاء حق الوصول إلى هوية المورد الهدف، يمكنك تحديد هذه الهوية في دفاتر التشغيل مقابل الموارد التي تدعم الهوية المدارة. للحصول على دعم الهوية، استخدم Connect-AzAccount
cmdlet Az cmdlet. راجع الاتصال-AzAccount في المرجع PowerShell.
# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process
# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context
# Set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
ملاحظة
في حال كانت مؤسستك لا تزال تستخدم cmdlets AzureRM مهملاً، يمكنك استخدام Connect-AzureRMAccount -Identity
.
بالنسبة إلى HTTP Endpoints، تأكد مما يلي.
- يجب أن يكون عنوان بيانات التعريف موجودًا ويجب تعيينه إلى "صحيح".
- ينبغي تمرير مورد مع الطلب كمعلمة استعلام لطلب GET وكبيانات نموذج لطلب POST.
- تعيين قيمة متغير البيئة IDENTITY_HEADER إلى X-IDENTITY-HEADER.
- ينبغي أن يكون نوع المحتوى لطلب النشر "تطبيق/x-www-form-urlencoded".
$resource= "?resource=https://management.azure.com/"
$url = $env:IDENTITY_ENDPOINT + $resource
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$Headers.Add("Metadata", "True")
$accessToken = Invoke-RestMethod -Uri $url -Method 'GET' -Headers $Headers
Write-Output $accessToken.access_token
$url = $env:IDENTITY_ENDPOINT
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$headers.Add("Metadata", "True")
$body = @{resource='https://management.azure.com/' }
$accessToken = Invoke-RestMethod $url -Method 'POST' -Headers $headers -ContentType 'application/x-www-form-urlencoded' -Body $body
Write-Output $accessToken.access_token
لمزيد من المعلومات، راجع الحصول على AzKeyVaultSecret.
Write-Output "Connecting to azure via Connect-AzAccount -Identity"
Connect-AzAccount -Identity
Write-Output "Successfully connected with Automation account's Managed Identity"
Write-Output "Trying to fetch value from key vault using MI. Make sure you have given correct access to Managed Identity"
$secret = Get-AzKeyVaultSecret -VaultName '<KVname>' -Name '<KeyName>'
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
$secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
Write-Output $secretValueText
} finally {
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
#!/usr/bin/env python3
import os
import requests
# printing environment variables
endPoint = os.getenv('IDENTITY_ENDPOINT')+"?resource=https://management.azure.com/"
identityHeader = os.getenv('IDENTITY_HEADER')
payload={}
headers = {
'X-IDENTITY-HEADER': identityHeader,
'Metadata': 'True'
}
response = requests.request("GET", endPoint, headers=headers, data=payload)
print(response.text)
للحصول على تفاصيل حول توفير الوصول إلى قاعدة بيانات Azure SQL، راجع توفير مسؤول Microsoft Entra (قاعدة بيانات SQL) .
$queryParameter = "?resource=https://database.windows.net/"
$url = $env:IDENTITY_ENDPOINT + $queryParameter
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER)
$Headers.Add("Metadata", "True")
$content =[System.Text.Encoding]::Default.GetString((Invoke-WebRequest -UseBasicParsing -Uri $url -Method 'GET' -Headers $Headers).RawContentStream.ToArray()) | ConvertFrom-Json
$Token = $content.access_token
echo "The managed identities for Azure resources access token is $Token"
$SQLServerName = "<ServerName>" # Azure SQL logical server name
$DatabaseName = "<DBname>" # Azure SQL database name
Write-Host "Create SQL connection string"
$conn = New-Object System.Data.SqlClient.SQLConnection
$conn.ConnectionString = "Data Source=$SQLServerName.database.windows.net;Initial Catalog=$DatabaseName;Connect Timeout=30"
$conn.AccessToken = $Token
Write-host "Connect to database and execute SQL script"
$conn.Open()
$ddlstmt = "CREATE TABLE Person( PersonId INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(128) NOT NULL)"
Write-host " "
Write-host "SQL DDL command"
$ddlstmt
$command = New-Object -TypeName System.Data.SqlClient.SqlCommand($ddlstmt, $conn)
Write-host "results"
$command.ExecuteNonQuery()
$conn.Close()
توفر حسابات التشغيل كحسابات في Azure Automation مصادقة لإدارة موارد Azure Resource Manager أو الموارد التي تم نشرها في نموذج التوزيع الكلاسيكي. للتبديل من حساب تشغيل خاص بك إلى هوية مدارة لمصادقة دفتر التشغيل، اتبع الخطوات أدناه.
تمكين نوعمعين من النظام أو معين من قبل المستخدمأو كلا النوعين من الهويات المدارة.
امنح الهوية المُدارة الامتيازات نفسها لموارد Azure التي تطابق ما تم تعيينه لحساب "تشغيل باسم".
تحديث دفاتر التشغيل الخاصة بك للمصادقة باستخدام الهوية المدارة.
تعديل Runbooks لاستخدام الهوية المدارة. للحصول على دعم الهوية، استخدم
Connect-AzAccount
cmdlet Az cmdlet. راجع الاتصال-AzAccount في المرجع PowerShell.- إذا كنت تستخدم وحدات AzureRM النمطية، فقم بالتحديث
AzureRM.Profile
إلى أحدث إصدار واستبدل باستخدامAdd-AzureRMAccount
cmdlet بConnect-AzureRMAccount –Identity
. - في حال كنت تستخدم Az الوحدات النمطية التحديث إلى أحدث إصدار باتباع الخطوات في المقالة الوحدات النمطية تحديث Azure PowerShell.
- إذا كنت تستخدم وحدات AzureRM النمطية، فقم بالتحديث
في حال عدم إكمال دفاتر التشغيل بنجاحٍ، راجع استكشاف أخطاء هويات Azure Automation المُدارة وإصلاحها.
في حال كنت بحاجة إلى تعطيل هوية مُدارة، راجع تعطيل الهوية المدارة لحساب Azure Automation خاصتك.
للحصول على نظرة عامة عن أمان حساب Azure Automation، راجع نظرة عامة عن مصادقة حساب Automation.