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

V tomto článku se dozvíte, jak přidat spravovanou identitu přiřazenou uživatelem 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.

Poznámka:

Spravovanou identitu přiřazenou uživatelem není možné použít v procesu Hybrid Runbook Worker, pokud byla pro účet Automation vytvořena spravovaná identita (přiřazená systémem nebo uživatelem). Pokud není spravovaná identita přiřazená k účtu Automation, je možné použít spravovanou identitu přiřazenou systémem nebo uživatelem virtuálního počítače v procesu Hybrid Runbook Worker, který je virtuálním počítačem Azure s přiřazenými spravovanými identitami.

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.

  • Spravovaná identita přiřazená uživatelem a cílové prostředky Azure, které váš runbook spravuje, můžou být v různých předplatných Azure.

  • Nejnovější verze modulů účtů Azure. V současné době je to 2.2.8. (Viz Az.Accounts pro podrobnosti o této verzi.)

  • 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 přiřazenou uživatelem, což 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 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.

Přidání spravované identity přiřazené uživatelem pro účet Azure Automation

Spravovanou identitu přiřazenou uživatelem pro účet Azure Automation můžete přidat 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. Zkontrolujte níže uvedené hodnoty a pak proveďte

$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
$userAssignedOne = "userAssignedIdentityOne"
$userAssignedTwo = "userAssignedIdentityTwo"

Přidání 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. Vyberte kartu Přiřazený uživatel a pak vyberte Přidat.

  5. Vyberte stávající spravovanou identitu přiřazenou uživatelem a pak vyberte Přidat. Pak se vrátíte na kartu Přiřazené uživatelem.

    Output from Portal.

Přidání pomocí PowerShellu

K přidání spravovaných identit přiřazených uživatelem použijte rutinu PowerShellu Set-AzAutomationAccount . Nejprve musíte zvážit, jestli existuje existující spravovaná identita přiřazená systémem. Následující příklad přidá dvě existující spravované identity přiřazené uživatelem do existujícího účtu Automation a zakáže spravovanou identitu přiřazenou systémem, pokud existuje.

