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
Otomasyon Hesabı için bir Yönetilen Kimlik (Sistem veya Kullanıcı tarafından atanmış) oluşturulduğunda Karma Runbook Çalışanı üzerinde Kullanıcı Tarafından Atanan 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. (Bkz. Bu sürümle ilgili ayrıntılar için 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 Kullanıcı Erişim Yöneticisi veya Sahip gibi izinlere sahip
Microsoft.Authorization/roleAssignments/write
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 bir dizi değişken başlatı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:
Azure Portal’ında oturum açın.
Azure portalında Otomasyon hesabınıza gidin.
Hesap Ayarları altında Kimlik'i seçin.
Kullanıcı tarafından atanan sekmesini ve ardından Ekle'yi seçin.
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.
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:
Ek çıkış için şunu yürütür: $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.
PATCH
{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/firstIdentity": {},
"/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/resource-group-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/secondIdentity": {}
}
}
}
API'nin sözdizimi aşağıdaki gibidir:
https://management.azure.com/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/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.
Yukarıdaki gövdenin söz dizimini adlı
body_ua.json
bir dosyada düzeltin. Dosyayı yerel makinenize veya bir Azure depolama hesabına kaydedin.Aşağıdaki değişken değerini düzeltin ve yürütür.
$file = "path\body_ua.json"
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": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "tenantId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "userAssignedIdentities": { "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI1": { "PrincipalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444" }, "/subscriptions/ContosoID/resourcegroups/ContosoLab/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ContosoUAMI2": { "PrincipalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "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.
Şablonu kopyalayıp adlı
template_ua.json
bir dosyaya yapıştırın. Dosyayı yerel makinenize veya bir Azure depolama hesabına kaydedin.Aşağıdaki değişken değerini düzeltin ve yürütür.
$templateFile = "path\template_ua.json"
Ş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.
Kullanıcı tarafından atanan yönetilen kimliğe rol atama
Otomasyon hesabı, Azure Key Vault gibi Microsoft Entra ID tarafından korunan diğer kaynaklara erişmek için belirteçleri almak için kullanıcı tarafından atanan yönetilen kimliğini kullanabilir. 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 sorumlusunu izleyin ve yalnızca runbook'unuzu yürütmek için gereken izinleri dikkatli bir şekilde 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, runbook blob storage’dan okuyorsa, salt okunur izinler atayın.
Bu örnek, abonelikteki Katkıda Bulunan rolünün hedef Azure kaynağına nasıl atanacaklarını göstermek için Azure PowerShell'i kullanır. Katkıda Bulunan rolü örnek olarak kullanılır ve sizin örneğinizde 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 rol doğrulamak için şu adımları izleyin:
Azure Portal’ında oturum açın.
Otomasyon hesabınıza gidin.
Hesap Ayarları bölümünde Kimlik, Kullanıcı tarafından atanan seçeneğini belirleyin.
Kullanıcı tarafından atanan kimlik adı seçeneğine tıklayın.
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 izninizin olduğu tüm rol atamalarını içerir.
Aboneliği değiştirmek için Abonelik açılan listesine tıklayın ve uygun aboneliği seçin.
Rol ataması ekle (Önizleme) seçeneğine tıklayın
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.Rol açılan listesinde Sanal Makine Katkıda Bulunanı olarak bir rol seçin.
Kaydet'e tıklayın.
Rol birkaç dakika sonra yönetilen kimliğe seçilen kapsamda atanır.
Kullanıcı tarafından atanan yönetilen kimlikle erişimin kimliğini doğrulama
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.
- Kaynak istekle birlikte, GET isteği için sorgu parametresi olarak ve POST isteği için form verileri olarak geçirilmelidir.
- 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 kullanarak kullanıcı tarafından atanan yönetilen kimlik için Erişim belirteci alma
$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 kullanarak 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
Runbook'larınız başarıyla tamamlanmamışsa yönetilen kimlik sorunlarını giderme Azure Otomasyonu gözden geçirin.
Yönetilen kimliği devre dışı bırakmanız gerekiyorsa bkz. Azure Otomasyonu hesabı yönetilen kimliğinizi devre dışı bırakma.
Azure Otomasyonu hesap güvenliğine genel bakış için bkz. Otomasyon hesabı kimlik doğrulamasına genel bakış.