Używanie tożsamości zarządzanej przypisanej przez system w przypadku konta usługi Azure Automation

W tym artykule pokazano, jak włączyć tożsamość zarządzaną przypisaną przez system dla konta usługi Azure Automation i jak używać jej do uzyskiwania dostępu do innych zasobów. Aby uzyskać więcej informacji na temat sposobu pracy tożsamości zarządzanych z usługą Azure Automation, zobacz Tożsamości zarządzane.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Wymagania wstępne

  • Konto usługi Azure Automation. Aby uzyskać instrukcje, zobacz Tworzenie konta usługi Azure Automation.

  • Najnowsza wersja modułów az programu PowerShell Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.

  • Zasób platformy Azure, do którego chcesz uzyskać dostęp z poziomu elementu Runbook usługi Automation. Ten zasób musi mieć rolę zdefiniowaną dla tożsamości zarządzanej, która ułatwia elementowi Runbook automatyzacji uwierzytelnianie dostępu do zasobu. Aby dodać role, musisz być właścicielem zasobu w odpowiedniej dzierżawie firmy Microsoft Entra.

  • Jeśli chcesz wykonywać zadania hybrydowe przy użyciu tożsamości zarządzanej, zaktualizuj hybrydowy proces roboczy elementu Runbook oparty na agencie do najnowszej wersji. Nie ma minimalnego wymagania dotyczącego wersji hybrydowego procesu roboczego elementu Runbook opartego na rozszerzeniu, a wszystkie wersje będą działać. Minimalne wymagane wersje dla hybrydowego procesu roboczego opartego na agencie to:

    • Hybrydowy proces roboczy elementu Runbook systemu Windows: wersja 7.3.1125.0
    • Hybrydowy proces roboczy elementu Runbook systemu Linux: wersja 1.7.4.0

    Aby sprawdzić wersje:

    • Hybrydowy proces roboczy elementu Runbook systemu Windows: przejdź do ścieżki instalacji — C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\. a folder Azure Automation zawiera podfolder z numerem wersji jako nazwą podfolderu.
    • Hybrydowy proces roboczy elementu Runbook systemu Linux: przejdź do ścieżki — vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION. a plik VERSION ma numer wersji hybrydowego procesu roboczego.
  • Aby przypisać rolę platformy Azure, musisz mieć Microsoft.Authorization/roleAssignments/write uprawnienia, takie jak Administracja istrator dostępu użytkowników lub właściciel.

Włączanie tożsamości zarządzanej przypisanej przez system dla konta usługi Azure Automation

Po włączeniu następujące właściwości zostaną przypisane do tożsamości zarządzanej przypisanej przez system.

Właściwość (JSON) Wartość Opis
principalid <identyfikator podmiotu zabezpieczeń> Globalnie unikatowy identyfikator (GUID) obiektu jednostki usługi dla przypisanej przez system tożsamości zarządzanej, która reprezentuje konto usługi Automation w dzierżawie firmy Microsoft Entra. Ten identyfikator GUID czasami jest wyświetlany jako "identyfikator obiektu" lub objectID.
identyfikator dzierżawcy <Azure-AD-tenant-ID> Globalnie unikatowy identyfikator (GUID), który reprezentuje dzierżawę firmy Microsoft Entra, w której konto usługi Automation jest teraz członkiem. W dzierżawie firmy Microsoft Entra jednostka usługi ma taką samą nazwę jak konto usługi Automation.

Tożsamość zarządzaną przypisaną przez system można włączyć dla konta usługi Azure Automation przy użyciu witryny Azure Portal, programu PowerShell, interfejsu API REST platformy Azure lub szablonu usługi ARM. W przykładach dotyczących programu PowerShell najpierw zaloguj się do platformy Azure interaktywnie przy użyciu polecenia cmdlet Połączenie-AzAccount i postępuj zgodnie z instrukcjami.

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

Następnie zainicjuj zestaw zmiennych, które będą używane w różnych przykładach. Popraw poniższe wartości, a następnie wykonaj je.

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

Ważne