$output = Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignUserIdentity "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedOne", `
        "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedTwo"

$output

Pokud chcete zachovat stávající spravovanou identitu přiřazenou systémem, použijte následující:

$output = Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignUserIdentity "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedOne", `
        "/subscriptions/$subscriptionID/resourcegroups/$resourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$userAssignedTwo" `
    -AssignSystemIdentity

$output

Výstup by měl vypadat zhruba takto:

Output from Set-AzAutomationAccount command.

Pro další výstup spusťte: $output.identity | ConvertTo-Json.

Přidání pomocí rozhraní REST API

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

Syntaxe

Níže uvedená syntaxe ukázkového těla umožňuje spravovanou identitu přiřazenou systémem, pokud ještě není povolená, a přiřadí stávající spravované identity přiřazené uživatelem k existujícímu účtu Automation.

PATCH

{
  "identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/firstIdentity": {},
      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/secondIdentity": {}
    }
  }
}

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

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. Revidujte syntaxi výše uvedeného textu do souboru s názvem body_ua.json. Uložte soubor na místní počítač nebo do účtu úložiště Azure.

  2. Upravte níže hodnotu proměnné a spusťte ji.

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

    {
    "type": "SystemAssigned, UserAssigned",
    "principalId": "00000000-0000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-0000-000000000000",
    "userAssignedIdentities":  {
        "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI1":  {
                "PrincipalId":  "00000000-0000-0000-0000-000000000000",
                "ClientId":  "00000000-0000-0000-0000-000000000000"
                    },
        "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI2":  {
                "PrincipalId":  "00000000-0000-0000-0000-000000000000",
                "ClientId":  "00000000-0000-0000-0000-000000000000"
                    }
        }
    }
    

Přidání 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, pokud ještě není povolená, a přiřadí stávající spravované identity přiřazené uživatelem k existujícímu účtu Automation.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "automationAccountName": {
     "defaultValue": "YourAutomationAccount",
      "type": "String",
      "metadata": {
        "description": "Automation account name"
      }
    },
    "userAssignedOne": {
     "defaultValue": "userAssignedOne",
      "type": "String",
      "metadata": {
        "description": "User-assigned managed identity"
      }
	  },
    "userAssignedTwo": {
     "defaultValue": "userAssignedTwo",
      "type": "String",
      "metadata": {
        "description": "User-assigned managed identity"
      }
	  }
   },
  "resources": [
    {
      "type": "Microsoft.Automation/automationAccounts",
      "apiVersion": "2020-01-13-preview",
      "name": "[parameters('automationAccountName')]",
      "location": "[resourceGroup().location]",
      "identity": {
        "type": "SystemAssigned, UserAssigned",
        "userAssignedIdentities": {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('userAssignedOne'))]": {},
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('userAssignedTwo'))]": {}
        }
      },
      "properties": {
        "sku": {
          "name": "Basic"
        },
        "encryption": {
          "keySource": "Microsoft.Automation",
          "identity": {}
        }
      }
    }
  ]
}

Příklad

Proveďte následující kroky.

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

  2. Upravte níže hodnotu proměnné a spusťte ji.

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

    New-AzResourceGroupDeployment `
        -Name "UserAssignedDeployment" `
        -ResourceGroupName $resourceGroup `
        -TemplateFile $templateFile `
        -automationAccountName $automationAccount `
        -userAssignedOne $userAssignedOne `
        -userAssignedTwo $userAssignedTwo
    

    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é uživatelem

Účet Automation může pomocí spravované identity přiřazené uživatelem 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 uživatelem 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 tomto příkladu se pomocí Azure PowerShellu ukáže, 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. Případně můžete roli přiřadit k cílovému prostředku Azure na webu Azure Portal.

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

Ověření přiřazení role k identitě spravované uživatelem

Při ověřování role spravované identity přiřazené uživatelem 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 Účet Nastavení vyberte Identita, Přiřazený uživatel.

  4. Klikněte na název identity přiřazené uživatelem.

    Assigning role in user-assigned identity in Azure portal.

    Pokud už jsou k vybrané spravované identitě přiřazené uživatelem 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é uživatelem

Jakmile povolíte spravovanou identitu přiřazenou uživatelem 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. Pro podporu identit použijte rutinu Az Connect-AzAccount.

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with user-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity -AccountId <user-assigned-identity-ClientId>).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

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 pro požadavek Post musí být application/x-www-form-urlencoded.

Získání přístupového tokenu pro spravovanou identitu přiřazenou uživatelem pomocí http Get

$resource= "?resource=https://management.azure.com/"
$client_id="&client_id=<ClientId of USI>"
$url = $env:IDENTITY_ENDPOINT + $resource + $client_id 
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"  
$Headers.Add("Metadata", "True")
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER) 
$accessToken = Invoke-RestMethod -Uri $url -Method 'GET' -Headers $Headers
Write-Output $accessToken.access_token 

Získání přístupového tokenu pro spravovanou identitu přiřazenou uživatelem pomocí http Post

$url = $env:IDENTITY_ENDPOINT
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Metadata", "True")
$headers.Add("X-IDENTITY-HEADER", $env:IDENTITY_HEADER) 
$body = @{'resource'='https://management.azure.com/' 
'client_id'='<ClientId of USI>'}
$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é uživatelem v Azure PowerShellu

Write-Output "Connecting to azure via  Connect-AzAccount -Identity -AccountId <ClientId of USI>"  
Connect-AzAccount -Identity -AccountId <ClientId of USI> 
Write-Output "Successfully connected with Automation account's Managed Identity"  
Write-Output "Trying to fetch value from key vault using User Assigned Managed identity. 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é uživatelem v Runbooku Pythonu

#!/usr/bin/env python3  
import os  
import requests   

resource = "?resource=https://management.azure.com/" 
client_id = "&client_id=<ClientId of USI>" 
endPoint = os.getenv('IDENTITY_ENDPOINT')+ resource +client_id 
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) 

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.