Aracılığıyla paylaş


Azure Otomasyonu hesabı için kullanıcı tarafından atanan yönetilen kimlik kullanma

Bu makalede, bir Azure Otomasyonu hesabı için kullanıcı tarafından atanan yönetilen kimliğin nasıl ekleneceği ve diğer kaynaklara erişmek için nasıl kullanılacağı gösterilmektedir. Yönetilen kimliklerin Azure Otomasyonu ile nasıl çalıştığı hakkında daha fazla bilgi için bkz. Yönetilen kimlikler.

Not

Bir Otomasyon Hesabı için bir Yönetilen Kimlik (Sistem ya da Kullanıcı Atamalı) oluşturulduğunda bir Hibrit Runbook Çalışanı üzerinde Kullanıcı Atamalı Yönetilen Kimlik kullanmak mümkün değildir. Yönetilen Kimlik Otomasyon Hesabına atanmamışsa, vm'nin Sistem veya Kullanıcı Tarafından Atanan Yönetilen Kimliğini atanan yönetilen kimliklere sahip bir Azure VM olan Karma Runbook Çalışanı üzerinde kullanmak mümkündür.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

  • Azure Otomasyonu hesabı. Yönergeler için bkz. Azure Otomasyonu hesabı oluşturma.

  • Kullanıcı tarafından atanan yönetilen kimlik ve runbook'unuzun bu kimliği kullanarak yönettiği hedef Azure kaynakları farklı Azure aboneliklerinde olabilir.

  • Azure Hesabı modüllerinin en son sürümü. Şu anda bu 2.2.8'dir. (Bu sürümle ilgili ayrıntılar için bkz . Az.Accounts .)

  • Otomasyon runbook'unuzdan erişmek istediğiniz bir Azure kaynağı. Bu kaynağın kullanıcı tarafından atanan yönetilen kimlik için tanımlanmış bir rolü olması gerekir. Bu rol, Otomasyon runbook'unun kaynağa erişirken kimliğini doğrulamasına yardımcı olur. Rol eklemek için ilgili Microsoft Entra kiracısında kaynağın sahibi olmanız gerekir.

  • Azure rolü atamak için Microsoft.Authorization/roleAssignments/write veya Sahip gibi izinlere sahip olmanız gerekir.

Azure Otomasyonu hesabı için kullanıcı tarafından atanan yönetilen kimlik ekleme

Azure portalını, PowerShell'i, Azure REST API'sini veya ARM şablonunu kullanarak Azure Otomasyonu hesabı için kullanıcı tarafından atanan yönetilen kimlik ekleyebilirsiniz. PowerShell ile ilgili örnekler için önce Connect-AzAccount cmdlet'ini kullanarak Azure'da etkileşimli olarak oturum açın ve yönergeleri izleyin.

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

Ardından, örnekler boyunca kullanılacak birkaç değişken tanımlayın. Aşağıdaki değerleri düzeltin ve ardından yürütebilirsiniz"

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

Azure portalını kullanarak ekleme

Aşağıdaki adımları gerçekleştirin:

  1. Azure portalında oturum açın.

  2. Azure portalında Otomasyon hesabınıza gidin.

  3. Hesap Ayarları'nın altında Kimlik'i seçin.

  4. Kullanıcı tarafından atanan sekmesini ve ardından Ekle'yi seçin.

  5. Kullanıcı tarafından atanan mevcut yönetilen kimliğinizi ve ardından Ekle'yi seçin. Ardından Kullanıcı tarafından atanan sekmesine geri dönersiniz.

    Portal çıkışı.

PowerShell kullanarak ekleme

Kullanıcı tarafından atanan yönetilen kimlikleri eklemek için Set-AzAutomationAccount PowerShell cmdlet'ini kullanın. Öncelikle sistem tarafından atanan mevcut bir yönetilen kimlik olup olmadığını göz önünde bulundurmanız gerekir. Aşağıdaki örnek, mevcut bir otomasyon hesabına mevcut kullanıcı tarafından atanan iki yönetilen kimlik ekler ve varsa sistem tarafından atanan yönetilen kimliği devre dışı bırakır.

