Een door het systeem toegewezen beheerde identiteit gebruiken voor een Azure Automation-account

In dit artikel leest u hoe u een door het systeem toegewezen beheerde identiteit inschakelt voor een Azure Automation-account en hoe u deze kunt gebruiken voor toegang tot andere resources. Zie Beheerde identiteiten voor meer informatie over hoe beheerde identiteiten werken met Azure Automation.

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 nieuwste versie van Az PowerShell-modules Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.

  • Een Azure-resource waartoe u toegang wilt krijgen vanuit uw Automation-runbook. Deze resource moet een rol hebben die is gedefinieerd voor de 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 hybride taken wilt uitvoeren met behulp van een beheerde identiteit, werkt u hybrid runbook Worker op basis van een agent bij naar de nieuwste versie. Er is geen minimale versievereiste voor Hybrid Runbook Worker op basis van extensies en alle versies zouden werken. De minimaal vereiste versies voor hybrid worker op basis van agents zijn:

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

    De versies controleren:

    • Windows Hybrid Runbook Worker: Ga naar het installatiepad en C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\. de map Azure Automation bevat een submap met het versienummer als de naam van de submap.
    • Linux Hybrid Runbook Worker: Ga naar het pad en vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION. de bestandsversie heeft het versienummer van de Hybrid Worker.
  • Als u een Azure-rol wilt toewijzen, moet Microsoft.Authorization/roleAssignments/write u beschikken over machtigingen zoals gebruikerstoegang Beheer istrator of eigenaar.

Een door het systeem toegewezen beheerde identiteit inschakelen voor een Azure Automation-account

Zodra deze optie is ingeschakeld, worden de volgende eigenschappen toegewezen aan de door het systeem toegewezen beheerde identiteit.

Eigenschap (JSON) Waarde Omschrijving
principalid <principal-id> De GUID (Globally Unique Identifier) van het service-principal-object voor de door het systeem toegewezen beheerde identiteit die uw Automation-account vertegenwoordigt in de Microsoft Entra-tenant. Deze GUID wordt soms weergegeven als een object-id of object-id.
tenantid <Azure-AD-tenant-id> De GUID (Globally Unique Identifier) die de Microsoft Entra-tenant vertegenwoordigt waar het Automation-account nu lid is. Binnen de Microsoft Entra-tenant heeft de service-principal dezelfde naam als het Automation-account.

U kunt een door het systeem toegewezen beheerde identiteit inschakelen voor een Azure Automation-account met behulp van Azure Portal, PowerShell, de Azure REST API of ARM-sjabloon. Voor de voorbeelden van PowerShell meldt u zich eerst interactief aan bij Azure met behulp van de cmdlet Verbinding maken-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"

Belangrijk

De nieuwe Identiteit op Automation-accountniveau overschrijft alle eerdere door het VM-niveau toegewezen identiteiten die worden beschreven in Runbookverificatie gebruiken met beheerde identiteiten. Als u hybride taken uitvoert op Azure-VM's die gebruikmaken van de door het systeem toegewezen identiteit van een VIRTUELE machine voor toegang tot runbookresources, wordt de identiteit van het Automation-account gebruikt voor de hybride taken. Dit betekent dat uw bestaande taakuitvoering mogelijk wordt beïnvloed als u de functie Door klant beheerde sleutels (CMK) van uw Automation-account hebt gebruikt.

Als u de beheerde identiteit van de virtuele machine wilt blijven gebruiken, moet u de identiteit op Automation-accountniveau niet inschakelen. Als u deze al hebt ingeschakeld, kunt u de door het Automation-account toegewezen beheerde identiteit uitschakelen. Zie Beheerde identiteit van uw Azure Automation-account uitschakelen.

Inschakelen met behulp van Azure Portal

Voer de volgende stappen uit:

  1. Meld u aan bij de Azure-portal.

  2. Navigeer in Azure Portal naar uw Automation-account.

  3. Selecteer bij Accountinstellingen de optie Identiteit.

  4. Stel de door het systeem toegewezen optie in op Aan en druk op Opslaan. Wanneer u wordt gevraagd om te bevestigen, selecteert u Ja.

    Enabling system-assigned identity in Azure portal.

    Uw Automation-account kan nu de door het systeem toegewezen identiteit gebruiken, die is geregistreerd bij Microsoft Entra-id en wordt vertegenwoordigd door een object-id.

    Managed identity object ID.

Inschakelen met PowerShell

Gebruik de PowerShell-cmdlet Set-AzAutomationAccount om de door het systeem toegewezen beheerde identiteit in te schakelen.

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

$output

De uitvoer moet er als volgt uitzien:

Output from set-azautomationaccount command.

Voor extra uitvoer wijzigt u het voorbeeld om het volgende op te geven: $output.identity | ConvertTo-Json.

Inschakelen met behulp van een REST API

Hieronder ziet u de syntaxis en voorbeeldstappen.

Syntaxis

De onderstaande hoofdtekstsyntaxis maakt een door het systeem toegewezen beheerde identiteit mogelijk aan een bestaand Automation-account met behulp van de HTTP PATCH-methode. Met deze syntaxis worden echter alle bestaande door de gebruiker toegewezen beheerde identiteiten verwijderd die zijn gekoppeld aan het Automation-account.

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

Als er meerdere door de gebruiker toegewezen identiteiten zijn gedefinieerd om deze te behouden en alleen de door het systeem toegewezen identiteit te verwijderen, moet u elke door de gebruiker toegewezen identiteit opgeven met behulp van een door komma's gescheiden lijst. In het onderstaande voorbeeld wordt de HTTP PATCH-methode gebruikt.

