Azure Otomasyonu hesabı için sistem tarafından atanan yönetilen kimlik kullanma

Bu makalede, bir Azure Otomasyonu hesabı için sistem tarafından atanan yönetilen kimliği etkinleştirme ve diğer kaynaklara erişmek için bu kimliği kullanma adımları gösterilmektedir. Yönetilen kimliklerin Azure Otomasyonu ile nasıl çalıştığı hakkında daha fazla bilgi için bkz. Yönetilen kimlikler.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Ön koşullar

  • Azure Otomasyonu hesabı. Yönergeler için bkz. Azure Otomasyonu hesabı oluşturma.

  • Az PowerShell modüllerinin en son sürümü Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.

  • Otomasyon runbook'unuzdan erişmek istediğiniz bir Azure kaynağı. Bu kaynağın yönetilen kimlik için tanımlanmış bir rolü olması gerekir ve bu rol Otomasyon runbook'unun kaynağa erişimin kimliğini doğrulamasına yardımcı olur. Rol eklemek için ilgili Microsoft Entra kiracısında kaynağın sahibi olmanız gerekir.

  • Yönetilen kimlik kullanarak karma işleri yürütmek istiyorsanız aracı tabanlı Karma Runbook Çalışanı'nı en son sürüme güncelleştirin. Uzantı tabanlı Karma Runbook Çalışanı için en düşük sürüm gereksinimi yoktur ve tüm sürümler çalışır. Aracı tabanlı Karma Çalışanı için gereken en düşük sürümler şunlardır:

    • Windows Karma Runbook Çalışanı: sürüm 7.3.1125.0
    • Linux Karma Runbook Çalışanı: sürüm 1.7.4.0

    Sürümleri denetlemek için:

    • Windows Karma Runbook Çalışanı: Yükleme yoluna gidin ve C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\. Azure Otomasyonu klasörü, alt klasörün adı olarak sürüm numarasını içeren bir alt klasör içerir.
    • Linux Karma Runbook Çalışanı: Yola gidin ve vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION. VERSION dosyasında Karma Çalışanın sürüm numarası bulunur.
  • Azure rolü atamak için Kullanıcı Erişimi Yönetici istrator veya Sahip gibi izinlere sahip Microsoft.Authorization/roleAssignments/write olmanız gerekir.

Azure Otomasyonu hesabı için sistem tarafından atanan yönetilen kimliği etkinleştirme

Etkinleştirildikten sonra, sistem tarafından atanan yönetilen kimliğe aşağıdaki özellikler atanır.

Özellik (JSON) Değer Tanım
principalid <asıl kimlik> Microsoft Entra kiracısında Otomasyon hesabınızı temsil eden sistem tarafından atanan yönetilen kimlik için hizmet sorumlusu nesnesinin Genel Benzersiz Tanımlayıcısı (GUID). Bu GUID bazen "nesne kimliği" veya objectID olarak görünür.
tenantid <Azure-AD-tenant-ID> Otomasyon hesabının artık üye olduğu Microsoft Entra kiracısını temsil eden Genel Benzersiz Tanımlayıcı (GUID). Microsoft Entra kiracısının içinde hizmet sorumlusu, Otomasyon hesabıyla aynı ada sahiptir.

Azure portalı, PowerShell, Azure REST API veya ARM şablonunu kullanarak bir Azure Otomasyonu hesabı için sistem tarafından atanan yönetilen kimliği etkinleştirebilirsiniz. PowerShell ile ilgili örnekler için önce Bağlan-AzAccount cmdlet'ini kullanarak Azure'da etkileşimli olarak oturum açın ve yönergeleri izleyin.

# 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>"

Ardından, örnekler boyunca kullanılacak bir dizi değişken başlatın. Aşağıdaki değerleri düzeltin ve yürütür.

$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"

Önemli