$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

Sistem tarafından atanan mevcut bir yönetilen kimliği korumak için aşağıdakileri kullanın:

$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

Çıkış aşağıdakine benzer görünmelidir:

Set-AzAutomationAccount komutundan çıktı.

Ek çıktı için şunu çalıştırın: $output.identity | ConvertTo-Json.

REST API kullanarak ekleme

Söz dizimi ve örnek adımlar aşağıda verilmiştır.

Sözdizimi

Aşağıdaki örnek gövde söz dizimi, henüz etkinleştirilmemişse sistem tarafından atanan yönetilen kimliği etkinleştirir ve mevcut Otomasyon hesabına mevcut kullanıcı tarafından atanan iki yönetilen kimlik atar.

YAMA

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

API'nin sözdizimi aşağıdaki gibidir:

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 

Örnek

Aşağıdaki adımları gerçekleştirin.

  1. Yukarıdaki gövdenin söz dizimini body_ua.json adlı bir dosyada düzeltin. Dosyayı yerel makinenize veya bir Azure depolama hesabına kaydedin.

  2. Aşağıdaki değişken değerini düzenleyin ve çalıştırın.

    $file = "path\body_ua.json"
    
  3. Bu örnekte, Patch isteğini Otomasyon hesabınıza göndermek için Invoke-RestMethod PowerShell cmdlet'i kullanılır.

    # 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
    

    Çıkış aşağıdakine benzer görünmelidir:

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

ARM şablonu kullanarak ekleme

Söz dizimi ve örnek adımlar aşağıda verilmiştır.

Şablon söz dizimi

Aşağıdaki örnek şablon söz dizimi, henüz etkinleştirilmemişse sistem tarafından atanan yönetilen kimliği etkinleştirir ve mevcut Otomasyon hesabına mevcut kullanıcı tarafından atanan iki yönetilen kimlik atar.

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

Örnek

Aşağıdaki adımları gerçekleştirin.

  1. Şablonu kopyalayıp adlı template_ua.jsonbir dosyaya yapıştırın. Dosyayı yerel makinenize veya bir Azure depolama hesabına kaydedin.

  2. Aşağıdaki değişken değerini düzenleyin ve çalıştırın.

    $templateFile = "path\template_ua.json"
    
  3. Şablonu dağıtmak için New-AzResourceGroupDeployment PowerShell cmdlet'ini kullanın.

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

    Komut bir çıkış oluşturmaz; ancak aşağıdaki kodu kullanarak şunları doğrulayabilirsiniz:

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

    Çıktı, yukarıdaki REST API örneği için gösterilen çıkışa benzer olacaktır.

Bir kullanıcı tarafından atanan yönetilen kimliğe rol atayın

Otomasyon hesabı, kullanıcı tarafından atanan yönetilen kimliğini kullanarak Microsoft Entra ID tarafından korunan Azure Key Vault gibi diğer kaynaklara erişim için belirteçler alabilir. Bu belirteçler uygulamanın belirli bir kullanıcısını temsil etmez. Bunun yerine, kaynağa erişen uygulamayı temsil ederler. Bu durumda, örneğin belirteç bir Otomasyon hesabını temsil eder.

Kimlik doğrulaması için kullanıcı tarafından atanan yönetilen kimliğinizi kullanabilmeniz için önce, kimliği kullanmayı planladığınız Azure kaynağında bu kimliğe erişim ayarlayın. Bu görevi tamamlamak için hedef Azure kaynağında bu kimliğe uygun rolü atayın.

