Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra-lhe como adicionar uma identidade gerida atribuída pelo utilizador para uma conta do Automatização do Azure e como usá-la para aceder a outros recursos. Para mais informações sobre como as identidades geridas funcionam com Automatização do Azure, consulte Identidades geridas.
Nota
Não é possível usar uma Identidade Gerenciada Atribuída pelo Usuário em um Runbook Worker Híbrido quando uma Identidade Gerenciada (Sistema ou Usuário atribuído) foi criada para a Conta de Automação. Se a Identidade Gerida não tiver sido atribuída à Conta de Automação, então é possível usar o Sistema da VM ou a Identidade Gerida Atribuída pelo Utilizador num Trabalhador Híbrido do Runbook que é uma VM Azure com as identidades geridas atribuídas.
Se não tiver uma subscrição Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Uma conta Automatização do Azure. Para instruções, veja Criar uma conta Automatização do Azure.
A identidade gerida atribuída pelo utilizador e os recursos alvo do Azure que o seu runbook gere usando essa identidade podem estar em diferentes subscrições do Azure.
A versão mais recente dos módulos da Conta Azure. Atualmente é 2.2.8. (Ver Az.Accounts para obter detalhes sobre esta versão.)
Um recurso do Azure ao qual queres aceder a partir do teu runbook de Automação. Este recurso precisa de ter uma função definida para a identidade gerida atribuída pelo utilizador, o que ajuda o runbook de Automatização a autenticar o acesso ao recurso. Para adicionar funções, é necessário ser proprietário do recurso no tenant correspondente do Microsoft Entra.
Para atribuir um papel de Azure, deve ter permissões
Microsoft.Authorization/roleAssignments/write, como User Access Administrator ou Owner.
Adicionar identidade gerida atribuída pelo utilizador para conta Automatização do Azure
Pode adicionar uma identidade gerida atribuída pelo utilizador para uma conta Automatização do Azure usando o portal Azure, PowerShell, a API Azure REST ou o modelo ARM. Para os exemplos que envolvem PowerShell, inicie primeiro sessão para Azure interativamente 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. Revise os valores abaixo e execute"
$subscriptionID = "subscriptionID"
$resourceGroup = "resourceGroupName"
$automationAccount = "automationAccountName"
$userAssignedOne = "userAssignedIdentityOne"
$userAssignedTwo = "userAssignedIdentityTwo"
Adicionar usando o portal Azure
Efetue os seguintes passos:
Inicie sessão no portal Azure.
No portal Azure, navegue até à sua conta de Automação.
Em Definições da Conta, selecione Identidade.
Selecione o separador Atribuído ao utilizador e, em seguida, selecione Adicionar.
Selecione sua identidade gerenciada atribuída pelo usuário existente e, em seguida, selecione Adicionar. Em seguida, será redirecionado para o separador Atribuído ao utilizador.
Adicionar usando o PowerShell
Utilize o cmdlet do PowerShell Set-AzAutomationAccount para adicionar as identidades geridas atribuídas pelo utilizador. Primeiro, deve considerar se há uma identidade gerida atribuída pelo sistema existente. O exemplo abaixo adiciona duas identidades geridas atribuídas pelo utilizador a uma conta de Automatização existente e desativará uma identidade gerida atribuída pelo sistema, se existir alguma.
$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
Para manter uma identidade gerida atribuída pelo sistema existente, utilize o seguinte:
$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
O resultado deve ser algo semelhante ao seguinte:
Para saída adicional, execute: $output.identity | ConvertTo-Json.
Adicionar usando uma API REST
A sintaxe e as etapas de exemplo são fornecidas abaixo.
Sintaxe
A sintaxe do corpo de exemplo abaixo habilita uma identidade gerenciada atribuída ao sistema, se ainda não estiver habilitada, e atribui duas identidades gerenciadas atribuídas pelo usuário à conta de automação existente.
CORREÇÃO
{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/00a000aa-00a0-00aa-00aa-0a0aa000aa00/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/firstIdentity": {},
"/subscriptions/00a000aa-00a0-00aa-00aa-0a0aa000aa00/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/secondIdentity": {}
}
}
}
A sintaxe da API é a seguinte:
https://management.azure.com/subscriptions/00a000aa-00a0-00aa-00aa-0a0aa000aa00/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview
Exemplo
Efetue os seguintes passos.
Revise a sintaxe do corpo acima em um arquivo chamado
body_ua.json. Guarde o ficheiro na sua máquina local ou numa conta de armazenamento Azure.Revise o valor da variável abaixo e execute.
$file = "path\body_ua.json"Este exemplo usa o cmdlet Invoke-RestMethod do PowerShell para enviar a solicitação PATCH para a sua conta de Automatizaçã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-JsonO resultado deve ser algo semelhante ao seguinte:
{ "type": "SystemAssigned, UserAssigned", "principalId": "00a000aa-00a0-00aa-00aa-0a0aa000aa00", "tenantId": "00a000aa-00a0-00aa-00aa-0a0aa000aa00", "userAssignedIdentities": { "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI1": { "PrincipalId": "00a000aa-00a0-00aa-00aa-0a0aa000aa00", "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444" }, "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI2": { "PrincipalId": "00a000aa-00a0-00aa-00aa-0a0aa000aa00", "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444" } } }
Adicionar usando um modelo 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 ao sistema, se ainda não estiver habilitada, e atribui duas identidades gerenciadas atribuídas pelo usuário existentes à conta de automação existente.
{
"$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": {}
}
}
}
]
}
Exemplo
Efetue os seguintes passos.
Copie e cole o modelo em um arquivo chamado
template_ua.json. Guarde o ficheiro na sua máquina local ou numa conta de armazenamento Azure.Revise o valor da variável abaixo e execute.
$templateFile = "path\template_ua.json"Utilize o cmdlet New-AzResourceGroupDeployment do PowerShell para implantar o modelo.
New-AzResourceGroupDeployment ` -Name "UserAssignedDeployment" ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile ` -automationAccountName $automationAccount ` -userAssignedOne $userAssignedOne ` -userAssignedTwo $userAssignedTwoO comando não produzirá uma saída; no entanto, você pode usar o código abaixo para verificar:
(Get-AzAutomationAccount ` -ResourceGroupName $resourceGroup ` -Name $automationAccount).Identity | ConvertTo-JsonA saída será semelhante à saída mostrada para o exemplo da API REST, acima.
Atribuir uma função a uma identidade gerida atribuída pelo utilizador
Uma conta de Automação pode usar a sua identidade gerida atribuída pelo utilizador para obter tokens e aceder a outros recursos protegidos pelo Microsoft Entra ID, como o Azure Key Vault. Estes tokens não representam nenhum utilizador específico da aplicação. Em vez disso, representam a aplicação que está a aceder ao recurso. Neste caso, por exemplo, o token representa uma conta de Automatização.
Antes de poderes usar a tua identidade gerida atribuída pelo utilizador para autenticação, configura o acesso dessa identidade no recurso Azure onde planeias usar a identidade. Para completar esta tarefa, atribui o papel apropriado a essa identidade no recurso Azure de destino.
Siga o princípio 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, então as permissões atribuídas à conta Run As ou à identidade gerida devem ser apenas para iniciar ou parar a VM. Da mesma forma, se um runbook estiver a ler a partir do armazenamento de blobs, atribua permissões só de leitura.
Este exemplo utiliza o Azure PowerShell para mostrar como atribuir o papel de Contribuinte na subscrição ao recurso Azure alvo. A função de Contribuidor é utilizada como exemplo e pode ou não ser necessária no seu caso. Alternativamente, também podes atribuir o papel ao recurso Azure alvo no portal Azure.
New-AzRoleAssignment `
-ObjectId <automation-Identity-object-id> `
-Scope "/subscriptions/<subscription-id>" `
-RoleDefinitionName "Contributor"
Verificar a atribuição de função a uma identidade gerenciada pelo usuário
Para verificar uma função atribuída a uma identidade gerida pelo utilizador da conta de automatização, siga estes passos:
Inicie sessão no portal Azure.
Aceda à sua conta de Automatização.
Em Definições da Conta, selecione Identidade, Atribuída pelo utilizador.
Clique em Nome da identidade atribuída pelo utilizador.
Pode ver uma lista de atribuições de funções se as funções já estiverem atribuídas à identidade gerida atribuída para o utilizador selecionado. Esta lista inclui todas as atribuições de funções que tem permissão para ler.
Para alterar a assinatura, clique na lista suspensa de Assinatura e selecione a assinatura apropriada.
Clique em Adicionar atribuição de função (Pré-visualização)
Na lista suspensa, selecione o conjunto de recursos ao qual a atribuição de função se aplica - Assinatura, Grupo de recursos, Função e Escopo.
Caso não tenhas a atribuição de função, poderás consultar as permissões de gravação para o escopo selecionado numa mensagem integrada.Na lista suspensa Função, selecione uma função como Colaborador de Máquina Virtual.
Clique em Guardar.
Após alguns minutos, a função é atribuída à identidade gerida no âmbito selecionado.
Autenticar o acesso com a identidade gerida atribuída pelo utilizador
Depois de ativar a identidade gerida atribuída pelo utilizador para a sua conta de Automatização e conceder acesso de identidade ao recurso de destino, pode especificar essa identidade nos runbooks em relação aos recursos que suportam a identidade gerida. Para obter o suporte de identidades, utilize o cmdlet 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
Gerar um token de acesso sem usar cmdlets do Azure
Para os pontos de extremidade HTTP, certifique-se do seguinte.
- O cabeçalho de metadados deve estar presente e deve ser definido como "true".
- Um recurso deve ser passado junto com a solicitação, como um 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 requisição POST deve ser
application/x-www-form-urlencoded.
Obter token de acesso para identidade gerenciada atribuída pelo usuário usando 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
Obter token de acesso para identidade gerenciada atribuída pelo usuário usando 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
Usar identidade gerida atribuída pelo utilizador no Azure PowerShell
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)
}
Usar identidade gerida atribuída pelo utilizador no Python Runbook
#!/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)
Próximos passos
Para resolver problemas relacionados com a identidade gerida atribuída pelo utilizador, veja Troubleshoot Automatização do Azure managed identity issues.
Se precisar de desativar uma identidade gerida, veja Desativar a identidade gerida da sua conta do Automatização do Azure.
Para obter uma visão geral da segurança das contas do Automatização do Azure, consulte Visão geral da autenticação de contas de automação.