Nowa tożsamość na poziomie konta usługi Automation zastępuje wszystkie poprzednie tożsamości przypisane przez system na poziomie maszyny wirtualnej opisane w temacie Używanie uwierzytelniania elementu Runbook z tożsamościami zarządzanymi. Jeśli uruchamiasz zadania hybrydowe na maszynach wirtualnych platformy Azure, które używają tożsamości przypisanej przez system maszyny wirtualnej do uzyskiwania dostępu do zasobów elementu Runbook, tożsamość konta usługi Automation będzie używana dla zadań hybrydowych. Oznacza to, że twoje istniejące wykonanie zadania może mieć wpływ, jeśli używasz funkcji Klucze zarządzane przez klienta (CMK) konta usługi Automation.

Jeśli chcesz nadal korzystać z tożsamości zarządzanej maszyny wirtualnej, nie należy włączać tożsamości na poziomie konta usługi Automation. Jeśli ta opcja została już włączona, możesz wyłączyć tożsamość zarządzaną przypisaną przez system konta usługi Automation. Zobacz Wyłączanie tożsamości zarządzanej konta usługi Azure Automation.

Włączanie przy użyciu witryny Azure Portal

Wykonaj następujące kroki:

  1. Zaloguj się w witrynie Azure Portal.

  2. W witrynie Azure Portal przejdź do swojego konta usługi Automation.

  3. W obszarze Ustawienia konta wybierz pozycję Tożsamość.

  4. Ustaw opcję Przypisane przez system na Wł. i naciśnij przycisk Zapisz. Po wyświetleniu monitu o potwierdzenie wybierz pozycję Tak.

    Enabling system-assigned identity in Azure portal.

    Twoje konto usługi Automation może teraz używać tożsamości przypisanej przez system, która jest zarejestrowana w identyfikatorze Microsoft Entra ID i jest reprezentowana przez identyfikator obiektu.

    Managed identity object ID.

Włączanie przy użyciu programu PowerShell

Użyj polecenia cmdlet programu PowerShell Set-AzAutomationAccount , aby włączyć tożsamość zarządzaną przypisaną przez system.

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

$output

Dane wyjściowe powinny wyglądać mniej więcej tak:

Output from set-azautomationaccount command.

Aby uzyskać dodatkowe dane wyjściowe, zmodyfikuj przykład, aby określić: $output.identity | ConvertTo-Json.

Włączanie przy użyciu interfejsu API REST

Poniżej podano składnię i przykładowe kroki.

Składnia

Poniższa składnia treści umożliwia przypisaną przez system tożsamość zarządzaną do istniejącego konta usługi Automation przy użyciu metody HTTP PATCH . Jednak ta składnia spowoduje usunięcie wszystkich istniejących tożsamości zarządzanych przypisanych przez użytkownika skojarzonych z kontem usługi Automation.

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

Jeśli zdefiniowano wiele tożsamości przypisanych przez użytkownika, aby je zachować i usunąć tylko tożsamość przypisaną przez system, należy określić każdą tożsamość przypisaną przez użytkownika przy użyciu listy rozdzielanej przecinkami. W poniższym przykładzie użyto metody HTTP PATCH .

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

Składnia interfejsu API jest następująca:

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

Przykład

Wykonaj następujące kroki.

  1. Skopiuj i wklej składnię treści do pliku o nazwie body_sa.json. Zapisz plik na komputerze lokalnym lub na koncie usługi Azure Storage.

  2. Zaktualizuj wartość zmiennej poniżej, a następnie wykonaj polecenie .

    $file = "path\body_sa.json"
    
  3. W tym przykładzie użyto polecenia cmdlet Programu PowerShell Invoke-RestMethod , aby wysłać żądanie PATCH do konta usługi Automation.

    # 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
    

    Dane wyjściowe powinny wyglądać mniej więcej tak:

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

Włączanie przy użyciu szablonu usługi ARM

Poniżej podano składnię i przykładowe kroki.

Składnia szablonu

Poniższa przykładowa składnia szablonu umożliwia przypisaną przez system tożsamość zarządzaną do istniejącego konta usługi Automation. Jednak ta składnia spowoduje usunięcie wszystkich istniejących tożsamości zarządzanych przypisanych przez użytkownika skojarzonych z kontem usługi Automation.

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

Przykład

