Verwenden einer vom System zugewiesenen verwalteten Identität für ein Azure Automation Konto

In diesem Artikel erfahren Sie, wie eine systemseitig zugewiesene verwaltete Identität für ein Azure Automation-Konto erstellt und für den Zugriff auf andere Ressourcen verwendet wird. Weitere Informationen zur Funktionsweise verwalteter Identitäten mit Azure Automation finden Sie unter Verwaltete Identitäten.

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Voraussetzungen

  • Ein Azure Automation-Konto. Eine Anleitung hierzu finden Sie unter Erstellen eines Azure Automation-Kontos.

  • Die neueste Version der Az PowerShell-Module „Az.Accounts“, „Az.Resources“, „Az.Automation“ und „Az.KeyVault“.

  • Eine Azure-Ressource, auf die Sie über Ihr Automation-Runbook zugreifen möchten. Für diese Ressource muss eine Rolle für die verwaltete Identität definiert sein, mit der das Automation-Runbook den Zugriff auf die Ressource authentifizieren kann. Um Rollen hinzuzufügen, müssen Sie Besitzer*in der Ressource in dem entsprechenden Microsoft Entra-Mandanten sein.

  • Wenn Sie Hybridaufträge mit einer verwalteten Identität ausführen möchten, aktualisieren Sie den Agent-basierten Hybrid Runbook Worker auf die neueste Version. Es gibt keine Mindestversionsanforderung für erweiterungsbasierte Hybrid Runbook Worker, und alle Versionen würden funktionieren. Mindestens erforderliche Versionen für den Agent-basierten Hybrid Worker:

    • Windows Hybrid Runbook Worker: Version 7.3.1125.0
    • Linux Hybrid Runbook Worker: Version 1.7.4.0

    So überprüfen Sie die Versionen

    • Windows Hybrid Runbook Worker: Wechseln Sie zum Installationspfad C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\. Der Ordner Azure Automation enthält einen Unterordner mit der Versionsnummer als Name des Unterordners.
    • Linux Hybrid Runbook Worker: Wechseln Sie zum Pfad vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION. Die Datei VERSION verfügt über die Versionsnummer des Hybrid Worker.
  • Zum Zuweisen einer Azure-Rolle benötigen Sie Berechtigungen vom Typ Microsoft.Authorization/roleAssignments/write (beispielsweise als Benutzerzugriffsadministrator oder Besitzer).

Aktivieren einer systemseitig zugewiesenen verwalteten Identität für ein Azure Automation-Konto

Nach der Aktivierung werden der systemseitig zugewiesenen verwalteten Identität die folgenden Eigenschaften zugewiesen.

Eigenschaft (JSON) Wert Beschreibung
principalid <principal-ID> Die GUID (Globally Unique Identifier) des Dienstprinzipalobjekts für die systemseitig zugewiesene verwaltete Identität, die das Automation-Konto im Microsoft Entra-Mandanten angibt. Diese GUID wird manchmal als „Objekt-ID“ oder „objectID“ angezeigt.
tenantid <Azure-AD-tenant-ID> Die GUID (Globally Unique Identifier), die den Microsoft Entra-Mandanten angibt, in dem das Automation-Konto nun Mitglied ist. Im Microsoft Entra-Mandanten hat der Dienstprinzipal den gleichen Namen wie das Automation-Konto.

Sie können eine systemseitig zugewiesene verwaltete Identität für ein Azure Automation-Konto aktivieren, indem Sie das Azure-Portal, PowerShell, die Azure-REST-API oder eine ARM-Vorlage verwenden. Melden Sie sich für die Beispiele, in denen PowerShell verwendet wird, zunächst interaktiv mithilfe des Cmdlets Connect-AzAccount bei Azure an, und befolgen Sie die Anweisungen.

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

Initialisieren Sie dann einen Satz von Variablen, die in den Beispielen verwendet werden. Überarbeiten Sie die unten angegebenen Werte, und führen Sie dann aus.

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

Wichtig

