Uso di un'identità gestita assegnata dal sistema per un account di Automazione di Azure
Questo articolo illustra come abilitare un'identità gestita assegnata dal sistema per un account di Automazione di Azure e come usarla per accedere ad altre risorse. Per altre informazioni sul funzionamento delle identità gestite con Automazione di Azure, vedere Identità gestite.
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Prerequisiti
Un account di automazione di Azure. Per istruzioni, vedere Creare un account di Automazione di Azure.
L’ultima versione dei moduli Az di PowerShell Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.
Una risorsa di Azure a cui si vuole accedere dal runbook di Automazione. Questa risorsa deve avere un ruolo definito per l'identità gestita, che consente al runbook di Automazione di autenticare l'accesso alla risorsa. Per aggiungere ruoli, è necessario essere un proprietario della risorsa nel tenant Microsoft Entra corrispondente.
Per eseguire processi ibridi usando un'identità gestita, aggiornare il ruolo di lavoro ibrido per runbook basato sull’agente all’ultima versione. Non esiste alcun requisito di versione minima per il ruolo di lavoro ibrido per runbook basato sull’estensione e tutte le versioni funzioneranno. Le versioni minime necessarie per il ruolo di lavoro ibrido basato sull’agente sono:
- Ruolo di lavoro ibrido per runbook di Windows: versione 7.3.1125.0
- Ruolo di lavoro ibrido per runbook Linux: versione 1.7.4.0
Per controllare le versioni:
- Ruolo di lavoro ibrido per runbook di Windows: passare al percorso di installazione:
C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\.
e la cartella Automazione di Azure contiene una sottocartella con il numero di versione come nome della sottocartella. - Ruolo di lavoro ibrido per runbook Linux: passare al percorso:
vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION.
e la VERSIONE del file ha il numero di versione del ruolo di lavoro ibrido.
Per assegnare un ruolo di Azure è necessario disporre dell'autorizzazione
Microsoft.Authorization/roleAssignments/write
, ad esempio amministratore accesso utenti o proprietario.
Abilitare identità gestite assegnate dal sistema con un account di Automazione di Azure
Dopo l'abilitazione, le proprietà seguenti verranno assegnate all'identità gestita assegnata dal sistema.
Proprietà (JSON) | valore | Descrizione |
---|---|---|
principalid | <principal-ID> | Identificatore univoco globale (GUID) dell'oggetto entità servizio per l'identità gestita assegnata dal sistema che rappresenta l'account di Automazione nel tenant di Microsoft Entra. Questo GUID viene talvolta visualizzato come "ID oggetto" o objectID. |
tenantid | <Azure-AD-tenant-ID> | Identificatore univoco globale (GUID) che rappresenta il tenant di Microsoft Entra in cui l'account di Automazione è ora membro. All'interno del tenant di Microsoft Entra, l'entità servizio ha lo stesso nome dell'account di Automazione. |
È possibile abilitare un'identità gestita assegnata dal sistema per un account di Automazione di Azure usando il portale di Azure, PowerShell, l'API REST di Azure o il modello di Resource Manager. Per gli esempi relativi a PowerShell, accedere prima ad Azure in modo interattivo usando il cmdlet Connect-AzAccount e seguire le istruzioni.
# 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>"
Inizializzare quindi un set di variabili che verranno usate in tutti gli esempi. Rivedere i valori seguenti e quindi eseguire.
$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
Importante
La nuova identità a livello di account di Automazione esegue l'override di tutte le identità precedenti assegnate dal sistema a livello di macchina virtuale descritte in Usare l'autenticazione del runbook con identità gestite. Se si eseguono processi ibridi in macchine virtuali di Azure che usano l'identità assegnata dal sistema di una macchina virtuale per accedere alle risorse del runbook, l'identità dell'account di Automazione verrà usata per i processi ibridi. Ciò significa che l'esecuzione del processo esistente potrebbe essere interessata se si usa la funzionalità Chiavi gestite dal cliente (CMK) dell'account di Automazione.
Se si vuole continuare a usare l'identità gestita della macchina virtuale, non è consigliabile abilitare l'identità a livello di account di Automazione. Se è già stata abilitata, è possibile disabilitare l'identità gestita assegnata dal sistema dell'account di Automazione. Vedere Disabilitare l'identità gestita dell'account di Automazione di Azure.
Abilitare tramite il portale di Azure
Procedi come segue:
Accedere al portale di Azure.
Nel portale di Azure passare all'account di Automazione.
In Impostazioni account selezionare Autenticazione.
Impostare l'opzione Assegnata dal sistema su Sì e premere Salva. Quando viene richiesto di confermare, selezionare Sì.
L'account di Automazione può ora usare l'identità assegnata dal sistema, registrata con l'ID Microsoft Entra ed è rappresentata da un ID oggetto.
Abilitare con PowerShell
Usare il cmdlet di PowerShell Set-AzAutomationAccount per abilitare l'identità gestita assegnata dal sistema.
$output = Set-AzAutomationAccount `
-ResourceGroupName $resourceGroup `
-Name $automationAccount `
-AssignSystemIdentity
$output
L'output dovrebbe essere simile al seguente:
Per un output aggiuntivo, modificare l'esempio per specificare: $output.identity | ConvertTo-Json
.
Abilitare l'uso di un'API REST
Di seguito sono riportati i passaggi di sintassi e di esempio.
Sintassi
La sintassi del corpo seguente abilita un'identità gestita assegnata dal sistema a un account di Automazione esistente usando il metodo HTTP PATCH. Tuttavia, questa sintassi rimuoverà tutte le identità gestite assegnate dall'utente esistenti associate all'account di Automazione.
{
"identity": {
"type": "SystemAssigned"
}
}
Se sono definite più identità assegnate dall'utente, per conservarle e rimuovere solo l'identità assegnata dal sistema, è necessario specificare ogni identità assegnata dall'utente usando un elenco delimitato da virgole. L'esempio seguente usa il metodo HTTP PATCH.
{
"identity" : {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID": {},
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID2": {}
}
}
}
La sintassi dell’API è la seguente:
PATCH https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview
Esempio
Effettuare i seguenti passaggi.
Copiare e incollare la sintassi del corpo in un file denominato
body_sa.json
. Salvare il file nel computer locale o in un account di archiviazione di Azure.Aggiornare il valore della variabile seguente e quindi eseguire.
$file = "path\body_sa.json"
Questo esempio usa il cmdlet Invoke-RestMethod di PowerShell per inviare la richiesta PATCH all'account di Automazione.
# 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
L'output dovrebbe essere simile al seguente:
{ "PrincipalId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "TenantId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "Type": 0, "UserAssignedIdentities": null }
Abilitare l'uso di un modello di Resource Manager
Di seguito sono riportati i passaggi di sintassi e di esempio.
Sintassi del modello
La sintassi del modello di esempio seguente abilita un'identità gestita assegnata dal sistema all'account di Automazione esistente. Tuttavia, questa sintassi rimuoverà tutte le identità gestite assegnate dall'utente esistenti associate all'account di Automazione.
{
"$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"
}
}
}
]
}
Esempio
Effettuare i seguenti passaggi.
Rivedere la sintassi del modello precedente per usare l'account di Automazione e salvarla in un file denominato
template_sa.json
.Aggiornare il valore della variabile seguente e quindi eseguire.
$templateFile = "path\template_sa.json"
Usare il cmdlet di PowerShell New-AzResourceGroupDeployment per distribuire il modello.
New-AzResourceGroupDeployment ` -Name "SystemAssignedDeployment" ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile
Il comando non produrrà un output; tuttavia, è possibile usare il codice seguente per verificare:
(Get-AzAutomationAccount ` -ResourceGroupName $resourceGroup ` -Name $automationAccount).Identity | ConvertTo-Json
L'output sarà simile all'output illustrato per l'esempio dell'API REST precedente.
Assegnare un ruolo a un'identità gestita assegnata dal sistema
Un account di Automazione può usare la relativa identità gestita assegnata dal sistema per ottenere i token per l'accesso ad altre risorse protette da Microsoft Entra ID, ad esempio Insieme di credenziali chiave di Azure (Azure Key Vault). Questi token non rappresentano un utente specifico dell'applicazione. Al contrario, rappresentano l'applicazione che accede alla risorsa. In questo caso, ad esempio, il token rappresenta un account di Automazione.
Prima di poter usare l'identità gestita assegnata dal sistema per l'autenticazione, configurare l'accesso per tale identità nella risorsa di Azure in cui si prevede di usarla. Per completare questa attività, assegnare il ruolo appropriato all'identità nella risorsa di destinazione di Azure.
Seguire il principio dei privilegi minimi e assegnare con cautela solo le autorizzazioni necessarie per eseguire il runbook. Ad esempio, se l'account di Automazione è necessario solo per avviare o arrestare una macchina virtuale di Azure, le autorizzazioni assegnate all'account RunAs o all'identità gestita devono essere relative soltanto all'avvio e all'arresto della macchina virtuale. Analogamente, se un runbook legge da una risorsa di archiviazione BLOB, assegnare solo autorizzazioni di lettura.
L'esempio seguente usa Azure PowerShell per illustrare come assegnare il ruolo Collaboratore nella sottoscrizione alla risorsa di Azure di destinazione. Il ruolo Collaboratore viene usato come esempio e può essere necessario o meno nel caso in uso.
New-AzRoleAssignment `
-ObjectId <automation-Identity-object-id> `
-Scope "/subscriptions/<subscription-id>" `
-RoleDefinitionName "Contributor"
Verificare l'assegnazione di ruolo a un'identità gestita dal sistema
Per verificare il ruolo di un'identità gestita assegnata dal sistema dell'account di Automazione, seguire questa procedura:
Accedere al portale di Azure.
Passare all'account di Automazione.
In Impostazioni account selezionare Autenticazione.
In Autorizzazioni selezionare Assegnazioni di ruolo di Azure.
Se i ruoli sono già assegnati all'identità gestita assegnata dal sistema selezionata, è possibile visualizzare un elenco di assegnazioni di ruolo. Questo elenco include tutte le assegnazioni di ruolo che si è autorizzati a leggere.
Per cambiare la sottoscrizione, fare clic sull'elenco a discesa Sottoscrizione e quindi sulla sottoscrizione appropriata.
Fare clic su Aggiungi un'assegnazione di ruolo (anteprima)
Nell'elenco a discesa selezionare il set di risorse a cui si applica l'assegnazione di ruolo: Sottoscrizione, Gruppo di risorse, Ruolo e Ambito.
Se non si ha l'assegnazione di ruolo, è possibile visualizzare le autorizzazioni di scrittura per l'ambito selezionato come messaggio inline.Nell'elenco a discesa Ruolo, selezionare un ruolo, ad esempio Collaboratore Macchina virtuale.
Fare clic su Salva.
Dopo alcuni minuti, all'identità gestita viene assegnato il ruolo nell'ambito selezionato.
Autenticare l'accesso con l'identità gestita assegnata dal sistema
Dopo aver abilitato l'identità gestita per l'account di Automazione e aver consentito a un'identità di accedere alla risorsa di destinazione, è possibile specificare tale identità nei runbook rispetto alle risorse che supportano l'identità gestita. Per il supporto delle identità, usare il cmdlet Az Connect-AzAccount
cmdlet. Vedere Connect-AzAccount nelle informazioni di riferimento su PowerShell.
# 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
Nota
Se l'organizzazione usa ancora i cmdlet AzureRM deprecati, è possibile usare Connect-AzureRMAccount -Identity
.
Generare un token di accesso senza usare i cmdlet di Azure
Per gli endpoint HTTP verificare quanto segue.
- L'intestazione dei metadati deve essere presente e deve essere impostata su "true".
- Una risorsa deve essere passata insieme alla richiesta, come parametro di query per una richiesta GET e come dati del modulo per una richiesta POST.
- Impostare il valore della variabile di ambiente IDENTITY_HEADER su X-IDENTITY-HEADER.
- Il tipo di contenuto per la richiesta Post deve essere 'application/x-www-form-urlencoded'.
Ottenere il token di accesso per l'identità gestita assegnata dal sistema tramite 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
Ottenere il token di accesso per l'identità assegnata dal sistema tramite 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
Uso dell'identità gestita assegnata dal sistema per accedere ad Azure Key Vault in Azure PowerShell
Per altre informazioni, vedere 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)
}
Uso dell'identità gestita assegnata dal sistema nel runbook Python.
#!/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)
Uso dell'identità gestita assegnata dal sistema per accedere al database SQL
Per informazioni dettagliate sul provisioning dell'accesso a un database SQL di Azure, vedere Effettuare il provisioning dell'amministratore di Microsoft Entra (database SQL).
$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()
Eseguire la migrazione da account RunAs esistenti all'identità gestita
Automazione di Azure ha fornito l'autenticazione per la gestione delle risorse o delle risorse di Azure Resource Manager distribuite nel modello di distribuzione classico con l'account RunAs. Per passare da un account RunAs a un'identità gestita per l'autenticazione del runbook, seguire questa procedura.
Abilitare un'identità gestita assegnata dal sistema, assegnata dall'utente o entrambi i tipi di identità gestite.
Concedere all'identità gestita gli stessi privilegi alle risorse di Azure corrispondenti all'account RunAs assegnato.
Aggiornare i runbook per l'autenticazione usando l'identità gestita.
Modificare i runbook per usare l'identità gestita. Per il supporto delle identità, usare il cmdlet Az
Connect-AzAccount
cmdlet. Vedere Connect-AzAccount nelle informazioni di riferimento su PowerShell.- Se si usano i moduli AzureRM, aggiornare
AzureRM.Profile
alla versione più recente e sostituire usando il cmdletAdd-AzureRMAccount
conConnect-AzureRMAccount –Identity
. - Se si usano i moduli Az, eseguire l'aggiornamento alla versione più recente seguendo la procedura descritta nell'articolo Aggiornare i moduli di Azure PowerShell.
- Se si usano i moduli AzureRM, aggiornare
Passaggi successivi
Se i runbook non vengono completati correttamente, vedere Risolvere i problemi di identità gestita di Automazione di Azure.
Se è necessario disabilitare un'identità gestita, vedere Disabilitare l'identità gestita dell'account di Automazione di Azure.
Per una panoramica della sicurezza degli account di Automazione di Azure, vedere Panoramica dell'autenticazione dell'account di Automazione.