Wykonaj następujące kroki.

  1. Popraw składnię powyższego szablonu, aby użyć konta usługi Automation i zapisać go w pliku o nazwie template_sa.json.

  2. Zaktualizuj wartość zmiennej poniżej, a następnie wykonaj polecenie .

    $templateFile = "path\template_sa.json"
    
  3. Użyj polecenia cmdlet programu PowerShell New-AzResourceGroupDeployment , aby wdrożyć szablon.

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

    Polecenie nie spowoduje wygenerowania danych wyjściowych; Możesz jednak użyć poniższego kodu, aby sprawdzić:

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

    Dane wyjściowe będą wyglądać podobnie do danych wyjściowych przedstawionych dla przykładu interfejsu API REST powyżej.

Przypisz rolę do tożsamości zarządzanej przypisanej przez system

Konto usługi Automation może używać przypisanej przez system tożsamości zarządzanej, aby uzyskać tokeny w celu uzyskania dostępu do innych zasobów chronionych przez identyfikator entra firmy Microsoft, takich jak usługa Azure Key Vault. Te tokeny nie reprezentują żadnego konkretnego użytkownika aplikacji. Reprezentują aplikację, która uzyskuje dostęp do zasobu. W tym przykładzie token reprezentuje konto usługi Automation.

Zanim będzie można korzystać z tożsamości zarządzanej przypisanej przez system na potrzeby uwierzytelniania, należy skonfigurować dla tej tożsamości dostęp do zasobu platformy Azure, z którym będziesz jej używać. W tym celu przypisz do tej tożsamości odpowiednią rolę w kontekście docelowego zasobu platformy Azure.

Postępuj zgodnie z zasadą najniższego wymaganego poziomu uprawnień i przypisz tylko uprawnienia wymagane do wykonania elementu runbook. Jeśli na przykład konto usługi Automation wymaga tylko możliwości uruchamiania lub zatrzymywania maszyny wirtualnej platformy Azure, do konta Uruchom jako lub do tożsamości zarządzanej powinny być przypisane tylko uprawnienia do uruchamiania lub zatrzymywania maszyny wirtualnej. Podobnie jeśli element runbook odczytuje dane z magazynu obiektów blob, przypisz uprawnienia tylko do odczytu.

W poniższym przykładzie użyto programu Azure PowerShell, aby pokazać, jak przypisać rolę Współautor w subskrypcji do docelowego zasobu platformy Azure. Rola Współautor jest używana jako przykład i może być wymagana w Twoim przypadku lub może nie być wymagana.

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

Weryfikowanie przypisania roli do tożsamości zarządzanej przez system

Aby zweryfikować rolę przypisanej przez system tożsamości zarządzanej konta usługi Automation, wykonaj następujące czynności:

  1. Zaloguj się w witrynie Azure Portal.

  2. Przejdź do konta usługi Automation.

  3. W obszarze Ustawienia konta wybierz pozycję Tożsamość.

    Assigning role in system-assigned identity in Azure portal.

  4. W obszarze Uprawnienia kliknij pozycję Przypisania ról platformy Azure.

    Jeśli przypisano już role do wybranej tożsamości zarządzanej przypisanej przez system, będzie widoczna lista przypisań ról. Ta lista zawiera wszystkie przypisania ról, do których masz uprawnienia do odczytu.

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

  5. Aby zmienić subskrypcję, kliknij listę rozwijaną Subskrypcja i wybierz odpowiednią subskrypcję.

  6. Kliknij pozycję Dodaj przypisanie roli (wersja zapoznawcza)

  7. Z listy rozwijanej wybierz zestaw zasobów, które ma zastosowanie przypisanie roli — subskrypcja, grupa zasobów, rola i zakres.
    Jeśli nie masz przypisania roli, możesz wyświetlić uprawnienia do zapisu dla wybranego zakresu jako komunikat wbudowany.

  8. Z listy rozwijanej Rola wybierz rolę Współautor maszyny wirtualnej.

  9. Kliknij przycisk Zapisz.

    Add a role assignment in Azure portal.

Po kilku minutach tożsamość zarządzana zostanie przypisana do roli w wybranym zakresie.

Uwierzytelnianie dostępu za pomocą tożsamości zarządzanej przypisanej przez system