Die neue Identität der Automation-Kontoebene überschreibt alle vorherigen vom System zugewiesenen Identitäten auf Ebene der virtuellen Computer, die unter Verwendung der Runbook-Authentifizierung mit verwalteten Identitäten beschrieben sind. Wenn Sie Hybridaufträge auf virtuellen Azure-Computern ausführen, die die vom System zugewiesene Identität eines virtuellen Computers für den Zugriff auf Runbookressourcen verwenden, wird die Identität des Automation-Kontos für die Hybridaufträge verwendet. Dies bedeutet, dass ihre vorhandene Auftragsausführung beeinträchtigt werden kann, wenn Sie das CmK-Feature (Customer Managed Keys) Ihres Automation-Kontos verwendet haben.

Wenn Sie die verwaltete Identität des virtuellen Computers weiterhin verwenden möchten, sollten Sie die Identität auf Automation-Kontoebene nicht aktivieren. Wenn Sie dies bereits aktiviert haben, können Sie die systemseitig zugewiesene verwaltete Identität des Automation-Kontos deaktivieren. Weitere Informationen finden Sie unter verwaltete Identität ihres Azure Automation-Kontos deaktivieren.

Aktivieren mithilfe des Azure-Portals

Führen Sie die folgenden Schritte aus:

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie im Azure-Portal zu Ihrem Automation-Konto.

  3. Wählen Sie unter Kontoeinstellungen die Option Identität aus.

  4. Legen Sie die Option System zugewiesen auf Ein fest und klicken Sie auf Speichern. Wenn Sie aufgefordert werden, die Auswahl zu bestätigen, klicken Sie auf Ja.

    Enabling system-assigned identity in Azure portal.

    In Ihrem Automation-Konto kann nun die systemseitig zugewiesene Identität verwendet werden, die bei Microsoft Entra ID registriert ist und durch eine Objekt-ID angegeben wird.

    Managed identity object ID.

Aktivieren mithilfe von PowerShell

Verwenden Sie das PowerShell-Cmdlet Set-AzAutomationAccount, um die systemseitig zugewiesene verwaltete Identität zu aktivieren.

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

$output

Die Ausgabe sollte in etwa wie folgt aussehen:

Output from set-azautomationaccount command.

Ändern Sie für eine zusätzliche Ausgabe das Beispiel so, dass Folgendes angegeben wird: $output.identity | ConvertTo-Json.

Aktivieren mithilfe einer REST-API

Syntax und Beispielschritte sind unten angegeben.

Syntax

Der folgende Syntaxtextkörper ermöglicht eine systemseitig zugewiesene verwaltete Identität für ein vorhandenes Automation-Konto mithilfe der HTTP-Methode PATCH. Mit dieser Syntax werden jedoch alle vorhandenen benutzerseitig zugewiesenen verwalteten Identitäten entfernt, die dem Automation-Konto zugeordnet sind.

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

Wenn mehrere benutzerseitig zugewiesene Identitäten definiert sind, müssen Sie, um diese zu behalten und nur die systemseitig zugewiesene Identität zu entfernen, jede benutzerseitig zugewiesene Identität mithilfe einer durch Trennzeichen getrennten Liste angeben. Im folgenden Beispiel wird die HTTP-Methode PATCH verwendet.

{ 
  "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": {}
    }
  }
}

Die Syntax der API sieht folgendermaßen aus:

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

Beispiel

Führen Sie die folgenden Schritte aus.

  1. Kopieren Sie den Syntaxtextkörper, und fügen Sie ihn in eine Datei namens body_sa.json ein. Speichern Sie die Datei auf Ihrem lokalen Computer oder in einem Azure-Speicherkonto.

  2. Aktualisieren Sie den variablen Wert unten, und führen Sie dann aus.

    $file = "path\body_sa.json"
    
  3. In diesem Beispiel wird das PowerShell-Cmdlet Invoke-RestMethod verwendet, um die PATCH-Anforderung an Ihr Automation-Konto zu senden.

    # 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
    

    Die Ausgabe sollte in etwa wie folgt aussehen:

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

Aktivieren mithilfe einer ARM-Vorlage

Syntax und Beispielschritte sind unten angegeben.

Vorlagensyntax

Die folgende Beispielvorlagensyntax aktiviert eine systemseitig zugewiesene verwaltete Identität für das vorhandene Automation-Konto. Mit dieser Syntax werden jedoch alle vorhandenen benutzerseitig zugewiesenen verwalteten Identitäten entfernt, die dem Automation-Konto zugeordnet sind.

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

