Share via


Using a user-assigned managed identity for an Azure Automation account

Ez a cikk bemutatja, hogyan vehet fel felhasználó által hozzárendelt felügyelt identitást egy Azure Automation-fiókhoz, és hogyan használhatja azt más erőforrások eléréséhez. A felügyelt identitások Azure Automation-beli működésével kapcsolatos további információkért lásd: Felügyelt identitások.

Megjegyzés:

Nem használható felhasználó által hozzárendelt felügyelt identitás hibrid runbook-feldolgozón, ha az Automation-fiókhoz létrehozott egy felügyelt identitást (rendszer vagy felhasználó által hozzárendelt). Ha a felügyelt identitás nincs hozzárendelve az Automation-fiókhoz, akkor a virtuális gép rendszer- vagy felhasználó által hozzárendelt felügyelt identitását használhatja egy hibrid runbook-feldolgozón, amely egy Azure-beli virtuális gép a hozzárendelt felügyelt identitásokkal.

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Előfeltételek

  • Egy Azure Automation-fiókra. Útmutatásért lásd : Azure Automation-fiók létrehozása.

  • A felhasználó által hozzárendelt felügyelt identitás és a runbook által az identitás használatával kezelt cél Azure-erőforrások különböző Azure-előfizetésekben lehetnek.

  • Az Azure-fiókmodulok legújabb verziója. Jelenleg ez a 2.2.8. (Lásd: Az.Accounts a verzióval kapcsolatos részletekért.)

  • Egy Azure-erőforrás, amelyet az Automation-runbookból szeretne elérni. Ennek az erőforrásnak rendelkeznie kell egy szerepkörrel a felhasználó által hozzárendelt felügyelt identitáshoz, amely segít az Automation runbooknak hitelesíteni az erőforráshoz való hozzáférést. Szerepkörök hozzáadásához az erőforrás tulajdonosának kell lennie a megfelelő Microsoft Entra-bérlőben.

  • Azure-szerepkör hozzárendeléséhez rendelkeznie Microsoft.Authorization/roleAssignments/write kell engedélyekkel, például felhasználói hozzáféréssel Rendszergazda istrator vagy tulajdonos.

Felhasználó által hozzárendelt felügyelt identitás hozzáadása az Azure Automation-fiókhoz

Az Azure Automation-fiókhoz felhasználó által hozzárendelt felügyelt identitást az Azure Portal, a PowerShell, az Azure REST API vagy az ARM-sablon használatával vehet fel. A PowerShellt érintő példákhoz először jelentkezzen be interaktívan az Azure-ba az Csatlakozás-AzAccount parancsmag használatával, és kövesse az utasításokat.

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

Ezután inicializálja a példák során használt változók készletét. Módosítsa az alábbi értékeket, majd hajtsa végre"

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

Hozzáadás az Azure Portal használatával

Hajtsa végre a következő lépéseket:

  1. Jelentkezzen be az Azure Portalra.

  2. Az Azure Portalon lépjen az Automation-fiókjához.

  3. A Fiókbeállítások területen válassza az Identitás lehetőséget.

  4. Válassza a Felhasználó által hozzárendelt lapot, majd válassza a Hozzáadás lehetőséget.

  5. Válassza ki a meglévő felhasználó által hozzárendelt felügyelt identitást, majd válassza a Hozzáadás lehetőséget. Ezután visszakerül a Felhasználó által hozzárendelt lapra.

    Output from Portal.

Hozzáadás a PowerShell használatával

A Felhasználó által hozzárendelt felügyelt identitások hozzáadásához használja a Set-AzAutomationAccount PowerShell-parancsmagot. Először meg kell fontolnia, hogy létezik-e már rendszer által hozzárendelt felügyelt identitás. Az alábbi példa két meglévő felhasználó által hozzárendelt felügyelt identitást ad hozzá egy meglévő Automation-fiókhoz, és letiltja a rendszer által hozzárendelt felügyelt identitást, ha létezik.