Po włączeniu tożsamości zarządzanej dla konta usługi Automation i zezwoleniu tej tożsamości na dostęp do zasobu docelowego można wskazać tę tożsamość w elementach runbook dla zasobów, które obsługują tożsamość zarządzaną. Aby uzyskać obsługę tożsamości, użyj polecenia cmdlet Az cmdlet Connect-AzAccount . Zobacz Connect-AzAccount w dokumentacji programu 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

Uwaga

Jeśli Twoja organizacja nadal używa przestarzałych poleceń cmdlet modułu AzureRM, możesz użyć polecenia Connect-AzureRMAccount -Identity.

Generowanie tokenu dostępu bez używania poleceń cmdlet platformy Azure

W przypadku punktów końcowych HTTP upewnij się, że są następujące.

  • Nagłówek metadanych musi być obecny i powinien być ustawiony na wartość "true".
  • Zasób musi zostać przekazany wraz z żądaniem, jako parametr zapytania dla żądania GET i jako dane formularza dla żądania POST.
  • Ustaw wartość zmiennej środowiskowej IDENTITY_HEADER na X-IDENTITY-HEADER.
  • Typ zawartości żądania Post musi mieć wartość "application/x-www-form-urlencoded".

Uzyskiwanie tokenu dostępu dla przypisanej przez system tożsamości zarządzanej przy użyciu protokołu 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

Uzyskiwanie tokenu dostępu dla tożsamości przypisanej przez system przy użyciu wpisu HTTP

$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

Używanie przypisanej przez system tożsamości zarządzanej w celu uzyskania dostępu do usługi Azure Key Vault w programie Azure PowerShell

Aby uzyskać więcej informacji, zobacz 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) 
}

Używanie tożsamości zarządzanej przypisanej przez system w elemecie Runbook języka 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) 

Używanie przypisanej przez system tożsamości zarządzanej do usługi Access SQL Database

Aby uzyskać szczegółowe informacje na temat aprowizacji dostępu do bazy danych Azure SQL Database, zobacz Provision Microsoft Entra admin (SQL Database) (Aprowizowanie administratora usługi Microsoft Entra (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()

Migrowanie z istniejących kont Uruchom jako do tożsamości zarządzanej

Usługa Azure Automation zapewniała uwierzytelnianie do zarządzania zasobami lub zasobami usługi Azure Resource Manager wdrożonych w klasycznym modelu wdrażania przy użyciu konta Uruchom jako. Aby przełączyć się z konta Uruchom jako na tożsamość zarządzaną na potrzeby uwierzytelniania elementu Runbook, wykonaj poniższe kroki.

  1. Włącz przypisane przez system, przypisane przez użytkownika lub oba typy tożsamości zarządzanych.

  2. Przyznaj tożsamości zarządzanej te same uprawnienia do zasobów platformy Azure pasujących do przypisanego konta Uruchom jako.

  3. Zaktualizuj elementy Runbook, aby uwierzytelniły się przy użyciu tożsamości zarządzanej.

  4. Zmodyfikuj elementy Runbook, aby używały tożsamości zarządzanej. Aby uzyskać obsługę tożsamości, użyj polecenia cmdlet Az cmdlet Connect-AzAccount . Zobacz Connect-AzAccount w dokumentacji programu PowerShell.

    • Jeśli używasz modułów AzureRM, zaktualizuj AzureRM.Profile do najnowszej wersji i zastąp element za pomocą Add-AzureRMAccount polecenia cmdlet Connect-AzureRMAccount –Identity.
    • Jeśli używasz modułów Az, zaktualizuj moduły do najnowszej wersji, wykonując kroki opisane w artykule Aktualizowanie modułów programu Azure PowerShell.

Następne kroki

  • Jeśli elementy Runbook nie kończą się pomyślnie, zapoznaj się z tematem Rozwiązywanie problemów z tożsamością zarządzaną usługi Azure Automation.

  • Jeśli musisz wyłączyć tożsamość zarządzaną, zobacz Wyłączanie tożsamości zarządzanej konta usługi Azure Automation.

  • Aby zapoznać się z omówieniem zabezpieczeń konta usługi Azure Automation, zobacz Omówienie uwierzytelniania konta usługi Automation.