Kontextusváltás az Azure Automationben
A környezetváltás az, amikor az egyik folyamat környezete egy másik folyamatban módosítja a környezetet. 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:
Property | Description |
---|---|
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. |
Environment | 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. |
Subscription | A kezelni kívánt erőforrásokat tartalmazó Azure-előfizetést jelöli. |
Tenant | A Microsoft Entra ID dedikált és megbízható példánya, amely egyetlen szervezetet jelöl. |
Hitelesítő adatok | 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ó környezetéhez. A megfelelő előfizetés garantálásához deklarálnia kell a csatlakozáskor. Használja például a következőt Add-AzAccount -Credential $Cred -subscription 'cd4dxxxx-xxxx-xxxx-xxxx-xxxxxxxx9749'
: . 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. Az egyik runbook által végrehajtott környezet módosítása hatással lehet a többi runbookra az alapértelmezett környezet használatával. 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 paramétert
-DefaultProfile
. 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. Mentse a környezetobjektumot a runbookban, amikor létrejött, és minden alkalommal, amikor módosul. Ezután hivatkozzon rá minden olyan hívásban, amely az Az vagy az AzureRM parancsmaggal történt. For example,$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/<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
Következő lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: