Používání spravované identity přiřazené systémem pro účet Azure Automation

V tomto článku se dozvíte, jak povolit spravovanou identitu přiřazenou systémem pro účet Azure Automation a jak ji použít pro přístup k dalším prostředkům. Další informace o tom, jak spravované identity fungují se službou Azure Automation, najdete v tématu Spravované identity.

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Předpoklady

  • Účet Azure Automation. Pokyny najdete v tématu Vytvoření účtu Azure Automation.

  • Nejnovější verze modulů Az PowerShellu Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.

  • Prostředek Azure, ke kterému chcete získat přístup z runbooku Automation. Tento prostředek musí mít definovanou roli pro spravovanou identitu, která pomáhá runbooku Automation ověřovat přístup k prostředku. Pokud chcete přidat role, musíte být vlastníkem prostředku v odpovídajícím tenantovi Microsoft Entra.

  • Pokud chcete spouštět hybridní úlohy pomocí spravované identity, aktualizujte funkci Hybrid Runbook Worker založenou na agentech na nejnovější verzi. Neexistuje žádný minimální požadavek na verzi hybrid Runbook Worker založený na rozšíření a všechny verze by fungovaly. Minimální požadované verze hybrid Workeru založeného na agentech jsou:

    • Hybrid Runbook Worker systému Windows: verze 7.3.1125.0
    • Hybrid Runbook Worker pro Linux: verze 1.7.4.0

    Kontrola verzí:

    • Hybrid Runbook Worker systému Windows: Přejděte na instalační cestu C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\. a složka Azure Automation obsahuje podsložku s číslem verze jako názvem podsložky.
    • Hybrid Runbook Worker pro Linux: Přejděte na cestu vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION. – a verze souboru má číslo verze Hybrid Worker.
  • Pokud chcete přiřadit roli Azure, musíte mít Microsoft.Authorization/roleAssignments/write oprávnění, jako je uživatelský přístup Správa istrator nebo vlastník.

Povolení spravované identity přiřazené systémem pro účet Azure Automation

Po povolení se spravované identitě přiřazené systémem přiřadí následující vlastnosti.

Vlastnost (JSON) Hodnota Popis
principalid <principal-ID> Globálně jedinečný identifikátor (GUID) instančního objektu pro spravovanou identitu přiřazenou systémem, která představuje váš účet Automation v tenantovi Microsoft Entra. Tento identifikátor GUID se někdy zobrazuje jako ID objektu nebo ID objektu.
ID klienta <Azure-AD-tenant-ID> Globálně jedinečný identifikátor (GUID), který představuje tenanta Microsoft Entra, kde je účet Automation nyní členem. V tenantovi Microsoft Entra má instanční objekt stejný název jako účet Automation.

Spravovanou identitu přiřazenou systémem pro účet Azure Automation můžete povolit pomocí webu Azure Portal, PowerShellu, rozhraní Azure REST API nebo šablony ARM. V příkladech zahrnujících PowerShell se nejprve přihlaste k Azure interaktivně pomocí rutiny Připojení-AzAccount a postupujte podle pokynů.

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

Potom inicializuje sadu proměnných, které se použijí v různých příkladech. Upravte níže uvedené hodnoty a spusťte je.

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

Důležité

Nová identita na úrovni účtu Automation přepíše všechny předchozí identity přiřazené systémem na úrovni virtuálního počítače, které jsou popsané v tématu Použití ověřování runbooků se spravovanými identitami. Pokud spouštíte hybridní úlohy na virtuálních počítačích Azure, které pro přístup k prostředkům runbooku používají identitu přiřazenou systémem virtuálního počítače, použije se pro hybridní úlohy identita účtu Automation. To znamená, že vaše stávající spuštění úlohy může mít vliv, pokud používáte funkci KLÍČE spravované zákazníkem (CMK) vašeho účtu Automation.

Pokud chcete dál používat spravovanou identitu virtuálního počítače, neměli byste povolit identitu na úrovni účtu Automation. Pokud jste ji už povolili, můžete spravovanou identitu přiřazenou systémem účtu Automation zakázat. Viz Zakázání spravované identity účtu Azure Automation.

Povolení pomocí webu Azure Portal

Proveďte následující kroky:

  1. Přihlaste se k portálu Azure.

  2. Na webu Azure Portal přejděte ke svému účtu Automation.

  3. V části Nastavení účtu vyberte Identita.

  4. Nastavte možnost Přiřazený systém na Zapnuto a stiskněte Uložit. Po zobrazení výzvy k potvrzení vyberte Ano.

    Enabling system-assigned identity in Azure portal.

    Váš účet Automation teď může používat identitu přiřazenou systémem, která je zaregistrovaná pomocí ID Microsoft Entra a je reprezentovaná ID objektu.

    Managed identity object ID.

