Förstå resurslåsning i Azure Blueprints

Att skapa konsekventa miljöer i stor skala är bara 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 program för nekandetilldelningar finns i självstudien skydda nya resurser .

Anteckning

Resurslås som distribueras av Azure Blueprints tillämpas endast på resurser som inte är tillägg som distribueras av skisstilldelningen. Befintliga resurser, till exempel de i resursgrupper som redan finns, har inte lås som har lagts till i dem.

Låslägen och tillstånd

Låsningsläget gäller för skisstilldelningen och har tre alternativ: Lås inte, Skrivskyddad 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 ha tillståndet Inte låst . Följande tabell kan användas för att fastställa tillståndet för en resurs:

Läge Artefaktresurstyp 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 skrivskyddad eller Ta inte bort resursgruppsartefakt utanför en skisstilldelning.
Skrivskydd Resursgrupp Det går inte att redigera/ta bort Resursgruppen är skrivskyddad 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 Grupp som inte är resurs Skrivskydd Resursen kan inte ändras på något sätt. Inga ändringar och det går inte att ta bort.
Ta inte bort * Det går inte att ta bort Resurserna kan ändras, men det går inte att ta bort dem. Inte låsta resurser kan läggas till, flyttas, ändras eller tas bort från den här resursgruppen.

Åsidosätta låsningstillstånd

Det är vanligtvis möjligt att någon med lämplig rollbaserad åtkomstkontroll i Azure (Azure RBAC) för prenumerationen, till exempel rollen Ägare, kan ä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 i den definierade skissen och den miljö som den har utformats för att skapa från oavsiktlig eller programmatisk borttagning eller ändring.

Tilldela i hanteringsgrupp

Det enda alternativet för att förhindra att prenumerationsägare tar 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 ändras REST API-anropet 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 {assignmentMG} måste antingen finnas i hanteringsgruppshierarkin eller vara samma 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 viktigaste skillnaden i den här begärandetexten properties.scope och en som tilldelas till en prenumeration är egenskapen . Den här obligatoriska egenskapen måste anges till den prenumeration som skisstilldelningen gäller för. Prenumerationen måste vara ett direkt underordnat i hanteringsgruppshierarkin där skisstilldelningen lagras.

Anteckning

En skiss som tilldelats hanteringsgruppens omfång fungerar fortfarande som en skisstilldelning på prenumerationsnivå. Den enda skillnaden är var skisstilldelningen lagras för att förhindra att prenumerationsägare tar bort tilldelningen och tillhörande lås.

Ta bort låsningstillstå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.

  • Uppdatera skisstilldelningen till ett låsningsläge för Lås inte
  • Ta bort skisstilldelningen

När tilldelningen tas bort tas låsen som skapats av Azure Blueprints bort. Resursen lämnas dock kvar och måste tas bort på normalt sätt.

Så här fungerar skisslås

En åtgärd som nekar tilldelningar i Azure RBAC tillämpas på artefaktresurser under tilldelningen av en skiss om tilldelningen valde alternativet Skrivskyddad eller Ta inte bort . Åtgärden neka läggs till av den hanterade identiteten för skisstilldelningen och kan bara tas bort från artefaktresurserna med samma hanterade identitet. Den här säkerhetsåtgärden tillämpar låsmekanismen och förhindrar att skisslåset tas bort utanför Azure Blueprints.

Skärmbild av sidan Åtkomstkontroll (I A M) och fliken Neka tilldelningar för en resursgrupp.

Egenskaperna för nekad tilldelning för varje läge är följande:

Läge Permissions.Actions Permissions.NotActions Principals[i]. Typ ExcludePrincipals[i]. Id DoNotApplyToChildScopes
Skrivskydd * */Läsa
Microsoft. Auktorisering/lås/ta bort
Microsoft. Nätverk/virtualNetwork/undernät/koppling/åtgärd
SystemDefined (alla) skisstilldelning och användardefinierad i excludedPrincipals Resursgrupp – sant; Resurs – falskt
Ta inte bort */Ta bort Microsoft. Auktorisering/lås/ta bort
Microsoft. Nätverk/virtualNetwork/undernät/koppling/åtgärd
SystemDefined (alla) skisstilldelning och användardefinierad i excludedPrincipals Resursgrupp – sant; Resurs – falskt

Viktigt

Azure Resource Manager cachelagrar rolltilldelningsinformation i upp till 30 minuter. Därför kan det hända att neka tilldelningar neka åtgärd på skissresurser inte omedelbart är i 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 nekandetilldelning

I vissa design- eller säkerhetsscenarier kan det vara nödvändigt att undanta ett huvudnamn från den nekande tilldelning som skisstilldelningen skapar. Det här steget görs i REST API genom att lägga till upp till fem värden i matrisen excludedPrincipals i egenskapen locks när tilldelningen skapas. 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 nekandetilldelning

På samma sätt som du exkluderar ett huvudnamn för en neka-tilldelning i en skisstilldelning kan du exkludera 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"
    ]
},

Även om excludedPrincipals måste vara explicit, kan exkluderadeÅtgärdsposter använda sig av * för jokerteckenmatchning av resursprovideråtgärder.

Nästa steg