استخدام هوية مدارة معينة من قبل النظام لحساب التنفيذ التلقائي في Azure

توضح لك هذه المقالة كيفية تمكين الهوية المُدارة المعينة من قبل النظام لحساب التنفيذ التلقائي في Azure، وكيفية استخدامها للوصول إلى الموارد الأخرى. لمزيد من المعلومات حول كيفية عمل الهويات المدارة مع Azure Automation، راجع الهويات المدارة.

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

المتطلبات الأساسية

  • حساب التنفيذ التلقائي في Azure. للحصول على التعليمات، راجع إنشاء حساب التنفيذ التلقائي في Azure.

  • أحدث إصدار من وحدات Az PowerShell النمطية للحسابات Az.Resources وAz.Automation وAz.KeyVault.

  • مورد Azure الذي تريد الوصول إليه من دفتر التشغيل التنفيذ الخاص بك. يحتاج هذا المورد إلى دور معرف للهوية المدارة، ما يساعد على مصادقة دفتر تشغيل التنفيذ التلقائي على الوصول إلى المورد. لإضافة أدوار، يجب أن تكون مالكا للمورد في مستأجر Microsoft Entra المقابل.

  • إذا كنت ترغب في تنفيذ مهام مختلطة باستخدام هوية مدارة، فقم بتحديث Hybrid Runbook Worker المستند إلى العامل إلى أحدث إصدار. لا يوجد حد أدنى من متطلبات الإصدار ل 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 إذن مثل مسؤول وصول المستخدم أو المالك.

استخدام هوية مدارة معينة من قبل النظام لحساب التنفيذ التلقائي في Azure

بمجرد التمكين، سيتم تعيين الخصائص التالية للهوية المُدارة التي خصصها النظام.

خاصية (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 للوصول إلى موارد دفتر التشغيل، فسيتم استخدام هوية الحساب التلقائي للمهام المختلطة. وهذا يعني أن تنفيذ وظيفتك الحالية قد يتأثر إذا كنت تستخدم ميزة المفاتيح المُدارة للعميل (CMK) في حساب الأتمتة الخاص بك.

في حال كنت ترغب في الاستمرار في استخدام الهوية المُدارة لجهاز VM، فلا يجب عليك تمكين هوية مستوى حساب التشغيل التلقائي. وفي حال قد قمت بتمكينه بالفعل، يمكنك تعطيل الهوية المُدارة التي خصصها النظام لحساب التشغيل الآلي. راجع تعطيل الهوية المُدارة لحساب Azure Automation الخاص بك.

تمكين استخدام مدخل Microsoft Azure

قم بإجراء الخطوات التالية:

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. في مدخل Azure، انتقل إلى حساب Automation خاصتك.

  3. ضمن Account Settings، حدد Identity.

  4. تعيين الخيار تعيين النظام إلى تشغيل ثم اضغط علىحفظ. عندما تتم مطالبتك بالتأكيد، حدد نعم.

    تمكين الهوية المعينة من قبل النظام في مدخل Microsoft Azure.

    يمكن لحساب التنفيذ التلقائي الآن استخدام الهوية المعينة من قبل النظام، والمسجلة بمعرف Microsoft Entra ويتم تمثيلها بواسطة معرف كائن.

    معرف كائن الهوية المدارة.

تمكين استخدام PowerShell

استخدام PowerShell cmdlet تعيين-AzAutomationAccount لتمكين الهوية المدارة المعينة من قبل النظام.

$output = Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignSystemIdentity

$output

يجب أن يبدو الإخراج مشابهًا لما يلي:

الإخراج من الأمر set-azautomationaccount

للحصول على ناتج إضافي، قم بتعديل المثال لتحديد:$output.identity | ConvertTo-Json.

تمكين استخدام واجهة برمجة تطبيقات REST

توفير بناء الجملة والخطوات كالمثال أدناه.

بناء الجملة

يُمكّن بناء الجملة الأساسية أدناه هوية مُدارة يعينها النظام لحساب أتمتة حالي باستخدام طريقة HTTP PATCH. ومع ذلك، فإن بناء الجملة هذا سيزيل أي هويات مُدارة معينة من قبل المستخدم مرتبطة بحساب الأتمتة.

{ 
 "identity": { 
   "type": "SystemAssigned" 
  } 
}

في حال كانت هناك هويات متعددة تم تعيينها من قِبل المستخدم، لتتمكن من الاحتفاظ بها وإزالة الهوية المعينة من قِبل النظام فقط، تحتاج إلى تحديد كل هوية معينة من قِبل المستخدم باستخدام قائمة محددة بفواصل. يستخدم المثال أدناه أسلوب HTTP PATCH.

{ 
  "identity" : {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID": {},
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID2": {}
    }
  }
}

