Kontextusváltás az Azure Automationben
A kontextusváltás azt jelenti, hogy az egyik folyamat kontextusa módosítja a kontextust egy másik folyamatban. Az Azure-környezet az Azure PowerShell-parancsmagok célját meghatározó adatok halmaza. A környezet a következő tulajdonságokból áll:
Tulajdonság | Leírás |
---|---|
Név | A környezet neve. |
Számla | Az Azure-ral folytatott kommunikáció hitelesítéséhez használt felhasználónév vagy szolgáltatásnév. |
Környezet | Az Azure globális vagy egy nemzeti Azure-felhőt jelöl, például az Azure Governmentt. Megadhatja egy hibrid felhőplatformot is, például az Azure Stacket. |
Előfizetés | A kezelni kívánt erőforrásokat tartalmazó Azure-előfizetést jelöli. |
Bérlő | A Microsoft Entra ID dedikált és megbízható példánya, amely egyetlen szervezetet jelöl. |
Igazolás | Az Azure által a személyazonosság ellenőrzéséhez és az Azure-beli erőforrásokhoz való hozzáférés engedélyezésének megerősítéséhez használt információk. |
Amikor egy olyan fiók jelentkezik be, amely több előfizetéshez is hozzáfér, az előfizetések bármelyike hozzáadható a felhasználó kontextusához. A megfelelő előfizetés garantálásához deklarálnia kell azt a csatlakozáskor. Használja például a következőt Add-AzAccount -Credential $Cred -subscription 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
: . Problémák merülhetnek fel azonban, ha az egyik előfizetést kezelő runbookok ugyanabban a tesztkörnyezeti folyamatban futnak, mint a többi runbook, amelyek ugyanabból az Automation-fiókból egy másik előfizetés erőforrásait kezelik. Ez azt jelenti, hogy az egyik runbook által végzett kontextusmódosítások hatással lehetnek az alapértelmezett kontextust használó többi runbookra is. Mivel a környezet olyan információkat tartalmaz, mint a használni kívánt hitelesítő adatok és a megcélzott előfizetés, a parancsmagok helytelen előfizetést célozhatnak meg, ami vagy engedélyek hibáit eredményezheti not found
. Ezt a problémát környezetváltásnak nevezzük.
Azure-környezetek kezelése
Annak érdekében, hogy a runbookok ne fussanak a nem megfelelő előfizetésben lévő erőforrásokon, tekintse át az alábbi javaslatokat:
- Tiltsa le a tesztkörnyezet környezetének mentését az Automation-runbookban az egyes runbookok elején található alábbi paranccsal:
Disable-AzContextAutosave -Scope Process
. - Az Azure PowerShell-parancsmagok támogatják a(z)
-DefaultProfile
paramétert. Ez a paraméter az összes Az- és Azure Resource Manager- (AzureRM-) parancsmaghoz hozzáadva több szkript futtatását támogatja ugyanabban a folyamatban, így minden parancsmaghoz megadhatja, hogy melyik környezet legyen használva. Létrehozásakor és minden módosítás után mentse a kontextusobjektumot a runbookban. Ezután hivatkozzon rá minden olyan hívásban, amely az Az- vagy az AzureRM- parancsmaggal történt. Például:$AzureContext = Set-AzContext -SubscriptionId $subID
. - Adja át a környezeti objektumot például
Get-AzVM -ResourceGroupName "myGroup" -DefaultProfile $AzureContext
a PowerShell-parancsmagnak.
Íme egy PowerShell-runbook kódrészlete, amely egy rendszer által hozzárendelt felügyelt identitást használ a környezetváltás elkerülésére vonatkozó javaslatok alapján.
# 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
Lehetséges tünetek
Bár előfordulhat, hogy nem tapasztal problémát, ha nem követi ezeket a javaslatokat, a lehetőség létezik. A helyzet hátterében az időzítés áll; attól függ, hogy az egyes runbookok mit csinálnak abban az időpontban, amikor a másik runbook átváltja a környezetét. Íme néhány lehetséges hibaüzenet. Ezeket a hibaüzeneteket azonban a környezeten kívüli váltási feltételek okozhatják.
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/<subscriptionIdOfSubscriptionWhichDoesntContainTheVM>/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