Beispiel

Führen Sie die folgenden Schritte aus.

  1. Überarbeiten Sie die Syntax der obigen Vorlage so, dass Ihr Automation-Konto verwendet wird, und speichern Sie sie in einer Datei namens template_sa.json.

  2. Aktualisieren Sie den variablen Wert unten, und führen Sie dann aus.

    $templateFile = "path\template_sa.json"
    
  3. Verwenden Sie das PowerShell-Cmdlet New-AzResourceGroupDeployment, um die Vorlage bereitzustellen.

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

    Der Befehl erzeugt keine Ausgabe. Sie können jedoch den folgenden Code verwenden, um Folgendes zu überprüfen:

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

    Die Ausgabe sieht in etwa wie die obige Ausgabe für das REST-API-Beispiel aus.

Zuweisen einer Rolle zu einer systemseitig zugewiesenen verwalteten Identität

Ein Automatisierungskonto kann seine vom System zugewiesene verwaltete Identität verwenden, um Token für den Zugriff auf andere Ressourcen zu erhalten, die durch Microsoft Entra ID geschützt sind, wie z. B. Azure Key Vault. Diese Token repräsentieren keinen bestimmten Benutzer der Anwendung. Stattdessen stellen sie die Anwendung dar, die auf die Ressource zugreift. In diesem Fall stellt das Token beispielsweise ein Automation-Konto dar.

Bevor Sie die systemseitig verwaltete Identität für die Authentifizierung verwenden können, richten Sie den Zugriff dieser Identität auf die Azure-Ressource ein, in der Sie die Identität verwenden möchten. Für diese Aufgabe muss der Identität in der Azure-Zielressource die entsprechende Rolle zugewiesen werden.

Befolgen Sie das Prinzip der geringsten Berechtigung und weisen Sie sorgfältig nur die Berechtigungen zu, die für die Ausführung Ihres Runbooks erforderlich sind. Beispiel: Wenn das Automatisierungskonto nur zum Starten oder Stoppen einer Azure-VM erforderlich ist, dann müssen die dem Konto "Ausführen als" oder der verwalteten Identität zugewiesenen Berechtigungen nur zum Starten oder Stoppen der VM dienen. Weisen Sie ebenso Leseberechtigungen zu, wenn ein Runbook aus dem Blobspeicher liest.

In diesem Beispiel wird Azure PowerShell verwendet, um zu zeigen, wie die Rolle Mitwirkender im Abonnement der Azure-Zielressource zugewiesen wird. Die Rolle Mitwirkender wird als Beispiel verwendet und ist in Ihrem Fall möglicherweise erforderlich.

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

Überprüfen der Rollenzuweisung zu einer vom System verwalteten Identität

Führen Sie die folgenden Schritte aus, um eine Rolle für eine systemseitig zugewiesene verwaltete Identität des Automation-Kontos zu überprüfen:

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu Ihrem Automation-Konto.

  3. Wählen Sie unter Kontoeinstellungen die Option Identität aus.

    Assigning role in system-assigned identity in Azure portal.

  4. Klicken Sie unter Berechtigungen auf Azure-Rollenzuweisungen.

    Wurden der ausgewählten systemseitig zugewiesenen verwalteten Identität bereits Rollen zugewiesen, wird die Liste der Rollenzuweisungen angezeigt. Diese Liste enthält alle Rollenzuweisungen, für die Sie über Leseberechtigungen verfügen.

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

  5. Klicken Sie zum Ändern des Abonnements auf die Dropdownliste Abonnement, und wählen Sie das entsprechende Abonnement aus.

  6. Klicken Sie auf Rollenzuweisung hinzufügen (Vorschau).

  7. Wählen Sie in der Dropdownliste die Ressourcen aus, für die die Rollenzuweisung gelten soll: Abonnement, Ressourcengruppe, Rolle und Bereich.
    Wenn Sie die entsprechende Rollenzuweisung nicht haben, können Sie die Schreibberechtigungen für den ausgewählten Bereich als Inlinemeldung anzeigen.

  8. Wählen Sie in der Dropdownliste Rolle eine Rolle aus, z. B. Mitwirkender von virtuellen Computern.

  9. Klicken Sie auf Speichern.

    Add a role assignment in Azure portal.

