Använda en systemtilldelad hanterad identitet för ett Azure Automation-konto

Den här artikeln visar hur du aktiverar en systemtilldelad hanterad identitet för ett Azure Automation-konto och hur du använder den för att komma åt andra resurser. Mer information om hur hanterade identiteter fungerar med Azure Automation finns i Hanterade identiteter.

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Förutsättningar

  • Ett Azure Automation-konto. Anvisningar finns i Skapa ett Azure Automation-konto.

  • Den senaste versionen av Az PowerShell-modulerna Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.

  • En Azure-resurs som du vill komma åt från din Automation-runbook. Den här resursen måste ha en roll definierad för den hanterade identiteten, vilket hjälper Automation-runbooken att autentisera åtkomsten till resursen. Om du vill lägga till roller måste du vara ägare till resursen i motsvarande Microsoft Entra-klientorganisation.

  • Om du vill köra hybridjobb med hjälp av en hanterad identitet uppdaterar du den agentbaserade Hybrid Runbook Worker till den senaste versionen. Det finns inget krav på lägsta version för tilläggsbaserad Hybrid Runbook Worker och alla versioner fungerar. De lägsta nödvändiga versionerna för agentbaserade Hybrid Worker är:

    • Windows Hybrid Runbook Worker: version 7.3.1125.0
    • Linux Hybrid Runbook Worker: version 1.7.4.0

    Så här kontrollerar du versionerna:

    • Windows Hybrid Runbook Worker: Gå till installationssökvägen – C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\. och mappen Azure Automation innehåller en undermapp med versionsnumret som namn på undermappen.
    • Linux Hybrid Runbook Worker: Gå till sökvägen – vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION. och filen VERSION har versionsnumret för Hybrid Worker.
  • Om du vill tilldela en Azure-roll måste du ha Microsoft.Authorization/roleAssignments/write behörighet som administratör för användaråtkomst eller ägare.

Aktivera en systemtilldelad hanterad identitet för ett Azure Automation-konto

När du är aktiverad tilldelas följande egenskaper till den systemtilldelade hanterade identiteten.

Egenskap (JSON) Värde Description
principalid <principal-ID> Globalt unik identifierare (GUID) för tjänstens huvudnamnsobjekt för den systemtilldelade hanterade identiteten som representerar ditt Automation-konto i Microsoft Entra-klientorganisationen. Detta GUID visas ibland som ett "objekt-ID" eller objectID.
tenantid <Azure-AD-tenant-ID> Den globalt unika identifieraren (GUID) som representerar Microsoft Entra-klientorganisationen där Automation-kontot nu är medlem. I Microsoft Entra-klientorganisationen har tjänstens huvudnamn samma namn som Automation-kontot.

Du kan aktivera en systemtilldelad hanterad identitet för ett Azure Automation-konto med hjälp av Azure-portalen, PowerShell, Azure REST API eller ARM-mallen. För exemplen med PowerShell loggar du först in på Azure interaktivt med cmdleten Anslut-AzAccount och följer anvisningarna.

# 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>"

Initiera sedan en uppsättning variabler som ska användas i exemplen. Ändra värdena nedan och kör sedan.

$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"

Viktigt!

Den nya automationsidentiteten på kontonivå åsidosätter alla tidigare systemtilldelade identiteter på VM-nivå som beskrivs i Använda runbook-autentisering med hanterade identiteter. Om du kör hybridjobb på virtuella Azure-datorer som använder en virtuell dators systemtilldelade identitet för att komma åt runbook-resurser används Automation-kontoidentiteten för hybridjobben. Det innebär att din befintliga jobbkörning kan påverkas om du har använt funktionen Kundhanterade nycklar (CMK) för ditt Automation-konto.

Om du vill fortsätta använda den virtuella datorns hanterade identitet bör du inte aktivera automationskontots identitet. Om du redan har aktiverat det kan du inaktivera den systemtilldelade hanterade identiteten för Automation-kontot. Se Inaktivera din hanterade identitet för Azure Automation-kontot.

Aktivera med hjälp av Azure-portalen

Utför följande steg:

  1. Logga in på Azure-portalen.

  2. Gå till ditt Automation-konto i Azure-portalen.

  3. Gå till Kontoinställningar och välj Identitet.

  4. Ange alternativet Systemtilldelat till och tryck på Spara. När du uppmanas att bekräfta väljer du Ja.

    Enabling system-assigned identity in Azure portal.

    Ditt Automation-konto kan nu använda den systemtilldelade identiteten, som är registrerad med Microsoft Entra-ID och representeras av ett objekt-ID.

    Managed identity object ID.