Povolení s využitím PowerShellu

K povolení spravované identity přiřazené systémem použijte rutinu PowerShellu Set-AzAutomationAccount .

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

$output

Výstup by měl vypadat zhruba takto:

Output from set-azautomationaccount command.

V případě dalšího výstupu upravte příklad tak, aby určil: $output.identity | ConvertTo-Json.

Povolení pomocí rozhraní REST API

Syntaxe a ukázkové kroky jsou uvedeny níže.

Syntaxe

Níže uvedená syntaxe textu umožňuje spravované identitě přiřazené systémem k existujícímu účtu Automation pomocí metody HTTP PATCH . Tato syntaxe ale odebere všechny existující spravované identity přiřazené uživatelem přidružené k účtu Automation.

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

Pokud je definováno více identit přiřazených uživatelem, abyste je zachovali a odebrali pouze identitu přiřazenou systémem, je potřeba zadat každou identitu přiřazenou uživatelem pomocí seznamu oddělených čárkami. Následující příklad používá metodu 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": {}
    }
  }
}

Syntaxe rozhraní API je následující:

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

Příklad

Proveďte následující kroky.

  1. Zkopírujte a vložte syntaxi textu do souboru s názvem body_sa.json. Uložte soubor na místní počítač nebo do účtu úložiště Azure.

  2. Aktualizujte níže hodnotu proměnné a pak spusťte.

    $file = "path\body_sa.json"
    
  3. Tento příklad používá rutinu PowerShellu Invoke-RestMethod k odeslání požadavku PATCH na váš účet 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
    

    Výstup by měl vypadat zhruba takto:

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

Povolení pomocí šablony ARM

Syntaxe a ukázkové kroky jsou uvedeny níže.

Syntaxe šablon

Syntaxe ukázkové šablony níže umožňuje spravovanou identitu přiřazenou systémem k existujícímu účtu Automation. Tato syntaxe ale odebere všechny existující spravované identity přiřazené uživatelem přidružené k účtu 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"
        }
      }
    }
  ]
}

Příklad

Proveďte následující kroky.

  1. Upravte syntaxi výše uvedené šablony tak, aby používala váš účet Automation a uložila ho do souboru s názvem template_sa.json.

  2. Aktualizujte níže hodnotu proměnné a pak spusťte.

    $templateFile = "path\template_sa.json"
    
  3. K nasazení šablony použijte rutinu PowerShellu New-AzResourceGroupDeployment .

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

    Příkaz nevygeneruje výstup. Následující kód ale můžete použít k ověření:

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

    Výstup bude vypadat podobně jako výstup zobrazený v příkladu rozhraní REST API výše.

Přiřaďte roli spravované identitě přiřazené systémem

Účet Automation může pomocí spravované identity přiřazené systémem získat tokeny pro přístup k dalším prostředkům chráněným ID Microsoft Entra, jako je Azure Key Vault. Tyto tokeny nereprezentují žádného konkrétního uživatele aplikace. Reprezentují aplikaci, která k prostředku přistupuje. V tomto případě například token představuje účet Automation.

Než budete moct použít spravovanou identitu přiřazenou systémem k ověřování, nastavte pro tuto ni přístup k prostředku Azure, ve kterém ji plánujete využít. K dokončení této úlohy přiřaďte příslušné identitě v cílovém prostředku Azure odpovídající roli.

Řiďte se zásadou nejnižších oprávnění a pečlivě přidělujte pouze oprávnění potřebná ke spuštění runbooku. Pokud se například účet Automation vyžaduje jenom ke spuštění nebo zastavení virtuálního počítače Azure, oprávnění přiřazená k účtu Spustit jako musí být jenom pro spuštění nebo zastavení tohoto virtuálního počítače. Podobně přiřaďte oprávnění jen pro čtení, pokud runbook čte ze služby Blob Storage.

Následující příklad pomocí Azure PowerShellu ukazuje, jak přiřadit roli Přispěvatel v předplatném k cílovému prostředku Azure. Role Přispěvatel se používá jako příklad a v případě potřeby může nebo nemusí být vyžadována.

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

Ověření přiřazení role k identitě spravované systémem

