Compartilhar via


Usar uma identidade gerenciada atribuída pelo sistema para uma conta de Automação do Azure

Este artigo mostra como habilitar uma identidade gerenciada atribuída pelo sistema para uma conta da Automação do Azure e como usá-la para acessar outros recursos. Para obter mais informações sobre como as identidades gerenciadas funcionam com a Automação do Azure, confira Identidades gerenciadas.

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

  • Uma conta de Automação do Azure. Veja as instruções em Criar uma conta de Automação do Azure.

  • A versão mais recente dos módulos do Azure PowerShell, Az.Accounts, Az.Resources, Az.Automation, Az.KeyVault.

  • Um recurso do Azure que você deseja acessar no runbook de automação. Esse recurso precisa ter uma função definida para a identidade gerenciada, o que ajuda o runbook de automação a autenticar o acesso ao recurso. Para adicionar funções, você precisa ser um proprietário para o recurso no locatário do Microsoft Entra correspondente.

  • Caso deseje executar trabalhos híbridos usando uma identidade gerenciada, atualize o Hybrid Runbook Worker baseado em agente para a última versão. Não há um requisito mínimo de versão para o Hybrid Runbook Worker baseado em extensão. Todas as versões funcionarão. As versões mínimas necessárias para o Hybrid Worker baseado em agente são:

    • Hybrid Runbook Worker do Windows: versão 7.3.1125.0
    • Hybrid Runbook Worker do Linux: versão 1.7.4.0

    Para verificar as versões:

    • Hybrid Runbook Worker no Windows: acesse o caminho de instalação C:\ProgramFiles\Microsoft Monitoring Agent\Agent\AzureAutomation\.. A pasta Automação do Azure contém uma subpasta que tem como nome o número de versão.
    • Hybrid Runbook Worker no Linux: acesse o caminho vi/opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/VERSION.. A VERSION do arquivo tem o número de versão do Hybrid Worker.
  • Para atribuir uma função do Azure, você precisa ter a permissão Microsoft.Authorization/roleAssignments/write, como Administrador de Acesso do Usuário ou Proprietário.

Habilitar uma identidade gerenciada atribuída pelo sistema para uma conta de Automação do Azure

Uma vez habilitada, as propriedades a seguir serão atribuídas à identidade gerenciada atribuída pelo sistema.

Propriedade (JSON) Valor Descrição
principalid <principal-ID> O GUID (identificador global exclusivo) do objeto de entidade de serviço para a identidade gerenciada atribuída pelo sistema que representa a conta de automação no locatário do Microsoft Entra. Esse GUID, às vezes, é exibido como uma "ID de objeto" ou objectID.
tenantid <Azure-AD-tenant-ID> O GUID (identificador global exclusivo) que representa o locatário do Microsoft Entra do qual a conta de automação agora é membro. No locatário do Microsoft Entra, a entidade de serviço tem o mesmo nome da conta de Automação.

Habilite uma identidade gerenciada atribuída pelo sistema a uma conta da Automação do Azure usando o portal do Azure, o PowerShell, a API REST do Azure ou o modelo do ARM. Para obter os exemplos que envolvem o PowerShell, primeiro, entre no Azure de modo interativo usando o cmdlet Connect-AzAccount e siga as instruções.

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

Em seguida, inicialize um conjunto de variáveis que serão usadas em todos os exemplos. Examine os valores abaixo e execute.

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

Importante

A nova identidade em nível de conta de Automação do Azure substitui as identidades atribuídas ao sistema em nível de VM anteriores que são descritas em Usar a autenticação de runbook com identidades gerenciadas. Se você estiver executando trabalhos híbridos nas VMs do Azure que usam a identidade atribuída ao sistema de uma VM para acessar os recursos de runbook, a identidade da conta de automação será usada para os trabalhos híbridos. Isso significa que a execução de trabalho existente pode ser afetada, se você estiver usando o recurso CMK (chaves gerenciadas pelo cliente) da conta de automação.

Se você quiser continuar usando a identidade gerenciada da VM, não deve habilitar a identidade em nível de conta de automação. Se você já habilitou, pode desabilitar a identidade gerenciada atribuída pelo sistema da conta de automação. Confira Desabilitar a identidade gerenciada da conta de Automação do Azure.

Habilitar usando o Portal do Azure

Execute as etapas a seguir:

  1. Entre no portal do Azure.

  2. No portal do Azure, abra sua Conta de Automação.

  3. Em Configurações da Conta, selecione Identidade.

  4. Defina a opção Atribuída ao sistema como Ativada e pressione Salvar. Quando você for solicitado a confirmar, selecione Sim.

    Como habilitar a identidade atribuída ao sistema no portal do Azure.

    Sua conta de automação agora pode usar a identidade atribuída pelo sistema, que está registrada com o Microsoft Entra ID e é representada por uma ID de objeto.

    ID de objeto da identidade gerenciada.

Habilitar uso do PowerShell

Use o cmdlet Set-AzAutomationAccount do PowerShell para habilitar a identidade gerenciada atribuída pelo sistema.

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

$output

O resultado deve ser semelhante ao seguinte:

Saída do comando set-azautomationaccount.

Para obter uma saída adicional, modifique o exemplo para especificar: $output.identity | ConvertTo-Json.

Habilitar por meio de uma API REST

A sintaxe e as etapas de exemplo são fornecidas abaixo.

Sintaxe

A sintaxe de corpo abaixo habilita uma identidade gerenciada atribuída pelo sistema a uma conta de Automação existente usando o método HTTP PATCH. No entanto, essa sintaxe removerá todas as identidades gerenciadas atribuídas pelo usuário existentes associadas à conta de Automação.

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

Se houver várias identidades atribuídas pelo usuário definidas, para retê-las e remover apenas a identidade atribuída pelo sistema, você precisará especificar cada identidade atribuída pelo usuário usando a lista delimitada por vírgulas. O exemplo a seguir usa o método 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": {}
    }
  }
}

A sintaxe da API é a seguinte:

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

Exemplo

Execute as etapas a seguir.

  1. Copie e cole a sintaxe de corpo em um arquivo chamado body_sa.json. Salve o arquivo no seu computador local ou em uma conta de armazenamento do Azure.

  2. Atualize o valor da variável abaixo e execute-a.

    $file = "path\body_sa.json"
    
  3. Este exemplo usa o cmdlet Invoke-RestMethod do PowerShell para enviar a solicitação PATCH à conta de Automação.

    # 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
    

    O resultado deve ser semelhante ao seguinte:

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

Habilitar usando um modelo do ARM

A sintaxe e as etapas de exemplo são fornecidas abaixo.

Sintaxe do modelo

A sintaxe de modelo de exemplo abaixo habilita uma identidade gerenciada atribuída pelo sistema à conta de Automação existente. No entanto, essa sintaxe removerá todas as identidades gerenciadas atribuídas pelo usuário existentes associadas à conta de Automação.

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

Exemplo

Execute as etapas a seguir.

  1. Revise a sintaxe do modelo acima para usar sua conta de Automação, e salve-a em um arquivo chamado template_sa.json.

  2. Atualize o valor da variável abaixo e execute-a.

    $templateFile = "path\template_sa.json"
    
  3. Use o cmdlet New-AzResourceGroupDeployment do PowerShell para implantar o modelo.

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

    O comando não produzirá uma saída; no entanto, você poderá usar o código abaixo para verificar isso:

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

    A saída será semelhante à saída mostrada para o exemplo da API REST, acima.

Atribuir uma função a uma identidade gerenciada atribuída pelo sistema

Uma conta de automação pode usar a identidade gerenciada atribuída pelo sistema para obter tokens que acessam outros recursos protegidos pelo Microsoft Entra ID, como o Cofre de Chaves do Azure. Esses tokens não representam nenhum usuário específico do aplicativo. Em vez disso, eles representam o aplicativo que está acessando o recurso. Nesse caso, por exemplo, o token representa uma conta de automação.

Para usar a identidade gerenciada atribuída ao sistema para autenticação, configure o acesso para essa identidade no recurso do Azure em que você planeja usar a identidade. Para concluir essa tarefa, atribua a função apropriada a essa identidade no recurso do Azure de destino.

Siga a entidade de segurança de privilégios mínimos e atribua cuidadosamente as permissões necessárias apenas para executar o runbook. Por exemplo, se a conta de Automação for necessária apenas para iniciar ou parar uma VM do Azure, as permissões atribuídas à conta Executar como ou à identidade gerenciada precisarão ser apenas para iniciar ou parar a VM. Da mesma forma, se um runbook estiver lendo do armazenamento de blob, atribua permissões somente leitura.

O exemplo a seguir usa o Azure PowerShell para mostrar como atribuir a função Colaborador na assinatura ao recurso de destino do Azure. A função Colaborador é usada como exemplo e pode ou não ser necessária no seu caso.

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

Verificar a atribuição de função para uma identidade gerenciada pelo sistema

