Share via


Azure Otomasyonu'nda bağlam değiştirme

Bağlam değiştirme, bir işlemdeki bağlamın farklı bir işlemdeki bağlamı değiştirmesidir. Azure bağlamı, Azure PowerShell cmdlet’lerinin hedefini tanımlayan bilgiler kümesidir. Bağlam aşağıdaki özelliklerden oluşur:

Özellik Açıklama
Kuruluş adı Bağlamın adı.
Hesap Azure ile iletişimlerin kimliğini doğrulamak için kullanılan kullanıcı adı veya hizmet sorumlusu.
Ortam Azure genelini veya Azure Kamu gibi ulusal Azure bulutlarından birini temsil eder. Azure Stack gibi bir hibrit bulut platformu da belirtebilirsiniz.
Abonelik Yönetmek istediğiniz kaynakları içeren Azure aboneliğini temsil eder.
Kiracı Tek bir kuruluşu temsil eden ayrılmış ve güvenilir bir Microsoft Entra Id örneği.
Kimlik Bilgileri Azure tarafından kimliğinizi doğrulamak ve Azure'daki kaynaklara erişim yetkinizi onaylamak için kullanılan bilgiler.

Birkaç aboneliğe erişebilen bir hesap oturum açtığında, bu aboneliklerden herhangi biri kullanıcının bağlamlarına eklenebilir. Doğru aboneliği garanti etmek için bağlanırken bunu bildirmeniz gerekir. Örneğin, kullanın Add-AzAccount -Credential $Cred -subscription 'cd4dxxxx-xxxx-xxxx-xxxx-xxxxxxxx9749'. Ancak, bir aboneliği yöneten runbook'larınız, aynı Otomasyon hesabından başka bir abonelikteki kaynakları yöneten diğer runbook'larınızla aynı korumalı alan işleminde çalıştığında sorunlar ortaya çıkabilir. Bir runbook tarafından yapılan bağlam değişiklikleri, varsayılan bağlamı kullanarak diğer runbook'larınızı etkileyebilir. Bağlam, kullanılacak kimlik bilgileri ve hedeflenen abonelik gibi bilgileri içerdiğinden, cmdlet'ler yanlış aboneliği hedefleyerek not found veya izin hatalarıyla sonuçlanabilir. Bu sorun Bağlam Değiştirme olarak bilinir.

Azure bağlamlarını yönetme

Runbook'larınızın yanlış abonelikteki kaynaklarla çalışmasını önlemek için aşağıdaki önerileri gözden geçirin:

  1. Her runbook'un başında aşağıdaki komutu kullanarak Otomasyon runbook'unuzda korumalı alan bağlamı kaydetmeyi devre dışı bırakın: Disable-AzContextAutosave -Scope Process.
  2. Azure PowerShell cmdlet'leri parametresini -DefaultProfile destekler. Bu parametre, aynı işlemde birden çok betik çalıştırmayı desteklemek için tüm Az ve Azure Resource Manager (AzureRM) cmdlet'lerine eklenerek her cmdlet için hangi bağlamın kullanılacağını belirtmenize olanak sağlanır. Bağlam nesnenizi oluşturulduğunda ve her değiştirildiğinde runbook'unuza kaydedin. Ardından Az veya AzureRM cmdlet'i ile yapılan her çağrıda buna başvurun. Örneğin, $AzureContext = Set-AzContext -SubscriptionId $subID.
  3. Bağlam nesnesini PowerShell cmdlet'ine geçirin; örneğin, Get-AzVM -ResourceGroupName "myGroup" -DefaultProfile $AzureContext.

Aşağıda, bağlam geçişini önlemek için önerilerin ardından sistem tarafından atanan yönetilen kimliği kullanan bir PowerShell runbook kod parçacığı verilmiştir.

# 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

# Pass context object - even though the context had just been set
# This is the step that guarantees the context will not be switched.
Get-AzVM -ResourceGroupName "resourceGroupName" -DefaultProfile $AzureContext | Select Name

Olası belirtiler

Bu önerilere uymazsanız bir sorunla karşılaşamayabilirsiniz ancak fırsat mevcuttur. Bu durumla ilgili temel sorun zamanlamadır; diğer runbook bağlamını değiştirirken her runbook'un ne yaptığına bağlıdır. Bazı olası hata iletileri aşağıdadır. Ancak bu hata iletilerine bağlam dışı geçiş koşulları neden olabilir.

The subscription named <subscription name> cannot be found.

Get-AzVM : The client '<clientid>' with object id '<objectid>' does not have authorization to perform action 'Microsoft.Compute/virtualMachines/read' over scope '/subscriptions/<subcriptionIdOfSubscriptionWichDoesntContainTheVM>/resourceGroups/REsourceGroupName/providers/Microsoft.Compute/virtualMachines/VMName '.
   ErrorCode: AuthorizationFailed
   StatusCode: 403
   ReasonPhrase: Forbidden Operation
   ID : <AGuidRepresentingTheOperation> At line:51 char:7 + $vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $UNBV... +
Get-AzureRmResource : Resource group "SomeResourceGroupName" could not be found.
... resources = Get-AzResource -ResourceGroupName $group.ResourceGro ...
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzResource], CloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

Sonraki adımlar