Při ověřování role spravované identity přiřazené systémem pro účet Automation postupujte takto:

  1. Přihlaste se k portálu Azure.

  2. Přejděte do svého účtu služby Automation.

  3. V části Nastavení účtu vyberte Identita.

    Assigning role in system-assigned identity in Azure portal.

  4. V části Oprávnění klikněte na přiřazení rolí Azure.

    Pokud už jsou k vybrané spravované identitě přiřazené systémem už role přiřazené, můžete zobrazit seznam přiřazení rolí. Tento seznam obsahuje všechna přiřazení rolí, pro která máte oprávnění ke čtení.

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

  5. Pokud chcete předplatné změnit, klikněte na rozevírací seznam Předplatné a vyberte příslušné předplatné.

  6. Klikněte na Přidat přiřazení role (Preview)

  7. V rozevíracím seznamu vyberte sadu prostředků, které se vztahují k přiřazení role – předplatné, skupina prostředků, role a obor.
    Pokud přiřazení role nemáte, můžete zobrazit oprávnění k zápisu pro vybraný obor jako vloženou zprávu.

  8. V rozevíracím seznamu Role vyberte roli Přispěvatel virtuálních počítačů.

  9. Klikněte na Uložit.

    Add a role assignment in Azure portal.

Po několika minutách se spravované identitě přiřadí role ve vybraném oboru.

Ověřování přístupu pomocí spravované identity přiřazené systémem

Jakmile povolíte spravovanou identitu pro účet Automation a poskytnete identitě přístup k cílovému prostředku, můžete tuto identitu zadat v runboocích pro prostředky, které podporují spravovanou identitu. K podpoře identit použijte rutinu Connect-AzAccount Az. Viz Connect-AzAccount v referenčních informacích k PowerShellu.

# 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

Poznámka:

Pokud vaše organizace stále používá zastaralé rutiny AzureRM, můžete použít Connect-AzureRMAccount -Identity.

Generování přístupového tokenu bez použití rutin Azure

V případě koncových bodů HTTP se ujistěte, že platí následující:

  • Hlavička metadat musí být přítomná a měla by být nastavená na true.
  • Prostředek musí být předán spolu s požadavkem jako parametr dotazu pro požadavek GET a jako formulářová data pro požadavek POST.
  • Nastavte hodnotu proměnné prostředí IDENTITY_HEADER na X-IDENTITY-HEADER.
  • Typ obsahu požadavku Post musí být application/x-www-form-urlencoded.

Získání přístupového tokenu pro spravovanou identitu přiřazenou systémem pomocí 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

Získání přístupového tokenu pro identitu přiřazenou systémem pomocí 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

Použití spravované identity přiřazené systémem pro přístup ke službě Azure Key Vault v Azure PowerShellu

Další informace naleznete v tématu 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) 
}

Použití spravované identity přiřazené systémem v Runbooku v Pythonu

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

Použití spravované identity přiřazené systémem pro Access SQL Database

Podrobnosti o zřizování přístupu k databázi Azure SQL najdete v tématu Zřízení správce 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()

Migrace z existujících účtů Spustit jako na spravovanou identitu

Služba Azure Automation poskytla ověřování pro správu prostředků nebo prostředků Azure Resource Manageru nasazených v modelu nasazení Classic pomocí účtu Spustit jako. Pokud chcete přepnout z účtu Spustit jako na spravovanou identitu pro ověřování runbooku, postupujte podle následujících kroků.

  1. Povolte systémově přiřazené, uživatelem přiřazené nebo oba typy spravovaných identit.

  2. Udělte spravované identitě stejná oprávnění k prostředkům Azure, které odpovídají přiřazenému účtu Spustit jako.

  3. Aktualizujte runbooky tak, aby se ověřily pomocí spravované identity.

  4. Upravte runbooky tak, aby používaly spravovanou identitu. K podpoře identit použijte rutinu Connect-AzAccount Az. Viz Connect-AzAccount v referenčních informacích k PowerShellu.

    • Pokud používáte moduly AzureRM, aktualizujte AzureRM.Profile na nejnovější verzi a nahraďte rutinou rutinou Add-AzureRMAccountConnect-AzureRMAccount –Identity.
    • Pokud používáte moduly Az, aktualizujte na nejnovější verzi podle kroků v článku Aktualizace modulů Azure PowerShellu.

Další kroky

  • Pokud se runbooky úspěšně nedokončí, projděte si řešení potíží se spravovanou identitou služby Azure Automation.

  • Pokud potřebujete spravovanou identitu zakázat, přečtěte si téma Zakázání spravované identity účtu Azure Automation.

  • Přehled zabezpečení účtu Azure Automation najdete v přehledu ověřování účtů Automation.