$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

Meglévő rendszer által hozzárendelt felügyelt identitás megőrzéséhez használja a következőket:

$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

A kimenetnek a következőképpen kell kinéznie:

Output from Set-AzAutomationAccount command.

További kimenet esetén hajtsa végre a következőt: $output.identity | ConvertTo-Json.

Hozzáadás REST API használatával

A szintaxis és a példalépések az alábbiakban találhatók.

Syntax

Az alábbi mintatörzs szintaxisa lehetővé teszi a rendszer által hozzárendelt felügyelt identitást, ha még nincs engedélyezve, és két meglévő, felhasználó által hozzárendelt felügyelt identitást rendel a meglévő Automation-fiókhoz.

JAVÍTÁS

{
  "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": {}
    }
  }
}

Az API szintaxisa a következő:

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 

Example

Hajtsa végre a következő lépéseket.

  1. Módosítsa a fenti szövegtörzs szintaxisát egy elnevezett body_ua.jsonfájlba. Mentse a fájlt a helyi gépen vagy egy Azure Storage-fiókban.

  2. Módosítsa az alábbi változó értékét, majd hajtsa végre.

    $file = "path\body_ua.json"
    
  3. Ez a példa az Invoke-RestMethod PowerShell-parancsmaggal küldi el a PATCH-kérést az Automation-fióknak.

    # 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
    

    A kimenetnek a következőképpen kell kinéznie:

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

Hozzáadás ARM-sablonnal

A szintaxis és a példalépések az alábbiakban találhatók.

Sablonszintaxis

Az alábbi mintasablon szintaxisa lehetővé teszi a rendszer által hozzárendelt felügyelt identitások használatát, ha még nincs engedélyezve, és két meglévő felhasználó által hozzárendelt felügyelt identitást rendel a meglévő Automation-fiókhoz.

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

Example

Hajtsa végre a következő lépéseket.

  1. Másolja és illessze be a sablont egy nevű template_ua.jsonfájlba. Mentse a fájlt a helyi gépen vagy egy Azure Storage-fiókban.

  2. Módosítsa az alábbi változó értékét, majd hajtsa végre.

    $templateFile = "path\template_ua.json"
    
  3. A sablon üzembe helyezéséhez használja a New-AzResourceGroupDeployment PowerShell-parancsmagot.

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

    A parancs nem hoz létre kimenetet; azonban az alábbi kóddal ellenőrizheti:

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

    A kimenet a fenti REST API-példában látható kimenethez hasonlóan fog kinézni.

Szerepkör hozzárendelése felhasználó által hozzárendelt felügyelt identitáshoz

Az Automation-fiókok a felhasználó által hozzárendelt felügyelt identitással jogkivonatokat szerezhetnek be a Microsoft Entra ID által védett egyéb erőforrások, például az Azure Key Vault eléréséhez. Ezek a tokenek nem képviselik az alkalmazás adott felhasználóit. Ehelyett az erőforrást elérő alkalmazást képviselik. Ebben az esetben például a token egy Automation-fiókot képvisel.

Ahhoz, hogy használhassa a felhasználó által hozzárendelt felügyelt identitást a hitelesítéshez, állítsa be az identitáshoz való hozzáférést azon az Azure-erőforráson, ahol az identitást használni szeretné. A feladat elvégzéséhez rendelje hozzá a megfelelő szerepkört az identitáshoz a cél Azure-erőforráson.

Kövesse a legalacsonyabb jogosultsági szint elvét, és ügyeljen arra, hogy csak a runbook végrehajtásához szükséges engedélyeket rendelje hozzá. Ha az Automation-fiókra például csak egy Azure-beli virtuális gép elindításához vagy leállításához van szükség, akkor a futtató fiókhoz vagy felügyelt identitáshoz rendelt engedélyeknek csak a virtuális gép elindítására vagy leállítására kell vonatkozniuk. Hasonlóképpen, ha egy runbook a Blob Storage-ból olvas, akkor csak olvasási engedélyeket rendeljen hozzá.

