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.
Požadavky
Úč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 ke zdroji. Pokud chcete přidat role, musíte být vlastníkem zdroje v odpovídajícím tenantovi Microsoft Entra.
Pokud chcete spouštět hybridní úlohy pomocí spravované identity, musíte funkci Hybrid Runbook Worker založenou na agentech aktualizovat na nejnovější verzi. Neexistuje žádný minimální požadavek na verzi hybrid Runbook Worker založený na rozšíření, všechny verze by fungovaly. Minimální požadované verze funkce Hybrid Worker založené 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 správce uživatelských přístupů 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 Connect-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:
Přihlaste se k portálu Azure.
Na webu Azure Portal přejděte ke svému účtu Automation.
V části Nastavení účtu vyberte Identita.
Nastavte možnost Přiřazený systém na Zapnuto a stiskněte Uložit. Po zobrazení výzvy k potvrzení vyberte Ano.
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.
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:
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ého čárkami. Následující příklad používá metodu 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": {}
}
}
}
Syntaxe API je následující:
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
Příklad
Proveďte následující kroky.
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.Aktualizujte níže hodnotu proměnné a pak spusťte.
$file = "path\body_sa.json"
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.
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
.Aktualizujte níže hodnotu proměnné a pak spusťte.
$templateFile = "path\template_sa.json"
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 službou Microsoft Entra ID, 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.
V následujícím příkladu se pomocí Azure PowerShellu ukáže, jak přiřadit roli Přispěvatel v odběru k cílovému prostředku Azure. Role Přispěvatel se používá jako příklad a ve vašem případě 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:
Přihlaste se k portálu Azure.
Přejděte do svého účtu služby Automation.
V části Nastavení účtu vyberte Identita.
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í.
Pokud chcete předplatné změnit, klikněte na rozevírací seznam Předplatné a vyberte příslušné předplatné.
Klikněte na Přidat přiřazení role (Preview)
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.V rozevíracím seznamu Role vyberte roli Přispěvatel virtuálních počítačů.
Klikněte na Uložit.
Po několika minutách se spravované identitě přiřadí role ve vybraném rozsahu.
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 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ů.
Povolte systémově přiřazené, uživatelem přiřazené nebo oba typy spravovaných identit.
Udělte spravované identitě stejná oprávnění k prostředkům Azure, které odpovídají přiřazenému účtu Spustit jako.
Aktualizujte runbooky tak, aby se ověřily pomocí spravované identity.
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 rutinouAdd-AzureRMAccount
Connect-AzureRMAccount –Identity
. - Pokud používáte moduly Az, aktualizujte na nejnovější verzi podle kroků v článku Aktualizace modulů Azure PowerShellu.
- Pokud používáte moduly AzureRM, aktualizujte
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.