Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
Melden Sie sich beim portal Azure an.
Navigieren Sie im Azure-Portal zu Ihrem Automatisierungskonto.
Wählen Sie unter Kontoeinstellungen die Option Identität aus.
Wählen Sie die Registerkarte Benutzer zugeordnet und dann Hinzufügen aus.
Wählen Sie Ihre vorhandene benutzerseitig zugewiesene verwaltete Identität und dann Hinzufügen aus. Sie werden dann zur Registerkarte Benutzer 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 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/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.
Ü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-JsonDie 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.
Kopieren Sie die Vorlage, und fügen Sie sie in eine Datei namens
template_ua.jsonein. 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 $userAssignedTwoDer 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-JsonDie 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:
Melden Sie sich beim portal Azure an.
Navigieren Sie zu Ihrem Automation-Konto.
Wählen Sie unter Kontoeinstellungen die Option Identität, Benutzerdefiniert aus.
Klicken Sie auf Name der benutzerseitig 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, wie z. B. Mitwirkender für virtuelle Maschinen.
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 auf X-IDENTITY-HEADER fest.
- Der Inhaltstyp für die Post-Anforderung muss
application/x-www-form-urlencodedsein.
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
Informationen zur Problembehandlung bei einer benutzerseitig zugewiesenen verwalteten Identität finden Sie unter Behandlung von Problemen mit der verwalteten Identität von Azure Automation.
Wenn Sie eine verwaltete Identität deaktivieren müssen, lesen Sie Deaktivieren Sie die verwaltete Identität Ihres Azure Automation-Kontos.
Eine Übersicht über Azure Automation Kontosicherheit finden Sie unter Automation-Kontoauthentifizierungsübersicht.