Ez a példa az Azure PowerShell használatával mutatja be, hogyan rendelheti hozzá az előfizetés közreműködői szerepkörét a cél Azure-erőforráshoz. A közreműködői szerepkört példaként használjuk, és előfordulhat, hogy az Ön esetében nem szükséges. Másik lehetőségként hozzárendelheti a szerepkört a cél Azure-erőforráshoz az Azure Portalon.

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

Szerepkör-hozzárendelés ellenőrzése felhasználó által felügyelt identitáshoz

Ha ellenőrizni szeretné az Automation-fiók egyik felhasználó által hozzárendelt felügyelt identitásának szerepkörét, kövesse az alábbi lépéseket:

  1. Jelentkezzen be az Azure Portalra.

  2. Lépjen az Automation-fiókhoz.

  3. A Fiók Gépház területen válassza az Identitás, Felhasználó hozzárendelve lehetőséget.

  4. Kattintson a Felhasználó által hozzárendelt identitás nevére.

    Assigning role in user-assigned identity in Azure portal.

    Ha a szerepkörök már hozzá vannak rendelve a kiválasztott, felhasználó által hozzárendelt felügyelt identitáshoz, láthatja a szerepkör-hozzárendelések listáját. Ez a lista az összes olyan szerepkör-hozzárendelést tartalmazza, amelyekhez olvasási engedéllyel rendelkezik.

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

  5. Az előfizetés módosításához kattintson az Előfizetés legördülő listára, és válassza ki a megfelelő előfizetést.

  6. Kattintson a Szerepkör-hozzárendelés hozzáadása (előzetes verzió) elemre

  7. A legördülő listában válassza ki azokat az erőforrásokat, amelyekre a szerepkör-hozzárendelés vonatkozik – előfizetés, erőforráscsoport, szerepkör és hatókör.
    Ha nem rendelkezik szerepkör-hozzárendeléssel, a kijelölt hatókör írási engedélyeit beágyazott üzenetként tekintheti meg.

  8. A Szerepkör legördülő listában válasszon ki egy szerepkört virtuálisgép-közreműködőként.

  9. Kattintson a Mentés gombra.

    Add a role assignment in Azure portal.

Néhány perc elteltével a felügyelt identitás hozzárendeli a szerepkört a kiválasztott hatókörhöz.

Hozzáférés hitelesítése felhasználó által hozzárendelt felügyelt identitással

Miután engedélyezte az Automation-fiók felhasználó által hozzárendelt felügyelt identitását, és hozzáférést adott egy identitásnak a célerőforráshoz, a runbookokban megadhatja ezt az identitást a felügyelt identitást támogató erőforrásokhoz. Az identitás támogatásához használja a Connect-AzAccount Az parancsmagot.

# 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

Hozzáférési jogkivonat létrehozása Azure-parancsmagok használata nélkül

HTTP-végpontok esetén győződjön meg a következőkről.

  • A metaadat-fejlécnek jelen kell lennie, és "igaz" értékre kell állítania.
  • Egy erőforrást a kéréssel együtt kell átadni a GET-kérés lekérdezési paramétereként és a POST-kérés űrlapadataiként.
  • Állítsa a IDENTITY_HEADER környezeti változó értékét X-IDENTITY-HEADER értékre.
  • A Post kérelem tartalomtípusának meg kell lennie application/x-www-form-urlencoded.

Hozzáférési jogkivonat lekérése felhasználó által hozzárendelt felügyelt identitáshoz a HTTP Get használatával

$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 

Hozzáférési jogkivonat lekérése felhasználó által hozzárendelt felügyelt identitáshoz a HTTP Post használatával

$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 

Felhasználó által hozzárendelt felügyelt identitás használata az Azure PowerShellben

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)  
} 

Felhasználó által hozzárendelt felügyelt identitás használata a Python Runbookban

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

Következő lépések