بناء جملة API كما يلي:

PATCH https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview

مثال

قم بإجراء الخطوات التالية.

  1. انسخ صيغة النص والصقها في ملف باسم body_sa.json. احفظ الملف على جهازك المحلي أو في حساب تخزين Azure.

  2. تحديث قيمة المتغير أدناه ثم تنفيذ.

    $file = "path\body_sa.json"
    
  3. يستخدم هذا المثال أمر 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
    }
    

تمكين استخدام قالب ARM

توفير بناء الجملة والخطوات كالمثال أدناه.

بناء جملة القالب

يتيح نموذج بناء جملة النموذج أدناه هوية مُدارة يعينها النظام لحساب التنفيذ التلقائي الحالي. ومع ذلك، فإن بناء الجملة هذا سيزيل أي هويات مُدارة معينة من قبل المستخدم مرتبطة بحساب الأتمتة.

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

مثال

قم بإجراء الخطوات التالية.

  1. مراجعة بناء الجملة من القالب أعلاه لاستخدام حساب التنفيذ التلقائي وحفظه إلى ملف مسمى template_sa.json.

  2. تحديث قيمة المتغير أدناه ثم تنفيذ.

    $templateFile = "path\template_sa.json"
    
  3. استخدام 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 المستهدف.

اتبع مبدأ الامتياز الأقل وبادر بتعيين الأذونات المطلوبة بعنايةٍ فقط لتنفيذ دفتر التشغيل. على سبيل المثال، إذا كان حساب Automation مطلوبًا فقط لبدء أو إيقاف Azure VM، فإن الأذونات المعينة لحساب "تشغيل باسم" أو الهوية المُدارة يجب أن تكون فقط لبدء تشغيل الجهاز الظاهري أو إيقافه. وبالمثل، إذا كان دفتر التشغيل يقرأ من تخزين كائن ثنائي كبير الحجم، فقم بتعيين أذونات القراءة فقط.

يستخدم هذا المثال Azure PowerShell لإظهار كيفية تعيين دور المساهم في الاشتراك إلى مورد حساب Azure Automation. يتم استخدام دور المساهم كمثال، وقد يكون مطلوبًا أو غير مطلوب في حالتك.