Yeni Otomasyon hesabı düzeyindeki kimlik, Runbook kimlik doğrulamasını yönetilen kimliklerle kullanma bölümünde açıklanan vm düzeyinde sistem tarafından atanan önceki kimlikleri geçersiz kılar. Runbook kaynaklarına erişmek için VM'nin sistem tarafından atanan kimliğini kullanan Azure VM'lerinde karma işler çalıştırıyorsanız karma işler için Otomasyon hesabı kimliği kullanılır. Bu, Otomasyon hesabınızın Müşteri Tarafından Yönetilen Anahtarlar (CMK) özelliğini kullandıysanız mevcut iş yürütmenizin etkilenebileceği anlamına gelir.

VM'nin yönetilen kimliğini kullanmaya devam etmek istiyorsanız Otomasyon hesap düzeyi kimliğini etkinleştirmemeniz gerekir. Zaten etkinleştirdiyseniz, Otomasyon hesabı sistem tarafından atanan yönetilen kimliği devre dışı bırakabilirsiniz. Bkz. Azure Otomasyonu hesabı yönetilen kimliğinizi devre dışı bırakma.

Azure portalını kullanarak etkinleştirme

Aşağıdaki adımları gerçekleştirin:

  1. Azure Portal oturum açın.

  2. Azure portalında Otomasyon hesabınıza gidin.

  3. Hesap Ayarları’nın altında Kimlik'i seçin.

  4. Sistem tarafından atanan seçeneğini Açık olarak ayarlayın ve Kaydet'e basın. Onaylamanız istendiğinde Evet'i seçin.

    Enabling system-assigned identity in Azure portal.

    Otomasyon hesabınız artık Microsoft Entra Id ile kaydedilen ve bir nesne kimliğiyle temsil edilen sistem tarafından atanan kimliği kullanabilir.

    Managed identity object ID.

PowerShell’i kullanarak etkinleştirme

Sistem tarafından atanan yönetilen kimliği etkinleştirmek için Set-AzAutomationAccount PowerShell cmdlet'ini kullanın.

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

$output

Çıkış aşağıdakine benzer görünmelidir:

Output from set-azautomationaccount command.

Ek çıktı için örneği şu şekilde değiştirin: $output.identity | ConvertTo-Json.

REST API kullanarak etkinleştirme

Söz dizimi ve örnek adımlar aşağıda verilmiştır.

Sözdizimi

Aşağıdaki gövde söz dizimi, HTTP PATCH yöntemini kullanarak mevcut bir Otomasyon hesabına sistem tarafından atanan yönetilen kimliği etkinleştirir. Ancak, bu söz dizimi Otomasyon hesabıyla ilişkili mevcut kullanıcı tarafından atanan yönetilen kimlikleri kaldırır.

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

Tanımlanan birden çok kullanıcı tarafından atanan kimlik varsa, bunları korumak ve yalnızca sistem tarafından atanan kimliği kaldırmak için, kullanıcı tarafından atanan her kimliği virgülle ayrılmış listeyi kullanarak belirtmeniz gerekir. Aşağıdaki örnekte HTTP PATCH yöntemi kullanılır.