Para verificar uma função para uma identidade gerenciada atribuída pelo sistema da conta de Automação, siga estas etapas:

  1. Entre no portal do Azure.

  2. Vá para sua conta de Automação.

  3. Em Configurações da Conta, selecione Identidade.

    Atribuição de função na identidade atribuída pelo sistema no portal do Azure.

  4. Em Permissões, clique em Atribuições de função do Azure.

    Se as funções já estiverem atribuídas à identidade gerenciada atribuída pelo sistema selecionada, você verá uma lista de atribuições de função. Essa lista inclui todas as atribuições de função que você tem permissão para ler.

    Exibir as atribuições de função às quais você tem permissão no portal do Azure.

  5. Para alterar a assinatura, clique na lista suspensa Assinatura e selecione a assinatura apropriada.

  6. Clique em Adicionar uma atribuição de função (versão prévia)

  7. Na lista suspensa, entre as seguintes opções, selecione o conjunto de recursos ao qual a atribuição de função se aplica: Assinatura, Grupo de recursos, Função e Escopo.
    Se você não tiver a atribuição de função, poderá exibir as permissões de gravação para o escopo selecionado como uma mensagem embutida.

  8. Na lista suspensa Função, selecione uma função, por exemplo, Colaborador da Máquina Virtual.

  9. Clique em Save (Salvar).

    Adicionar uma atribuição de função no portal do Azure.

Após alguns minutos, a identidade gerenciada é atribuída à função no escopo selecionado.

Autenticar o acesso com a identidade gerenciada atribuída pelo sistema

Depois de habilitar a identidade gerenciada para a conta de automação e conceder acesso de identidade ao recurso de destino, você pode especificar essa identidade nos runbooks em relação aos recursos compatíveis com a identidade gerenciada. Para obter suporte de identidade, use o cmdlet Connect-AzAccount do cmdlet AZ. Confira Connect-AzAccount na referência do 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

Observação

Se sua organização ainda estiver usando os cmdlets preteridos do AzureRM, você pode usar o Connect-AzureRMAccount -Identity.

Gerar um token de acesso sem usar os cmdlets do Azure

Para pontos de extremidade HTTP, verifique o seguinte.

  • O cabeçalho de metadados precisa estar presente e ser definido como "true".
  • Um recurso deve ser passado junto com a solicitação, como parâmetro de consulta para uma solicitação GET e como dados de formulário para uma solicitação POST.
  • Defina o valor da variável de ambiente IDENTITY_HEADER como X-IDENTITY-HEADER.
  • O tipo de conteúdo da solicitação POST deve ser 'application/x-www-form-urlencoded'.

Obter token de acesso para a identidade gerenciada atribuída pelo sistema usando 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

Obter token de acesso para a identidade atribuída pelo sistema usando 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

Como usar uma identidade gerenciada atribuída pelo sistema para acessar o Azure Key Vault no Azure PowerShell

Para obter mais informações, consulte 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) 
}

Como usar a identidade gerenciada atribuída pelo sistema em um runbook do 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) 

Como usar a identidade gerenciada atribuída pelo sistema para Acessar o Banco de Dados SQL

Para obter detalhes sobre como provisionar o acesso a um banco de dados SQL do Azure, consulte Provisionar um administrador do Microsoft Entra (Banco de Dados SQL).

$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()

Migrar de contas Executar como existentes para identidade gerenciada

A Automação do Azure fornece autenticação para gerenciar recursos do Azure Resource Manager ou recursos implantados no modelo de implantação clássico com a conta Executar como. Para alternar de uma conta Executar como para uma identidade gerenciada para a autenticação de runbook, siga as etapas abaixo.

  1. Habilitar uma identidade gerenciada atribuída pelo sistema, atribuída pelo usuário ou os dois tipos.

  2. Conceda à identidade gerenciada os mesmos privilégios aos recursos do Azure que correspondem ao que a conta Executar como foi atribuída.

  3. Atualize seus runbooks para autenticar usando a identidade gerenciada.

  4. Modifique os Runbooks para usar a identidade gerenciada. Para obter suporte de identidade, use o cmdlet Connect-AzAccount do cmdlet AZ. Confira Connect-AzAccount na referência do PowerShell.

    • Se você estiver usando módulos do AzureRM, atualize AzureRM.Profile para a versão mais recente e substitua usando o cmdlet Add-AzureRMAccount por Connect-AzureRMAccount –Identity.
    • Se você estiver usando os módulos do Az, atualize para a versão mais recente seguindo as etapas no artigo Atualizar módulos do Azure PowerShell.

Próximas etapas