{ 
  "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": {}
    }
  }
}

De syntaxis van de API is als volgt:

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

voorbeeld

Voer de volgende stappen uit.

  1. Kopieer en plak de syntaxis van de hoofdtekst in een bestand met de naam body_sa.json. Sla het bestand op uw lokale computer of in een Azure-opslagaccount op.

  2. Werk de onderstaande variabelewaarde bij en voer deze vervolgens uit.

    $file = "path\body_sa.json"
    
  3. 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:

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

Inschakelen met behulp van een ARM-sjabloon

Hieronder ziet u de syntaxis en voorbeeldstappen.

Sjabloonsyntaxis

De onderstaande voorbeeldsjabloonsyntaxis maakt een door het systeem toegewezen beheerde identiteit mogelijk voor het bestaande Automation-account. Met deze syntaxis worden echter alle bestaande door de gebruiker toegewezen beheerde identiteiten verwijderd die zijn gekoppeld aan het Automation-account.

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

voorbeeld

Voer de volgende stappen uit.

  1. Wijzig de syntaxis van de bovenstaande sjabloon om uw Automation-account te gebruiken en op te slaan in een bestand met de naam template_sa.json.

  2. Werk de onderstaande variabelewaarde bij en voer deze vervolgens uit.

    $templateFile = "path\template_sa.json"
    
  3. Gebruik de PowerShell-cmdlet New-AzResourceGroupDeployment om de sjabloon te implementeren.

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

    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 het systeem toegewezen beheerde identiteit

Een Automation-account kan de door het systeem 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 het systeem 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 het volgende voorbeeld wordt Azure PowerShell gebruikt om te laten zien 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.

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

Roltoewijzing controleren op een door het systeem beheerde identiteit

Voer de volgende stappen uit om een rol te verifiëren voor een door het systeem toegewezen beheerde identiteit van het Automation-account:

  1. Meld u aan bij de Azure-portal.

  2. Ga naar uw Automation-account.

  3. Selecteer bij Accountinstellingen de optie Identiteit.

    Assigning role in system-assigned identity in Azure portal.

  4. Klik onder Machtigingen op Azure-roltoewijzingen.

    Als de rollen al zijn toegewezen aan de geselecteerde door het systeem toegewezen beheerde identiteit, kunt u een lijst met roltoewijzingen bekijken. Deze lijst bevat alle roltoewijzingen waarvoor u machtigingen hebt om te lezen.

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

  5. Als u het abonnement wilt wijzigen, klikt u op de vervolgkeuzelijst Abonnement en selecteert u het juiste abonnement.

  6. Klik op Roltoewijzing toevoegen (preview)

  7. 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.

  8. Selecteer in de vervolgkeuzelijst Rol een rol als Inzender voor virtuele machines.

  9. Klik op Opslaan.

    Add a role assignment in Azure portal.

Na een paar minuten wordt aan de beheerde identiteit de rol toegewezen in het geselecteerde bereik.

Toegang verifiëren met door het systeem toegewezen beheerde identiteit

Nadat u de 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 de cmdlet Connect-AzAccount Az voor identiteitsondersteuning. Zie Connect-AzAccount in de PowerShell-naslaginformatie.

# 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

Notitie

Als uw organisatie nog steeds gebruikmaakt van de afgeschafte AzureRM-cmdlets, kunt u dit gebruiken Connect-AzureRMAccount -Identity.

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 'application/x-www-form-urlencoded' zijn.

Toegangstoken ophalen voor door het systeem toegewezen beheerde identiteit met 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

Toegangstoken ophalen voor door het systeem toegewezen identiteit met behulp van 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

Door het systeem toegewezen beheerde identiteit gebruiken voor toegang tot Azure Key Vault in Azure PowerShell

Zie Get-AzKeyVaultSecret voor meer informatie.

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) 
}

Door het systeem toegewezen beheerde identiteit gebruiken in 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) 

Door het systeem toegewezen beheerde identiteit gebruiken voor Access SQL Database

Zie Microsoft Entra-beheerder (SQL Database) inrichten voor meer informatie over het inrichten van toegang tot een Azure 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()

Migreren van bestaande Uitvoeren als-accounts naar beheerde identiteit

Azure Automation heeft verificatie geleverd voor het beheren van Azure Resource Manager-resources of -resources die zijn geïmplementeerd in het klassieke implementatiemodel met het Uitvoeren als-account. Als u wilt overschakelen van een Uitvoeren als-account naar een beheerde identiteit voor uw runbookverificatie, volgt u de onderstaande stappen.

  1. Schakel een door het systeem toegewezen, door de gebruiker toegewezen of beide typen beheerde identiteiten in.

  2. Verwijs de beheerde identiteit dezelfde bevoegdheden toe aan de Azure-resources die overeenkomen met wat het Uitvoeren als-account is toegewezen.

  3. Werk uw runbooks bij om te verifiëren met behulp van de beheerde identiteit.

  4. Wijzig Runbooks om de beheerde identiteit te gebruiken. Gebruik de cmdlet Connect-AzAccount Az voor identiteitsondersteuning. Zie Connect-AzAccount in de PowerShell-naslaginformatie.

    • Als u AzureRM-modules gebruikt, werkt u bij AzureRM.Profile naar de nieuwste versie en vervangt u de cmdlet door Add-AzureRMAccountConnect-AzureRMAccount –Identity.
    • Als u Az-modules gebruikt, werkt u bij naar de nieuwste versie volgens de stappen in het artikel Azure PowerShell-modules bijwerken.

Volgende stappen