{ 
  "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'nin söz dizimi aşağıdaki gibidir:

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

Örnek

Aşağıdaki adımları gerçekleştirin.

  1. Gövde söz dizimini kopyalayıp adlı body_sa.jsonbir dosyaya yapıştırın. Dosyayı yerel makinenize veya bir Azure depolama hesabına kaydedin.

  2. Aşağıdaki değişken değerini güncelleştirin ve yürütür.

    $file = "path\body_sa.json"
    
  3. Bu örnekte, Patch isteğini Otomasyon hesabınıza göndermek için Invoke-RestMethod PowerShell cmdlet'i kullanılır.

    # 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
    

    Çıkış aşağıdakine benzer görünmelidir:

    {
        "PrincipalId":  "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
        "TenantId":  "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
        "Type":  0,
        "UserAssignedIdentities":  null
    }
    

ARM şablonu kullanarak etkinleştirme

Söz dizimi ve örnek adımlar aşağıda verilmiştır.

Şablon söz dizimi

Aşağıdaki örnek şablon söz dizimi, mevcut Otomasyon hesabına sistem tarafından atanan yönetilen kimliği etkinleştirir. Ancak, bu söz dizimi Otomasyon hesabıyla ilişkili mevcut kullanıcı tarafından atanan yönetilen kimlikleri kaldırır.

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

Örnek

Aşağıdaki adımları gerçekleştirin.

  1. Otomasyon hesabınızı kullanmak ve adlı template_sa.jsonbir dosyaya kaydetmek için yukarıdaki şablonun söz dizimini düzeltin.

  2. Aşağıdaki değişken değerini güncelleştirin ve yürütür.

    $templateFile = "path\template_sa.json"
    
  3. Şablonu dağıtmak için New-AzResourceGroupDeployment PowerShell cmdlet'ini kullanın.

    New-AzResourceGroupDeployment `
        -Name "SystemAssignedDeployment" `
        -ResourceGroupName $resourceGroup `
        -TemplateFile $templateFile
    

    Komut bir çıkış oluşturmaz; ancak aşağıdaki kodu kullanarak şunları doğrulayabilirsiniz:

    (Get-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount).Identity | ConvertTo-Json
    

    Çıktı, yukarıdaki REST API örneği için gösterilen çıkışa benzer olacaktır.

Sistem tarafından atanan yönetilen kimliğe rol atayın

Otomasyon hesabı, Azure Key Vault gibi Microsoft Entra Id ile korunan diğer kaynaklara erişmek üzere belirteçler almak için sistem tarafından atanan yönetilen kimliğini kullanabilir. Bu belirteçler uygulamanın belirli bir kullanıcısını temsil etmez. Bunun yerine, kaynağa erişen uygulamayı temsil ederler. Bu durumda, örneğin belirteç bir Otomasyon hesabını temsil eder.

Kimlik doğrulaması için sistem tarafından atanan yönetilen kimliğinizi kullanabilmeniz için önce, kimliği kullanmayı planladığınız Azure kaynağında bu kimliğe erişim ayarlayın. Bu görevi tamamlamak için hedef Azure kaynağında bu kimliğe uygun rolü atayın.

En az ayrıcalık sorumlusunu izleyin ve yalnızca runbook'unuzu yürütmek için gereken izinleri dikkatli bir şekilde atayın. Örneğin, Otomasyon hesabının yalnızca bir Azure VM’i başlatmak veya durdurmak için gerekli olması durumunda, Farklı Çalıştır hesabına veya yönetilen kimliğe atanan izinlerin yalnızca VM’i başlatmak veya durdurmak için olması gerekir. Benzer şekilde, runbook blob storage’dan okuyorsa, salt okunur izinler atayın.

Aşağıdaki örnek, abonelikteki Katkıda Bulunan rolünün hedef Azure kaynağına nasıl atanacaklarını göstermek için Azure PowerShell'i kullanır. Katkıda Bulunan rolü örnek olarak kullanılır ve sizin örneğinizde gerekli olabilir veya olmayabilir.

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

Sistem tarafından yönetilen kimliğe rol atamasını doğrulama

Otomasyon hesabının sistem tarafından atanan yönetilen kimliğine rol doğrulamak için şu adımları izleyin:

  1. Azure Portal oturum açın.

  2. Otomasyon hesabınıza gidin.

  3. Hesap Ayarları’nın altında Kimlik'i seçin.

    Assigning role in system-assigned identity in Azure portal.

  4. İzinler'in altında Azure rol atamaları'ne tıklayın.

    Roller seçili sistem tarafından atanan yönetilen kimliğe zaten atanmışsa rol atamalarının listesini görebilirsiniz. Bu liste, okuma izninizin olduğu tüm rol atamalarını içerir.

    View role-assignments that you have permission in Azure portal.

  5. Aboneliği değiştirmek için Abonelik açılan listesine tıklayın ve uygun aboneliği seçin.

  6. Rol ataması ekle (Önizleme) seçeneğine tıklayın

  7. Açılan listede rol atamasının uyguladığı kaynak kümesini seçin: Abonelik, Kaynak grubu, Rol ve Kapsam.
    Rol atamanız yoksa, seçili kapsamın yazma izinlerini satır içi ileti olarak görüntüleyebilirsiniz.

  8. Rol açılan listesinde Sanal Makine Katkıda Bulunanı olarak bir rol seçin.

  9. Kaydet'e tıklayın.

    Add a role assignment in Azure portal.

Birkaç dakika sonra yönetilen kimliğe seçilen kapsamda rol atanır.

Sistem tarafından atanan yönetilen kimlikle erişimin kimliğini doğrulama

Otomasyon hesabınız için yönetilen kimliği etkinleştirdikten ve hedef kaynağa bir kimlik erişimi verdikten sonra, yönetilen kimliği destekleyen kaynaklara karşı runbook'larda bu kimliği belirtebilirsiniz. Kimlik desteği için Az cmdlet cmdlet'ini Connect-AzAccount kullanın. PowerShell başvurusunda Connect-AzAccount bölümüne bakın.

# 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

Dekont

Kuruluşunuz hala kullanım dışı bırakılmış AzureRM cmdlet'lerini kullanıyorsa kullanabilirsiniz Connect-AzureRMAccount -Identity.

Azure cmdlet'lerini kullanmadan erişim belirteci oluşturma

HTTP Uç Noktaları için aşağıdakilerden emin olun.

  • Meta veri üst bilgisi mevcut olmalı ve "true" olarak ayarlanmalıdır.
  • Kaynak istekle birlikte, GET isteği için sorgu parametresi olarak ve POST isteği için form verileri olarak geçirilmelidir.
  • IDENTITY_HEADER ortam değişkeninin değerini X-IDENTITY-HEADER olarak ayarlayın.
  • Post isteğinin İçerik Türü 'application/x-www-form-urlencoded' olmalıdır.

HTTP Get kullanarak sistem tarafından atanan yönetilen kimlik için Erişim belirteci alma

$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

HTTP Post kullanarak sistem tarafından atanan kimlik için Erişim belirteci alma

$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 PowerShell'de Azure Key Vault'a erişmek için sistem tarafından atanan yönetilen kimliği kullanma

Daha fazla bilgi için bkz . Get-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) 
}

Python Runbook'ta sistem tarafından atanan yönetilen kimliği kullanma

#!/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 Veritabanı için sistem tarafından atanan yönetilen kimliği kullanma

Azure SQL veritabanına erişim sağlama hakkında ayrıntılı bilgi için bkz. Microsoft Entra admin (SQL Veritabanı) sağlama.

$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()

Mevcut Farklı Çalıştır hesaplarından yönetilen kimliğe geçiş

Azure Otomasyonu, Klasik dağıtım modelinde dağıtılan Azure Resource Manager kaynaklarını veya kaynaklarını Farklı Çalıştır hesabıyla yönetmek için kimlik doğrulaması sağladı. Farklı Çalıştır hesabından runbook kimlik doğrulamanızın yönetilen kimliğine geçmek için aşağıdaki adımları izleyin.

  1. Sistem tarafından atanan, kullanıcı tarafından atanan veya her iki yönetilen kimlik türünü de etkinleştirin.

  2. Yönetilen kimliğe Azure kaynaklarına Farklı Çalıştır hesabının atandığı ayrıcalıklarla aynı ayrıcalıkları verin.

  3. Yönetilen kimliği kullanarak kimlik doğrulaması yapmak için runbook'larınızı güncelleştirin.

  4. Yönetilen kimliği kullanmak için Runbook'ları değiştirin. Kimlik desteği için Az cmdlet cmdlet'ini Connect-AzAccount kullanın. PowerShell başvurusunda Connect-AzAccount bölümüne bakın.

    • AzureRM modüllerini kullanıyorsanız, en son sürüme güncelleştirin AzureRM.Profile ve cmdlet'ini kullanarak Add-AzureRMAccount değerini ile Connect-AzureRMAccount –Identitydeğiştirin.
    • Az modüllerini kullanıyorsanız Azure PowerShell modüllerini güncelleştirme makalesindeki adımları izleyerek en son sürüme güncelleştirin.

Sonraki adımlar