Aktivera med PowerShell

Använd PowerShell-cmdleten Set-AzAutomationAccount för att aktivera den systemtilldelade hanterade identiteten.

$output = Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignSystemIdentity

$output

Utdata bör se ut ungefär så här:

Output from set-azautomationaccount command.

För ytterligare utdata ändrar du exemplet för att ange: $output.identity | ConvertTo-Json.

Aktivera med hjälp av ett REST-API

Syntax- och exempelsteg finns nedan.

Syntax

Brödtextsyntaxen nedan aktiverar en systemtilldelad hanterad identitet till ett befintligt Automation-konto med hjälp av HTTP PATCH-metoden. Den här syntaxen tar dock bort alla befintliga användartilldelade hanterade identiteter som är associerade med Automation-kontot.

{ 
 "identity": { 
   "type": "SystemAssigned" 
  } 
}

Om flera användartilldelade identiteter har definierats måste du ange varje användartilldelad identitet med kommaavgränsad lista för att behålla dem och endast ta bort den systemtilldelade identiteten. I exemplet nedan används HTTP PATCH-metoden.

{ 
  "identity" : {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID": {},
        "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/cmkID2": {}
    }
  }
}

Syntaxen för API:et är följande:

PATCH https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview

Exempel

Utför följande steg.

  1. Kopiera och klistra in brödtextsyntaxen i en fil med namnet body_sa.json. Spara filen på den lokala datorn eller på ett Azure-lagringskonto.

  2. Uppdatera variabelvärdet nedan och kör sedan.

    $file = "path\body_sa.json"
    
  3. I det här exemplet används PowerShell-cmdleten Invoke-RestMethod för att skicka PATCH-begäran till ditt Automation-konto.

    # 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
    

    Utdata bör se ut ungefär så här:

    {
        "PrincipalId":  "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
        "TenantId":  "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
        "Type":  0,
        "UserAssignedIdentities":  null
    }
    

Aktivera med hjälp av en ARM-mall

Syntax- och exempelsteg finns nedan.

Mallsyntax

Exempelmallsyntaxen nedan aktiverar en systemtilldelad hanterad identitet till det befintliga Automation-kontot. Den här syntaxen tar dock bort alla befintliga användartilldelade hanterade identiteter som är associerade med Automation-kontot.

{
  "$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"
        }
      }
    }
  ]
}

Exempel

