Förstå resurslåsning i Azure Blueprints
Skapandet av konsekventa miljöer i stor skala är bara verkligt värdefullt om det finns en mekanism för att upprätthålla den konsekvensen. Den här artikeln beskriver hur resurslåsning fungerar i Azure Blueprints. Ett exempel på resurslåsning och tillämpning av tilldelningsnekanden finns i självstudien skydda nya resurser.
Anteckning
Resurslås som distribueras av Azure Blueprints tillämpas endast på icke-tilläggsresurser som distribueras av skisstilldelningen. Befintliga resurser, till exempel de i resursgrupper som redan finns, har inte lås tillagda.
Låslägen och tillstånd
Låsläge gäller för skisstilldelningen och har tre alternativ: Lås inte, Skrivskyddade eller Ta inte bort. Låsningsläget konfigureras under artefaktdistributionen under en skisstilldelning. Du kan ange ett annat låsläge genom att uppdatera skisstilldelningen. Låsningslägen kan dock inte ändras utanför Azure Blueprints.
Resurser som skapats av artefakter i en skisstilldelning har fyra tillstånd: Inte låst, Skrivskyddad, Kan inte redigera/ta bort eller Kan inte ta bort. Varje artefakttyp kan vara i tillståndet Inte låst. Följande tabell kan användas för att fastställa tillståndet för en resurs:
| Läge | Resurstyp för artefakt | Stat | Beskrivning |
|---|---|---|---|
| Lås inte | * | Inte låst | Resurser skyddas inte av Azure Blueprints. Det här tillståndet används också för resurser som läggs till i en skrivskyddade eller Ta inte bort resursgruppsartefakt utanför en skisstilldelning. |
| Skrivskydd | Resursgrupp | Det går inte att redigera/ta bort | Resursgruppen är skrivskyddade och taggar i resursgruppen kan inte ändras. Inte låsta resurser kan läggas till, flyttas, ändras eller tas bort från den här resursgruppen. |
| Skrivskydd | Icke-resursgrupp | Skrivskydd | Resursen kan inte ändras på något sätt. Inga ändringar och kan inte tas bort. |
| Ta inte bort | * | Det går inte att ta bort | Resurserna kan ändras, men de kan inte tas bort. Inte låsta resurser kan läggas till, flyttas, ändras eller tas bort från den här resursgruppen. |
Åsidosätta låsnings tillstånd
Det är vanligtvis möjligt för någon med lämplig rollbaserad åtkomstkontroll i Azure (Azure RBAC) för prenumerationen, till exempel rollen Ägare, att kunna ändra eller ta bort en resurs. Den här åtkomsten är inte fallet när Azure Blueprints tillämpar låsning som en del av en distribuerad tilldelning. Om tilldelningen har angetts med alternativet Skrivskyddad eller Ta inte bort kan inte ens prenumerationsägaren utföra den blockerade åtgärden på den skyddade resursen.
Det här säkerhetsmåttet skyddar konsekvensen för den definierade skissen och miljön som den har utformats för att skapa från oavsiktlig eller programmatisk borttagning eller ändring.
Tilldela vid hanteringsgrupp
Det enda alternativet för att förhindra prenumerationsägare från att ta bort en skisstilldelning är att tilldela skissen till en hanteringsgrupp. I det här scenariot har endast ägare av hanteringsgruppen de behörigheter som krävs för att ta bort skisstilldelningen.
Om du vill tilldela skissen till en hanteringsgrupp i stället för en prenumeration anropar REST API ändringar så här:
PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{assignmentMG}/providers/Microsoft.Blueprint/blueprintAssignments/{assignmentName}?api-version=2018-11-01-preview
Hanteringsgruppen som definieras av måste antingen finnas i hanteringsgruppshierarkin eller vara samma {assignmentMG} hanteringsgrupp där skissdefinitionen sparas.
Begärandetexten för skisstilldelningen ser ut så här:
{
"identity": {
"type": "SystemAssigned"
},
"location": "eastus",
"properties": {
"description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
"blueprintId": "/providers/Microsoft.Management/managementGroups/{blueprintMG}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
"scope": "/subscriptions/{targetSubscriptionId}",
"parameters": {
"storageAccountType": {
"value": "Standard_LRS"
},
"costCenter": {
"value": "Contoso/Online/Shopping/Production"
},
"owners": {
"value": [
"johnDoe@contoso.com",
"johnsteam@contoso.com"
]
}
},
"resourceGroups": {
"storageRG": {
"name": "defaultRG",
"location": "eastus"
}
}
}
}
Den största skillnaden i den här begärandetexten och en som tilldelas till en prenumeration är properties.scope egenskapen . Den här obligatoriska egenskapen måste anges till den prenumeration som skisstilldelningen gäller för. Prenumerationen måste vara direkt underordnad hanteringsgruppshierarkin där skisstilldelningen lagras.
Anteckning
En skiss som tilldelats hanteringsgruppomfånget fungerar fortfarande som en skisstilldelning på prenumerationsnivå. Den enda skillnaden är var skisstilldelningen lagras för att förhindra prenumerationsägare från att ta bort tilldelningen och tillhörande lås.
Ta bort låsnings tillstånd
Om det blir nödvändigt att ändra eller ta bort en resurs som skyddas av en tilldelning finns det två sätt att göra det på.
- Uppdatera skisstilldelningen till låsläget Lås inte
- Ta bort skisstilldelningen
När tilldelningen tas bort tas de lås som skapats av Azure Blueprints bort. Resursen lämnas dock kvar och måste tas bort på vanligt sätt.
Så här fungerar skisslås
En nekandeåtgärd för Tilldelningar av Azure RBAC tillämpas på artefaktresurser under tilldelningen av en skiss om tilldelningen valde alternativet Skrivskyddade eller Ta inte bort. Neka-åtgärden läggs till av den hanterade identiteten för skisstilldelningen och kan bara tas bort från artefaktresurserna av samma hanterade identitet. Det här säkerhetsmåttet tillämpar låsningsmekanismen och förhindrar att skisslåset tas bort utanför Azure Blueprints.
Tilldelningsegenskaperna för neka för varje läge är följande:
| Läge | Permissions.Actions | Permissions.NotActions | Principals[i]. Typ | ExcludePrincipals[i]. Id | DoNotApplyToChildScopes |
|---|---|---|---|---|---|
| Skrivskydd | **** _ | _ * /read Microsoft.Authorization/locks/delete Microsoft.Network/virtualNetwork/subnets/join/action* |
SystemDefined (Alla) | skisstilldelning och användardefinierad i excludedPrincipals | Resursgrupp – true; Resurs – falskt |
| Ta inte bort | */delete | Microsoft.Authorization/locks/delete Microsoft.Network/virtualNetwork/subnets/join/action |
SystemDefined (Alla) | skisstilldelning och användardefinierad i excludedPrincipals | Resursgrupp – true; Resurs – falskt |
Viktigt
Azure Resource Manager cachelagrar rolltilldelningsinformation i upp till 30 minuter. Det innebär att neka tilldelningar nekar åtgärd för skissresurser kanske inte omedelbart har full effekt. Under den här tidsperioden kan det vara möjligt att ta bort en resurs som är avsedd att skyddas av skisslås.
Undanta ett huvudnamn från en tilldelning som nekar
I vissa design- eller säkerhetsscenarier kan det vara nödvändigt att undanta ett huvudnamn från tilldelningsnekanden som skisstilldelningen skapar. Det här steget görs i REST API genom att lägga till upp till fem värden i excludedPrincipals-matrisen i låsegenskapen när du skapar tilldelningen. Följande tilldelningsdefinition är ett exempel på en begärandetext som innehåller excludedPrincipals:
{
"identity": {
"type": "SystemAssigned"
},
"location": "eastus",
"properties": {
"description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
"blueprintId": "/providers/Microsoft.Management/managementGroups/{mgId}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
"locks": {
"mode": "AllResourcesDoNotDelete",
"excludedPrincipals": [
"7be2f100-3af5-4c15-bcb7-27ee43784a1f",
"38833b56-194d-420b-90ce-cff578296714"
]
},
"parameters": {
"storageAccountType": {
"value": "Standard_LRS"
},
"costCenter": {
"value": "Contoso/Online/Shopping/Production"
},
"owners": {
"value": [
"johnDoe@contoso.com",
"johnsteam@contoso.com"
]
}
},
"resourceGroups": {
"storageRG": {
"name": "defaultRG",
"location": "eastus"
}
}
}
}
Undanta en åtgärd från en tilldelning för att neka
På samma sätt som du exkluderar ett huvudnamn för en tilldelningsnekande i en skisstilldelning kan du undanta specifika åtgärder för Azure-resursprovidern. I blocket properties.locks, på samma plats som excludedPrincipals är, kan en excludedActions läggas till:
"locks": {
"mode": "AllResourcesDoNotDelete",
"excludedPrincipals": [
"7be2f100-3af5-4c15-bcb7-27ee43784a1f",
"38833b56-194d-420b-90ce-cff578296714"
],
"excludedActions": [
"Microsoft.ContainerRegistry/registries/push/write",
"Microsoft.Authorization/*/read"
]
},
ExcludedPrincipals måste vara explicita, men excludedActions-poster kan använda för * jokerteckenmatchning av resursprovideråtgärder.
Nästa steg
- Följ självstudien skydda nya resurser.
- Mer information om livscykeln för en skiss.
- Förstå hur du använder statiska och dynamiska parametrar.
- Lär dig hur du anpassar sekvensordningen för en skiss.
- Lär dig hur du uppdaterar befintliga tilldelningar.
- Lös problem som kan uppstå vid tilldelningen av en skiss med allmän felsökning.