New-AzRoleAssignment `
    -ObjectId <automation-Identity-object-id> `
    -Scope "/subscriptions/<subscription-id>" `
    -RoleDefinitionName "Contributor"

التحقق من تعيين الدور إلى هوية مدارة من قبل النظام

للتحقق من دور إلى هوية مدارة معينة من قبل النظام لحساب التنفيذ التلقائي، اتبع الخطوات التالية:

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. انقل حساب التشغيل التلقائي الخاص بك.

  3. ضمن Account Settings، حدد Identity.

    تعيين دور في الهوية المعينة من قبل النظام في مدخل Microsoft Azure.

  4. ضمن أذونات، انقر فوق تعيينات دور Azure.

    إذا تم تعيين الأدوار بالفعل إلى الهوية المدارة المحددة المعينة من قبل النظام، يمكنك مشاهدة قائمة بتعيينات الأدوار. تتضمن هذه القائمة جميع تعيينات الأدوار التي لديك الإذن بقراءتها.

    عرض تعيينات الأدوار التي لديك إذن في مدخل Microsoft Azure.

  5. لتغيير الاشتراك، انقر فوق القائمة المنسدلة Subscription وحدد الاشتراك المناسب.

  6. انقر فوق إضافة تعيين دور (معاينة)

  7. في القائمة المنسدلة، حدد مجموعة الموارد التي يطبقها تعيين الدور - الاشتراك ومجموعة الموارد والدور والنطاق.
    إذا لم يكن لديك تعيين الدور، يمكنك عرض أذونات الكتابة للنطاق المحدد كرسالة مضمنة.

  8. في القائمة المنسدلة Role، حدد دورا كمساهم في الجهاز الظاهري.

  9. انقر فوق حفظ.

    إضافة تعيين دور في مدخل Microsoft Azure.

بعد بضع دقائق، يتم تعيين الهوية المدارة للدور في النطاق المحدد.

مصادقة الوصول باستخدام هوية مدارة معينة من قبل النظام

بعد تمكين الهوية المدارة لحساب التنفيذ التلقائي الخاص بك وإعطاء حق الوصول إلى هوية المورد الهدف، يمكنك تحديد هذه الهوية في دفاتر التشغيل مقابل الموارد التي تدعم الهوية المدارة. للحصول على دعم الهوية، استخدم 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.

إنشاء الرمز المميز للوصول دون استخدام أوامر Azure cmdlets

بالنسبة إلى HTTP Endpoints، تأكد مما يلي.

  • يجب أن يكون عنوان بيانات التعريف موجودًا ويجب تعيينه إلى "صحيح".
  • ينبغي تمرير مورد مع الطلب كمعلمة استعلام لطلب GET وكبيانات نموذج لطلب POST.
  • تعيين قيمة متغير البيئة IDENTITY_HEADER إلى X-IDENTITY-HEADER.
  • ينبغي أن يكون نوع المحتوى لطلب النشر "تطبيق/x-www-form-urlencoded".

الحصول على رمز Access المميز للهوية المدارة المعينة من قبل النظام باستخدام HTTP Get

$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

الحصول على رمز Access المميز للهوية المدارة المعينة من قبل النظام باستخدام HTTP Get

$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

استخدام الهوية المدارة المعينة من قبل النظام للوصول إلى Azure Key Vault في Azure PowerShell

لمزيد من المعلومات، راجع الحصول على 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) 
}

استخدام الهوية المدارة المعينة من قبل النظام في Azure PowerShell

#!/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) 

استخدام هوية مدارة معينة من قبل النظام إلى قاعدة بيانات Access SQL

للحصول على تفاصيل حول توفير الوصول إلى قاعدة بيانات 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 أو الموارد التي تم نشرها في نموذج التوزيع الكلاسيكي. للتبديل من حساب تشغيل خاص بك إلى هوية مدارة لمصادقة دفتر التشغيل، اتبع الخطوات أدناه.

  1. تمكين نوعمعين من النظام أو معين من قبل المستخدمأو كلا النوعين من الهويات المدارة.

  2. امنح الهوية المُدارة الامتيازات نفسها لموارد Azure التي تطابق ما تم تعيينه لحساب "تشغيل باسم".

  3. تحديث دفاتر التشغيل الخاصة بك للمصادقة باستخدام الهوية المدارة.

  4. تعديل Runbooks لاستخدام الهوية المدارة. للحصول على دعم الهوية، استخدم Connect-AzAccount cmdlet Az cmdlet. راجع الاتصال-AzAccount في المرجع PowerShell.

    • إذا كنت تستخدم وحدات AzureRM النمطية، فقم بالتحديث AzureRM.Profile إلى أحدث إصدار واستبدل باستخدام Add-AzureRMAccount cmdlet ب Connect-AzureRMAccount –Identity.
    • في حال كنت تستخدم Az الوحدات النمطية التحديث إلى أحدث إصدار باتباع الخطوات في المقالة الوحدات النمطية تحديث Azure PowerShell.

الخطوات التالية