Een door een gebruiker toegewezen beheerde identiteit gebruiken voor een Azure Automation-account
In dit artikel leest u hoe u een door de gebruiker toegewezen beheerde identiteit toevoegt voor een Azure Automation-account en hoe u deze gebruikt voor toegang tot andere resources. Zie Beheerde identiteiten voor meer informatie over hoe beheerde identiteiten werken met Azure Automation.
Notitie
Het is niet mogelijk om een door de gebruiker toegewezen beheerde identiteit te gebruiken op een Hybrid Runbook Worker wanneer er een beheerde identiteit (systeem of gebruiker toegewezen) is gemaakt voor het Automation-account. Als beheerde identiteit niet is toegewezen aan het Automation-account, is het mogelijk om het systeem of de door de gebruiker toegewezen beheerde identiteit van de virtuele machine te gebruiken op een Hybrid Runbook Worker die een Azure-VM is met de toegewezen beheerde identiteiten.
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Vereisten
Een Azure Automation-account. Zie Een Azure Automation-account maken voor instructies.
De door de gebruiker toegewezen beheerde identiteit en de doel-Azure-resources die door uw runbook worden beheerd met behulp van die identiteit, kunnen zich in verschillende Azure-abonnementen bevinden.
De laatste versie van Azure-accountmodules. Dit is momenteel 2.2.8. (Zie Az.Accounts voor meer informatie over deze versie.)
Een Azure-resource waartoe u toegang wilt krijgen vanuit uw Automation-runbook. Deze resource moet een rol hebben die is gedefinieerd voor de door de gebruiker toegewezen beheerde identiteit, waarmee het Automation-runbook de toegang tot de resource kan verifiëren. Als u rollen wilt toevoegen, moet u eigenaar zijn van de resource in de bijbehorende Microsoft Entra-tenant.
Als u een Azure-rol wilt toewijzen, moet u machtigingen hebben
Microsoft.Authorization/roleAssignments/write
, zoals Beheerder voor gebruikerstoegang of Eigenaar.
Door de gebruiker toegewezen beheerde identiteit toevoegen voor een Azure Automation-account
U kunt een door de gebruiker toegewezen beheerde identiteit toevoegen voor een Azure Automation-account met behulp van Azure Portal, PowerShell, de Azure REST API of ARM-sjabloon. Voor de voorbeelden waarbij PowerShell betrokken is, meldt u zich eerst interactief aan bij Azure met behulp van de cmdlet Connect-AzAccount en volgt u de instructies.
# 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>"
Initialiseer vervolgens een set variabelen die in de voorbeelden worden gebruikt. Wijzig de onderstaande waarden en voer deze vervolgens uit"
$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
$userAssignedOne = "userAssignedIdentityOne"
$userAssignedTwo = "userAssignedIdentityTwo"
Toevoegen met behulp van Azure Portal
Voer de volgende stappen uit:
Meld u aan bij het Azure-portaal.
Navigeer in Azure Portal naar uw Automation-account.
Selecteer bij Accountinstellingen de optie Identiteit.
Selecteer het tabblad Gebruiker toegewezen en selecteer vervolgens Toevoegen.
Selecteer uw bestaande door de gebruiker toegewezen beheerde identiteit en selecteer vervolgens Toevoegen. Vervolgens keert u terug naar het tabblad Gebruiker toegewezen .
Toevoegen met Behulp van PowerShell
Gebruik de PowerShell-cmdlet Set-AzAutomationAccount om de door de gebruiker toegewezen beheerde identiteiten toe te voegen. U moet eerst overwegen of er een bestaande door het systeem toegewezen beheerde identiteit is. In het onderstaande voorbeeld worden twee bestaande door de gebruiker toegewezen beheerde identiteiten aan een bestaand Automation-account toegevoegd en wordt een door het systeem toegewezen beheerde identiteit uitgeschakeld als deze bestaat.
$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
Als u een bestaande door het systeem toegewezen beheerde identiteit wilt behouden, gebruikt u het volgende:
$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
De uitvoer moet er als volgt uitzien:
Voor extra uitvoer voert u het volgende uit: $output.identity | ConvertTo-Json
.
Toevoegen met behulp van een REST API
Hieronder ziet u de syntaxis en voorbeeldstappen.
Syntaxis
De onderstaande syntaxis van de voorbeeldtekst maakt een door het systeem toegewezen beheerde identiteit mogelijk als deze nog niet is ingeschakeld en wijst twee bestaande door de gebruiker toegewezen beheerde identiteiten toe aan het bestaande Automation-account.
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": {}
}
}
}
De syntaxis van de API is als volgt:
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
Opmerking
Voer de volgende stappen uit.
Wijzig de syntaxis van de bovenstaande hoofdtekst in een bestand met de naam
body_ua.json
. Sla het bestand op uw lokale computer of in een Azure-opslagaccount op.Wijzig de onderstaande variabelewaarde en voer deze vervolgens uit.
$file = "path\body_ua.json"
In dit voorbeeld wordt de PowerShell-cmdlet Invoke-RestMethod gebruikt om de PATCH-aanvraag naar uw Automation-account te verzenden.
# 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
De uitvoer moet er als volgt uitzien:
{ "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" } } }
Toevoegen met behulp van een ARM-sjabloon
Hieronder ziet u de syntaxis en voorbeeldstappen.
Sjabloonsyntaxis
Met de onderstaande voorbeeldsjabloonsyntaxis kunt u een door het systeem toegewezen beheerde identiteit inschakelen als deze nog niet is ingeschakeld en twee bestaande door de gebruiker toegewezen beheerde identiteiten aan het bestaande Automation-account toewijzen.
{
"$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": {}
}
}
}
]
}
Opmerking
Voer de volgende stappen uit.
Kopieer en plak de sjabloon in een bestand met de naam
template_ua.json
. Sla het bestand op uw lokale computer of in een Azure-opslagaccount op.Wijzig de onderstaande variabelewaarde en voer deze vervolgens uit.
$templateFile = "path\template_ua.json"
Gebruik de PowerShell-cmdlet New-AzResourceGroupDeployment om de sjabloon te implementeren.
New-AzResourceGroupDeployment ` -Name "UserAssignedDeployment" ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile ` -automationAccountName $automationAccount ` -userAssignedOne $userAssignedOne ` -userAssignedTwo $userAssignedTwo
De opdracht produceert geen uitvoer; U kunt echter de onderstaande code gebruiken om te controleren:
(Get-AzAutomationAccount ` -ResourceGroupName $resourceGroup ` -Name $automationAccount).Identity | ConvertTo-Json
De uitvoer ziet er ongeveer uit als de uitvoer die wordt weergegeven voor het REST API-voorbeeld hierboven.
Een rol toewijzen aan een door de gebruiker toegewezen beheerde identiteit
Een Automation-account kan de door de gebruiker toegewezen beheerde identiteit gebruiken om tokens op te halen voor toegang tot andere resources die worden beveiligd door Microsoft Entra ID, zoals Azure Key Vault. Deze tokens vertegenwoordigen geen specifieke gebruiker van de toepassing. In plaats daarvan vertegenwoordigen ze de toepassing die toegang heeft tot de resource. In dit geval vertegenwoordigt het token bijvoorbeeld een Automation-account.
Voordat u uw door de gebruiker toegewezen beheerde identiteit kunt gebruiken voor verificatie, moet u toegang instellen voor die identiteit in de Azure-resource waar u de identiteit wilt gebruiken. Als u deze taak wilt voltooien, wijst u de juiste rol toe aan die identiteit in de azure-doelresource.
Volg de principal van minimale bevoegdheden en wijs zorgvuldig machtigingen toe die alleen zijn vereist voor het uitvoeren van uw runbook. Als het Automation-account bijvoorbeeld alleen is vereist om een Azure-VM te starten of te stoppen, zijn de machtigingen die zijn toegewezen aan het Uitvoeren als-account of beheerde identiteit alleen vereist voor het starten of stoppen van de VM. Evenzo, als een runbook uit blob-opslag leest, wijs dan alleen-lezen rechten toe.
In dit voorbeeld wordt Azure PowerShell gebruikt om te tonen hoe u de rol Inzender in het abonnement toewijst aan de Azure-doelresource. De rol Inzender wordt gebruikt als voorbeeld en is mogelijk of niet vereist in uw geval. U kunt ook de rol toewijzen aan de Azure-doelresource in Azure Portal.
New-AzRoleAssignment `
-ObjectId <automation-Identity-object-id> `
-Scope "/subscriptions/<subscription-id>" `
-RoleDefinitionName "Contributor"
Roltoewijzing verifiëren voor een door de gebruiker beheerde identiteit
Voer de volgende stappen uit om een rol te verifiëren voor een door de gebruiker toegewezen beheerde identiteit van het Automation-account:
Meld u aan bij het Azure-portaal.
Ga naar uw Automation-account.
Selecteer bij Accountinstellingen de optie Identiteit, Door de gebruiker toegewezen.
Klik op Door de gebruiker toegewezen identiteitsnaam.
Als de rollen al zijn toegewezen aan de geselecteerde door de gebruiker toegewezen beheerde identiteit, kunt u een lijst met roltoewijzingen bekijken. Deze lijst bevat alle roltoewijzingen waarvoor u machtigingen hebt om te lezen.
Als u het abonnement wilt wijzigen, klikt u op de vervolgkeuzelijst Abonnement en selecteert u het juiste abonnement.
Klik op Roltoewijzing toevoegen (preview)
Selecteer in de vervolgkeuzelijst de set resources waarop de roltoewijzing van toepassing is: abonnement, resourcegroep, rol en bereik.
Als u de roltoewijzing niet hebt, kunt u de schrijfmachtigingen voor het geselecteerde bereik weergeven als een inlinebericht.Selecteer in de vervolgkeuzelijst Rol een rol als Inzender voor virtuele machines.
Klik op Opslaan.
Na een paar minuten wordt de rol in het geselecteerde bereik toegewezen aan de beheerde identiteit.
Toegang verifiëren met door de gebruiker toegewezen beheerde identiteit
Nadat u de door de gebruiker toegewezen beheerde identiteit voor uw Automation-account hebt ingeschakeld en een identiteit toegang hebt tot de doelresource, kunt u die identiteit opgeven in runbooks voor resources die beheerde identiteit ondersteunen. Gebruik voor identiteitsondersteuning de 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
Een toegangstoken genereren zonder Azure-cmdlets te gebruiken
Voor HTTP-eindpunten moet u het volgende controleren.
- De koptekst van de metagegevens moet aanwezig zijn en moet worden ingesteld op 'true'.
- Een resource moet samen met de aanvraag worden doorgegeven als queryparameter voor een GET-aanvraag en als formuliergegevens voor een POST-aanvraag.
- Stel de waarde van de omgevingsvariabele IDENTITY_HEADER in op X-IDENTITY-HEADER.
- Inhoudstype voor de Post-aanvraag moet zijn
application/x-www-form-urlencoded
.
Toegangstoken ophalen voor door de gebruiker toegewezen beheerde identiteit met 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
Toegangstoken ophalen voor door de gebruiker toegewezen beheerde identiteit met behulp van 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
Door de gebruiker toegewezen beheerde identiteit gebruiken 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)
}
Door de gebruiker toegewezen beheerde identiteit gebruiken 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)
Volgende stappen
Als uw runbooks niet zijn voltooid, raadpleegt u Problemen met beheerde identiteiten in Azure Automation oplossen.
Als u een beheerde identiteit wilt uitschakelen, raadpleegt u Beheerde identiteit van uw Azure Automation-account uitschakelen.
Zie het overzicht van automation-accountverificatie voor een overzicht van de beveiliging van Azure Automation-accounts.