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

In diesem Artikel wird erläutert, wie Sie eine vom Benutzer zugewiesene verwaltete Identität für ein Azure Automation-Konto hinzufügen und wie sie für den Zugriff auf andere Ressourcen verwendet werden. Weitere Informationen zur Funktionsweise von verwalteten Identitäten mit Azure Automation finden Sie unter Managed identities.

Hinweis

Es ist nicht möglich, eine benutzerzugeordnete verwaltete Identität auf einem Hybrid Runbook Worker zu verwenden, wenn eine verwaltete Identität (entweder system- oder benutzerzugeordnet) für das Automatisierungskonto erstellt wurde. Wenn dem Automatisierungskonto keine verwaltete Identität zugewiesen wurde, kann das System des virtuellen Computers oder die vom Benutzer zugewiesene verwaltete Identität auf einem hybriden Runbook-Worker verwendet werden, bei dem es sich um eine Azure VM mit den zugewiesenen verwalteten Identitäten handelt.

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein free-Konto, bevor Sie beginnen.

Voraussetzungen

  • Ein Azure Automation Konto. Anweisungen finden Sie unter Create an Azure Automation account.

  • Die vom benutzer zugewiesene verwaltete Identität und die zielbasierten Azure Ressourcen, die Ihr Runbook mit dieser Identität verwaltet, können sich in verschiedenen Azure Abonnements befinden.

  • Die neueste Version von Azure Account-Modulen. Derzeit ist dies 2.2.8. (Ausführliche Informationen zu dieser Version finden Sie unter Az.Accounts.)

  • Eine Azure Ressource, auf die Sie über Ihr Automatisierungs-Runbook zugreifen möchten. Für diese Ressource muss eine Rolle für die benutzerseitig zugewiesene 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.

  • Um eine Azure Rolle zuzuweisen, müssen Sie über Microsoft.Authorization/roleAssignments/write-Berechtigungen verfügen, z. B. Benutzerzugriffsadministrator oder Owner.

Hinzufügen einer vom Benutzer zugewiesenen, verwalteten Identität für das Azure Automation-Konto

Sie können eine vom Benutzer zugewiesene verwaltete Identität für ein Azure Automation Konto mithilfe des Azure Portals, PowerShell, der Azure REST-API oder ARM-Vorlage hinzufügen. Für die Beispiele mit PowerShell melden Sie sich zunächst mithilfe des Cmdlets Connect-AzAccount interaktiv Azure an, und folgen Sie den 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 den Vorgang aus.

$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
$userAssignedOne = "userAssignedIdentityOne"
$userAssignedTwo = "userAssignedIdentityTwo"

Hinzufügen mithilfe des Azure-Portals

Führen Sie die folgenden Schritte aus:

  1. Melden Sie sich beim portal Azure an.

  2. Navigieren Sie im Azure-Portal zu Ihrem Automatisierungskonto.

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

  4. Wählen Sie die Registerkarte Benutzer zugeordnet und dann Hinzufügen aus.

  5. Wählen Sie Ihre vorhandene benutzerseitig zugewiesene verwaltete Identität und dann Hinzufügen aus. Sie werden dann zur Registerkarte Benutzer zugewiesen zurückgeleitet.

    Ausgabe des Portals.

Hinzufügen unter Verwendung von PowerShell

Verwenden Sie das PowerShell-Cmdlet Set-AzAutomationAccount, um die benutzerseitig zugewiesenen verwalteten Identitäten hinzuzufügen. Sie müssen zunächst überlegen, ob eine systemseitig zugewiesene verwaltete Identität vorhanden ist. Im folgenden Beispiel werden einem vorhandenen Automation-Konto zwei bestehende benutzerseitig zugewiesene verwaltete Identitäten hinzugefügt, und, falls vorhanden, wird eine systemseitig zugewiesene verwaltete Identität deaktiviert.