Nach einigen Augenblicken wird der verwalteten Identität die Rolle für den ausgewählten Bereich zugewiesen.

Authentifizieren des Zugriffs mit der systemseitig zugewiesenen verwalteten Identität

Nachdem Sie die verwaltete Identität für Ihr Automation-Konto aktiviert und einer Identität Zugriff auf die Zielressource gegeben haben, können Sie diese Identität in Runbooks für Ressourcen angeben, die die verwaltete Identität unterstützen. Verwenden Sie für die Identitätsunterstützung das Az cmdlet Connect-AzAccount cmdlet. Weitere Informationen finden Sie in der PowerShell-Referenz unter Connect-AzAccount.

# 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

Hinweis

Wenn Ihre Organisation weiterhin die veralteten AzureRM-Cmdlets verwendet, können Sie Connect-AzureRMAccount -Identity verwenden.

Generieren eines Zugriffstokens ohne Verwendung von Azure-Cmdlets

Stellen Sie für HTTP-Endpunkte Folgendes sicher.

  • Der Metadatenheader muss vorhanden sein und auf „true“ festgelegt werden.
  • Eine Ressource muss zusammen mit der Anforderung als Abfrageparameter für eine GET-Anforderung und als Formulardaten für eine POST-Anforderung übergeben werden.
  • Legen Sie den Wert der Umgebungsvariablen IDENTITY_HEADER X-IDENTITY-HEADER fest.
  • Der Inhaltstyp für die Post-Anforderung muss „application/x-www-form-urlencoded“ sein.

Abrufen des Zugriffstokens für die systemseitig zugewiesene verwaltete Identität mithilfe von 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

Abrufen des Zugriffstokens für die systemseitig zugewiesene verwaltete Identität mithilfe von HTTP Post

$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

Verwenden einer systemseitig zugewiesenen verwalteten Identität für den Zugriff auf Azure Key Vault in Azure PowerShell

Weitere Informationen finden Sie unter 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) 
}

Verwenden der systemseitig zugewiesenen verwalteten Identität in einem Python-Runbook

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

Verwenden der systemseitig zugewiesenen verwalteten Identität für den Zugriff auf SQL-Datenbank

Ausführliche Informationen zum Bereitstellen des Zugriffs auf eine Azure SQL-Datenbank finden Sie unter Bereitstellen von Microsoft Entra-Administrator*innen (SQL-Datenbank).

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

Migrieren von vorhandenen ausführenden Konten zu einer verwalteten Identität

Azure Automation bietet eine Authentifizierung für die Verwaltung von Azure Resource Manager-Ressourcen oder von Ressourcen, die im klassischen Bereitstellungsmodell mit einem ausführendem Konto bereitgestellt wurden. Führen Sie die folgenden Schritte aus, um von einem ausführenden Konto zu einer verwalteten Identität für Ihre Runbook-Authentifizierung zu wechseln.

  1. Aktivieren Sie eine vom System zugewiesene, vom Benutzer zugewieseneoder beide Typen von verwalteten Identitäten.

  2. Gewähren Sie der verwalteten Identität die gleichen Berechtigungen für die Azure-Ressourcen, die mit dem übereinstimmen, was dem ausführenden Konto zugewiesen wurde.

  3. Aktualisieren Sie Ihre Runbooks für die Authentifizierung mithilfe der verwalteten Identität.

  4. Ändern Sie Runbooks so, dass die verwaltete Identität verwendet wird. Verwenden Sie für die Identitätsunterstützung das Az cmdlet Connect-AzAccount cmdlet. Weitere Informationen finden Sie in der PowerShell-Referenz unter Connect-AzAccount.

    • Wenn Sie AzureRM-Module verwenden, aktualisieren Sie AzureRM.Profile auf die neueste Version, und ersetzen Sie die Module mithilfe des Add-AzureRMAccount-Cmdlets durch Connect-AzureRMAccount –Identity.
    • Wenn Sie Az-Module verwenden, aktualisieren Sie auf die neueste Version, indem Sie die Schritte im Abschnitt Azure PowerShell Module aktualisieren ausführen.

Nächste Schritte