En az ayrıcalık ilkesini izleyin ve yalnızca çalışma kitabınızı yürütmek için gereken izinleri dikkatlice atayın. Örneğin, Otomasyon hesabının yalnızca bir Azure VM’i başlatmak veya durdurmak için gerekli olması durumunda, Farklı Çalıştır hesabına veya yönetilen kimliğe atanan izinlerin yalnızca VM’i başlatmak veya durdurmak için olması gerekir. Benzer şekilde, bir runbook blob storage'dan sürekli okuma yapıyorsa, salt okunur izinler atayın.

Bu örnek, Azure PowerShell'i kullanarak abonelikteki Katkıda Bulunan rolünün hedef Azure kaynağına nasıl atanacağını gösterir. Katılımcı rolü örnek olarak kullanılır ve sizin durumunuzda gerekli olabilir veya olmayabilir. Alternatif olarak, rolü Azure portalında hedef Azure kaynağına da atayabilirsiniz.

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

Kullanıcı tarafından yönetilen kimliğe rol atamasını doğrulama

Otomasyon hesabının kullanıcı tarafından atanan yönetilen kimliğine sahip bir rolü doğrulamak için şu adımları izleyin:

  1. Azure portalında oturum açın.

  2. Otomasyon hesabınıza gidin.

  3. Hesap Ayarları'nın altında Kimlik, Kullanıcı atanmış'ı seçin.

  4. Kullanıcı tarafından atanan kimlik adı'ne tıklayın.

    Azure portalında kullanıcı tarafından atanan kimlikte rol atama.

    Roller seçili kullanıcı tarafından atanan yönetilen kimliğe zaten atanmışsa rol atamalarının listesini görebilirsiniz. Bu liste, okuma iznine sahip olduğunuz tüm rol atamalarını içerir.

    Azure portalında izniniz olan rol atamalarını görüntüleyin.

  5. Aboneliği değiştirmek için Abonelik açılan listesine tıklayın ve uygun aboneliği seçin.

  6. Rol ataması ekle (Önizleme) seçeneğine tıklayın

  7. Açılan listede rol atamasının uyguladığı kaynak kümesini seçin: Abonelik, Kaynak grubu, Rol ve Kapsam.
    Rol atamanız yoksa, seçili kapsamın yazma izinlerini satır içi ileti olarak görüntüleyebilirsiniz.

  8. Rol açılır listesinden Sanal Makine Katkıda Bulunan olarak bir rol seçin.

  9. Kaydet'e tıklayın.

    Azure portalında rol ataması ekleyin.

Birkaç dakika içinde seçilen kapsamda yönetilen kimliğe rol atanır.

Kullanıcı tarafından atanmış yönetilen kimlikle erişimi kimlik doğrulamayla doğrula

Otomasyon hesabınız için kullanıcı tarafından atanan yönetilen kimliği etkinleştirdikten ve hedef kaynağa bir kimlik erişimi verdikten sonra, yönetilen kimliği destekleyen kaynaklara karşı runbook'larda bu kimliği belirtebilirsiniz. Kimlik desteği için Az cmdlet Connect-AzAccount kullanın.

# 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

Azure cmdlet'lerini kullanmadan erişim belirteci oluşturma

HTTP Uç Noktaları için aşağıdakilerden emin olun.

  • Meta veri üst bilgisi mevcut olmalı ve "true" olarak ayarlanmalıdır.
  • Bir kaynak, GET isteği için sorgu parametresi ve POST isteği için form verisi olarak, istekle birlikte gönderilmelidir.
  • IDENTITY_HEADER ortam değişkeninin değerini X-IDENTITY-HEADER olarak ayarlayın.
  • Gönderi isteğinin İçerik Türü olmalıdır application/x-www-form-urlencoded.

HTTP GET isteği kullanarak kullanıcı tarafından atanan yönetilen kimlik için erişim belirteci al

$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 

HTTP Post ile kullanıcı tarafından atanan yönetilen kimlik için erişim belirteci alma

$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 

Azure PowerShell'de kullanıcı tarafından atanan yönetilen kimliği kullanma

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

Python Runbook'ta kullanıcı tarafından atanan yönetilen kimliği kullanma

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

Sonraki adımlar