$output = Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignUserIdentity "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedOne", `
        "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedTwo"

$output

Um eine vorhandene systemseitig zugewiesene verwaltete Identität beizubehalten, verwenden Sie Folgendes:

$output = Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignUserIdentity "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedOne", `
        "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedTwo" `
    -AssignSystemIdentity

$output

Die Ausgabe sollte etwa wie folgt aussehen:

Ausgabe des Befehls „Set-AzAutomationAccount“

Führen Sie für eine zusätzliche Ausgabe $output.identity | ConvertTo-Json aus.

Hinzufügen mithilfe einer REST-API

Syntax und Beispielschritte sind unten angegeben.

Syntax

Die folgende Beispieltextsyntax aktiviert eine systemseitig zugewiesene verwaltete Identität, sofern sie noch nicht aktiviert ist, und weist dem vorhandenen Automation-Konto zwei bestehende benutzerseitig zugewiesene verwaltete Identitäten zu.

PATCH

{
  "identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/00a000aa-00a0-00aa-00aa-0a0aa000aa00/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/firstIdentity": {},
      "/subscriptions/00a000aa-00a0-00aa-00aa-0a0aa000aa00/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/secondIdentity": {}
    }
  }
}

Die Syntax der API sieht folgendermaßen aus:

https://management.azure.com/subscriptions/00a000aa-00a0-00aa-00aa-0a0aa000aa00/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. Überarbeiten Sie die Syntax des obigen Textkörpers in einer Datei namens body_ua.json. Speichern Sie die Datei auf Ihrem lokalen Computer oder in einem Azure Speicherkonto.

  2. Überarbeiten Sie den Variablenwert unten, und führen Sie dann aus.

    $file = "path\body_ua.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 etwa wie folgt aussehen:

    {
    "type": "SystemAssigned, UserAssigned",
    "principalId": "00a000aa-00a0-00aa-00aa-0a0aa000aa00",
    "tenantId": "00a000aa-00a0-00aa-00aa-0a0aa000aa00",
    "userAssignedIdentities":  {
        "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI1":  {
                "PrincipalId":  "00a000aa-00a0-00aa-00aa-0a0aa000aa00",
                "ClientId":  "00001111-aaaa-2222-bbbb-3333cccc4444"
                    },
        "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI2":  {
                "PrincipalId":  "00a000aa-00a0-00aa-00aa-0a0aa000aa00",
                "ClientId":  "00001111-aaaa-2222-bbbb-3333cccc4444"
                    }
        }
    }
    

Hinzufügen mithilfe einer ARM-Vorlage

Syntax und Beispielschritte sind unten angegeben.

Vorlagensyntax

Die folgende Beispielvorlagensyntax aktiviert eine systemseitig zugewiesene verwaltete Identität, sofern sie noch nicht aktiviert ist, und weist dem vorhandenen Automation-Konto zwei bestehende benutzerseitig zugewiesene verwaltete Identitäten zu.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "automationAccountName": {
     "defaultValue": "YourAutomationAccount",
      "type": "String",
      "metadata": {
        "description": "Automation account name"
      }
    },
    "userAssignedOne": {
     "defaultValue": "userAssignedOne",
      "type": "String",
      "metadata": {
        "description": "User-assigned managed identity"
      }
	  },
    "userAssignedTwo": {
     "defaultValue": "userAssignedTwo",
      "type": "String",
      "metadata": {
        "description": "User-assigned managed identity"
      }
	  }
   },
  "resources": [
    {
      "type": "Microsoft.Automation/automationAccounts",
      "apiVersion": "2020-01-13-preview",
      "name": "[parameters('automationAccountName')]",
      "location": "[resourceGroup().location]",
      "identity": {
        "type": "SystemAssigned, UserAssigned",
        "userAssignedIdentities": {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('userAssignedOne'))]": {},
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('userAssignedTwo'))]": {}
        }
      },
      "properties": {
        "sku": {
          "name": "Basic"
        },
        "encryption": {
          "keySource": "Microsoft.Automation",
          "identity": {}
        }
      }
    }
  ]
}

Beispiel

Führen Sie die folgenden Schritte aus.

  1. Kopieren Sie die Vorlage, und fügen Sie sie in eine Datei namens template_ua.json ein. Speichern Sie die Datei auf Ihrem lokalen Computer oder in einem Azure Speicherkonto.

  2. Überarbeiten Sie den Variablenwert unten, und führen Sie dann aus.

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

    New-AzResourceGroupDeployment `
        -Name "UserAssignedDeployment" `
        -ResourceGroupName $resourceGroup `
        -TemplateFile $templateFile `
        -automationAccountName $automationAccount `
        -userAssignedOne $userAssignedOne `
        -userAssignedTwo $userAssignedTwo
    

    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.

Einer vom Benutzer zugewiesenen verwalteten Identität eine Rolle zuweisen

Ein Automatisierungskonto kann die vom Benutzer zugewiesene verwaltete Identität verwenden, um Token abzurufen, um auf andere Ressourcen zuzugreifen, die durch Microsoft Entra ID geschützt sind, 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 Automatisierungskonto dar.

Bevor Sie Ihre vom Benutzer zugewiesene verwaltete Identität für die Authentifizierung verwenden können, richten Sie den Zugriff für diese Identität in der Azure Ressource ein, in der Sie die Identität verwenden möchten. Um diesen Vorgang abzuschließen, weisen Sie dieser Identität die entsprechende Rolle für die Zielressource Azure zu.

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. Wenn beispielsweise das Automatisierungskonto nur zum Starten oder Beenden einer Azure VM erforderlich ist, müssen die dem Run As-Konto oder der verwalteten Identität zugewiesenen Berechtigungen nur zum Starten oder Beenden der VM verwendet werden. Weisen Sie ebenso Lesezugriffsberechtigungen zu, wenn ein Runbook aus Blobspeicher liest.

In diesem Beispiel wird Azure PowerShell verwendet, um zu zeigen, wie die Rolle "Mitwirkender" im Abonnement der Zielressource Azure zugewiesen wird. Die Rolle „Mitwirkender“ wird als Beispiel verwendet und kan in Ihrem Fall erforderlich sein oder auch nicht. Alternativ können Sie die Rolle auch der Zielressource Azure im portal Azure zuweisen.

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

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

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

  1. Melden Sie sich beim portal Azure an.

  2. Navigieren Sie zu Ihrem Automation-Konto.

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

  4. Klicken Sie auf Name der benutzerseitig zugewiesenen Identität.

    Zuweisen einer Rolle in der vom Benutzer zugewiesenen Identität im Azure-Portal.

    Wurden der ausgewählten, vom Benutzer 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.

    Zeigen Sie Rollen-Zuweisungen an, für die Sie Berechtigungen im Azure-Portal haben.

  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, wie z. B. Mitwirkender für virtuelle Maschinen.

  9. Klicken Sie auf Speichern.

    Fügen Sie eine Rollen-Zuweisung im Azure-Portal hinzu.

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

Authentifizieren des Zugriffs mit der benutzerseitig zugewiesenen verwalteten Identität

Nachdem Sie die benutzerseitig zugewiesene 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.

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with user-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity -AccountId <user-assigned-identity-ClientId>).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

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 auf X-IDENTITY-HEADER fest.
  • Der Inhaltstyp für die Post-Anforderung muss application/x-www-form-urlencoded sein.

Abrufen des Zugriffstokens für die benutzerzugewiesene verwaltete Identität mithilfe von "HTTP Get"

$resource= "?resource=https://management.azure.com/"
$client_id="&client_id=<ClientId of USI>"
$url = $env:IDENTITY_ENDPOINT + $resource + $client_id 
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"  
$Headers.Add("Metadata", "True")
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER) 
$accessToken = Invoke-RestMethod -Uri $url -Method 'GET' -Headers $Headers
Write-Output $accessToken.access_token 

Abrufen des Zugriffstokens für die benutzerzugewiesene verwaltete Identität über HTTP POST

$url = $env:IDENTITY_ENDPOINT
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Metadata", "True")
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER) 
$body = @{'resource'='https://management.azure.com/' 
'client_id'='<ClientId of USI>'}
$accessToken = Invoke-RestMethod $url -Method 'POST' -Headers $headers -ContentType 'application/x-www-form-urlencoded' -Body $body
Write-Output $accessToken.access_token 

Verwenden der vom Benutzer zugewiesenen verwalteten Identität in Azure PowerShell

Write-Output "Connecting to azure via  Connect-AzAccount -Identity -AccountId <ClientId of USI>"  
Connect-AzAccount -Identity -AccountId <ClientId of USI> 
Write-Output "Successfully connected with Automation account's Managed Identity"  
Write-Output "Trying to fetch value from key vault using User Assigned Managed identity. 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 vom Benutzer zugewiesenen verwalteten Identität in Python Runbook

#!/usr/bin/env python3  
import os  
import requests   

resource = "?resource=https://management.azure.com/" 
client_id = "&client_id=<ClientId of USI>" 
endPoint = os.getenv('IDENTITY_ENDPOINT')+ resource +client_id 
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) 

Nächste Schritte