Verwenden einer benutzerseitig zugewiesenen verwalteten Identität für ein Azure Automation-Konto
In diesem Artikel erfahren Sie, wie eine benutzerseitig zugewiesene verwaltete Identität für ein Azure Automation-Konto hinzugefügt 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.
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, ist es möglich, die dem System oder dem Benutzer zugewiesene verwaltete Identität der VM auf einem Hybrid Runbook Worker zu verwenden, der eine Azure-VM mit den zugewiesenen verwalteten Identitäten ist.
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 benutzerseitig zugewiesene verwaltete Identität und die Azure-Zielressourcen, die Ihr Runbook mit dieser Identität verwaltet, können sich in verschiedenen Azure-Abonnement befinden.
Die neueste Version der Azure-Kontomodule. 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 Automation-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. Zum Hinzufügen von Rollen müssen Sie Besitzer der Ressource im entsprechenden Microsoft Entra sein.
Zum Zuweisen einer Azure-Rolle benötigen Sie Berechtigungen vom Typ
Microsoft.Authorization/roleAssignments/write
(beispielsweise als Benutzerzugriffsadministrator oder Besitzer).
Hinzufügen einer benutzerseitig zugewiesenen verwalteten Identität für ein Azure Automation-Konto
Sie können eine benutzerseitig zugewiesene verwaltete Identität für ein Azure Automation-Konto hinzufügen, 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"
$userAssignedOne = "userAssignedIdentityOne"
$userAssignedTwo = "userAssignedIdentityTwo"
Hinzufügen über das Azure-Portal
Führen Sie die folgenden Schritte aus:
Melden Sie sich beim Azure-Portal an.
Navigieren Sie im Azure-Portal zu Ihrem Automation-Konto.
Wählen Sie unter Kontoeinstellungen die Option Identität aus.
Wählen Sie die Registerkarte Benutzerseitig zugewiesen und dann Hinzufügen aus.
Wählen Sie Ihre vorhandene benutzerseitig zugewiesene verwaltete Identität und dann Hinzufügen aus. Daraufhin werden Sie zur Registerkarte Benutzerseitig zugewiesen zurückgeleitet.
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 in etwa wie folgt aussehen:
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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/firstIdentity": {},
"/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/secondIdentity": {}
}
}
}
Die Syntax der API sieht folgendermaßen aus:
https://management.azure.com/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/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.
Ü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.Überarbeiten Sie den Variablenwert unten, und führen Sie dann aus.
$file = "path\body_ua.json"
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:
{ "type": "SystemAssigned, UserAssigned", "principalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "tenantId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "userAssignedIdentities": { "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI1": { "PrincipalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444" }, "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI2": { "PrincipalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "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.
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.Überarbeiten Sie den Variablenwert unten, und führen Sie dann aus.
$templateFile = "path\template_ua.json"
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.
Zuweisen einer Rolle zu einer vom Benutzer zugewiesenen verwalteten Identität
Ein Automation-Konto kann mithilfe seiner benutzerseitig zugewiesenen verwalteten Identität Token für den Zugriff auf andere durch Microsoft Entra ID geschützte Ressourcen wie z. B. Azure Key Vault abrufen. 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 benutzerseitig zugewiesene 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 ausführenden Konto oder der verwalteten Identität zugewiesenen Berechtigungen nur zum Starten oder Beenden der VM dienen. 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 Azure-Zielressource zugewiesen wird. Die Rolle „Mitwirkender“ wird als Beispiel verwendet und kan in Ihrem Fall erforderlich sein oder auch nicht. Alternativ können Sie der Azure-Zielressource die Rolle auch im Azure-Portal 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:
Melden Sie sich beim Azure-Portal an.
Navigieren Sie zu Ihrem Automation-Konto.
Wählen Sie unter Kontoeinstellungen die Option Identität, Vom Benutzer zugewiesen aus.
Klicken Sie auf Name der vom Benutzer zugewiesenen Identität.
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.
Klicken Sie zum Ändern des Abonnements auf die Dropdownliste Abonnement, und wählen Sie das entsprechende Abonnement aus.
Klicken Sie auf Rollenzuweisung hinzufügen (Vorschau).
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.Wählen Sie in der Dropdownliste Rolle eine Rolle aus, z. B. Mitwirkender von virtuellen Computern.
Klicken Sie auf Speichern.
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 X-IDENTITY-HEADER fest.
- Der Inhaltstyp für die Post-Anforderung muss
application/x-www-form-urlencoded
sein.
Abrufen des Zugriffstokens für die benutzerseitig zugewiesene 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 benutzerseitig zugewiesene verwaltete Identität mithilfe von 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 benutzerseitig 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 benutzerseitig zugewiesenen verwalteten Identität in einem 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
Wenn Ihre Runbooks nicht erfolgreich abgeschlossen werden, lesen Sie Behandlung von Problemen mit der verwalteten Azure Automation-Identität.
Wenn Sie eine verwaltete Identität deaktivieren müssen, finden Sie weitere Informationen unter Deaktivieren der verwalteten Identität Ihres Azure Automation-Kontos.
Eine Übersicht über die Azure Automation-Kontosicherheit finden Sie unter Übersicht über die Automation-Kontoauthentifizierung.