Utför följande steg.

  1. Ändra syntaxen för mallen ovan för att använda ditt Automation-konto och spara det i en fil med namnet template_sa.json.

  2. Uppdatera variabelvärdet nedan och kör sedan.

    $templateFile = "path\template_sa.json"
    
  3. Använd PowerShell-cmdleten New-AzResourceGroupDeployment för att distribuera mallen.

    New-AzResourceGroupDeployment `
        -Name "SystemAssignedDeployment" `
        -ResourceGroupName $resourceGroup `
        -TemplateFile $templateFile
    

    Kommandot genererar inte några utdata. Du kan dock använda koden nedan för att verifiera:

    (Get-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount).Identity | ConvertTo-Json
    

    Utdata ser ut ungefär som de utdata som visas för REST API-exemplet ovan.

Koppla roll till en systemtilldelad hanterad identitet

Ett Automation-konto kan använda sin systemtilldelade hanterade identitet för att hämta token för att få åtkomst till andra resurser som skyddas av Microsoft Entra-ID, till exempel Azure Key Vault. Sådana token representerar inte någon specifik appanvändare. I stället representerar de appen som använder resursen. I det här fallet representerar till exempel token ett Automation-konto.

Innan du kan använda din systemtilldelade hanterade identitet för autentisering måste du konfigurera identitetens åtkomst till den Azure-resurs där identiteten ska användas. För att slutföra den här uppgiften tilldelar du lämplig roll till identiteten på Azure-målresursen.

Följ principen om lägsta behörighet och tilldela endast de behörigheter som krävs för att köra din runbook. Om Automation-kontot till exempel bara behövs för att starta eller stoppa en virtuell Azure-dator ska du bara tilldela behörigheter för att starta eller stoppa den virtuella datorn till Kör som-kontot. På samma sätt tilldelar du skrivskyddade behörigheter om en runbook läser från bloblagring.

I följande exempel används Azure PowerShell för att visa hur du tilldelar rollen Deltagare i prenumerationen till azure-målresursen. Rollen Deltagare används som exempel och kanske inte krävs i ditt fall.

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

Verifiera rolltilldelning till en systemhanterad identitet

Så här verifierar du en roll för en systemtilldelad hanterad identitet för Automation-kontot:

  1. Logga in på Azure-portalen.

  2. Gå till ditt Automation-konto.

  3. Gå till Kontoinställningar och välj Identitet.

    Assigning role in system-assigned identity in Azure portal.

  4. Under Behörigheter klickar du på Azure-rolltilldelningar.

    Om rollerna redan är tilldelade till den valda systemtilldelade hanterade identiteten ser du en lista med rolltilldelningar. Den här listan innehåller de rolltilldelningar du har behörighet att läsa.

    View role-assignments that you have permission in Azure portal.

  5. Om du vill ändra prenumerationen klickar du på listrutan Prenumeration och väljer lämplig prenumeration.

  6. Klicka på Lägg till rolltilldelning (förhandsversion)

  7. I listrutan väljer du den uppsättning resurser som rolltilldelningen gäller – Prenumeration, Resursgrupp, Roll och Omfång.
    Om du inte har rolltilldelningen kan du visa skrivbehörigheterna för det valda omfånget som ett infogat meddelande.

  8. I listrutan Roll väljer du en roll som Virtuell datordeltagare.

  9. Klicka på Spara.

    Add a role assignment in Azure portal.

Efter några minuter tilldelas den hanterade identiteten rollen i det valda omfånget.

Autentisera åtkomst med en systemtilldelad hanterad identitet

När du har aktiverat den hanterade identiteten för ditt Automation-konto och gett en identitet åtkomst till målresursen kan du ange identiteten i runbooks mot resurser som har stöd för hanterade identiteter. Använd cmdleten Az cmdlet Connect-AzAccount för identitetsstöd. Läs mer i Connect-AzAccount i PowerShell-referensen.

# 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

Kommentar

Om din organisation fortfarande använder de inaktuella AzureRM-cmdletarna kan du använda Connect-AzureRMAccount -Identity.

Generera en åtkomsttoken utan att använda Azure-cmdletar

Kontrollera följande för HTTP-slutpunkter.

  • Metadatahuvudet måste vara närvarande och ska vara inställt på "true".
  • En resurs måste skickas tillsammans med begäran, som en frågeparameter för en GET-begäran och som formulärdata för en POST-begäran.
  • Ange värdet för miljövariabeln IDENTITY_HEADER till X-IDENTITY-HEADER.
  • Innehållstyp för Post-begäran måste vara "application/x-www-form-urlencoded".

Hämta åtkomsttoken för systemtilldelad hanterad identitet med 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

Hämta åtkomsttoken för systemtilldelad identitet med 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

Använda systemtilldelad hanterad identitet för att få åtkomst till Azure Key Vault i Azure PowerShell

Mer information finns i 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) 
}

Använda systemtilldelad hanterad identitet i Python Runbook

#!/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) 

Använda systemtilldelad hanterad identitet för att komma åt SQL Database

Mer information om hur du etablerar åtkomst till en Azure SQL-databas finns i Etablera Microsoft Entra-administratör (SQL Database).

$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()

Migrera från befintliga Kör som-konton till hanterad identitet

Azure Automation tillhandahöll autentisering för att hantera Azure Resource Manager-resurser eller resurser som distribuerats på den klassiska distributionsmodellen med Kör som-kontot. Om du vill växla från ett Kör som-konto till en hanterad identitet för din runbook-autentisering följer du stegen nedan.

  1. Aktivera en systemtilldelad, användartilldelad eller båda typerna av hanterade identiteter.

  2. Ge den hanterade identiteten samma behörigheter till Azure-resurserna som matchar vad Kör som-kontot tilldelades.

  3. Uppdatera dina runbooks för att autentisera med hjälp av den hanterade identiteten.

  4. Ändra Runbooks så att de använder den hanterade identiteten. Använd cmdleten Az cmdlet Connect-AzAccount för identitetsstöd. Läs mer i Connect-AzAccount i PowerShell-referensen.

    • Om du använder AzureRM-moduler uppdaterar AzureRM.Profile du till den senaste versionen och ersätter med cmdleten Add-AzureRMAccount med Connect-AzureRMAccount –Identity.
    • Om du använder Az-moduler uppdaterar du till den senaste versionen enligt stegen i artikeln Uppdatera Azure PowerShell-moduler .

Nästa steg

  • Om dina runbooks inte slutförs kan du läsa Felsöka problem med hanterade identiteter i Azure Automation.

  • Om du behöver inaktivera en hanterad identitet kan du läsa Inaktivera din hanterade identitet för Azure Automation-kontot.

  • En översikt över Azure Automation-kontosäkerhet finns i Översikt över autentisering av Automation-konto.