Blokowanie zasobów w celu uniemożliwienia nieoczekiwanych zmian

Jako administrator możesz zablokować subskrypcję, grupę zasobów lub zasób, aby zapobiec przypadkowemu usunięciu lub zmodyfikowaniu kluczowych zasobów przez innych użytkowników w organizacji. Blokada zastępuje wszystkie uprawnienia, jakie może mieć użytkownik.

Poziom blokady można ustawić na wartość CanNotDelete lub ReadOnly. W portalu blokady noszą odpowiednio nazwę Usuwanie i Tylko do odczytu.

  • CanNotDelete oznacza, że autoryzowani użytkownicy nadal mogą odczytywać i modyfikować zasób, ale nie mogą go usunąć.
  • ReadOnly oznacza, że autoryzowani użytkownicy mogą odczytywać zasób, ale nie mogą go usunąć ani zaktualizować. Zastosowanie tej blokady jest podobne do ograniczenia wszystkich autoryzowanych użytkowników do uprawnień przyznanych przez rolę Czytelnik.

W przeciwieństwie do kontroli dostępu opartej na rolach blokady zarządzania są używane do stosowania ograniczenia do wszystkich użytkowników i ról. Aby dowiedzieć się więcej na temat ustawiania uprawnień dla użytkowników i ról, zobacz Azure role-based access control (Azure RBAC) (Kontroladostępu oparta na rolach (RBAC) platformy Azure).

Blokowanie dziedziczenia

Po zastosowaniu blokady w zakresie nadrzędnym wszystkie zasoby w tym zakresie dziedziczą tę samą blokadę. Nawet zasoby, które później dodasz, dziedziczą blokadę z elementu nadrzędnego. Pierwszeństwo ma najbardziej restrykcyjna blokada w dziedziczeniu.

Opis zakresu blokad

Uwaga

Ważne jest, aby zrozumieć, że blokady nie mają zastosowania do wszystkich typów operacji. Operacje platformy Azure można podzielić na dwie kategorie — płaszczyznę sterowania i płaszczyznę danych. Blokady mają zastosowanie tylko do operacji płaszczyzny sterowania.

Operacje płaszczyzny sterowania to operacje wysyłane https://management.azure.com do . Operacje płaszczyzny danych to operacje wysyłane do wystąpienia usługi, takie jak https://myaccount.blob.core.windows.net/ . Aby uzyskać więcej informacji, zobacz Płaszczyzna sterowania i płaszczyzna danych platformy Azure. Aby dowiedzieć się, które operacje używają adresu URL płaszczyzny sterowania, zobacz Interfejs API REST platformy Azure.

To rozróżnienie oznacza, że blokady uniemożliwiają zmiany w zasobie, ale nie ograniczają sposobu, w jaki zasoby wykonują własne funkcje. Na przykład blokada ReadOnly na SQL Database logicznym uniemożliwia usunięcie lub zmodyfikowanie serwera. Nie uniemożliwia to tworzenia, aktualizowania ani usuwania danych w bazach danych na tym serwerze. Transakcje danych są dozwolone, ponieważ te operacje nie są wysyłane do witryny https://management.azure.com.

Więcej przykładów różnic między operacjami na płaszczyźnie danych i kontroli opisano w następnej sekcji.

Uwagi dotyczące stosowania blokad

Zastosowanie blokad może prowadzić do nieoczekiwanych wyników, ponieważ niektóre operacje, które nie modyfikują zasobu, w rzeczywistości wymagają akcji zablokowanych przez blokadę. Blokady uniemożliwią wszelkie operacje, które wymagają żądania POST do Azure Resource Manager API. Oto niektóre typowe przykłady operacji blokowanych przez blokady:

  • Blokada tylko do odczytu na koncie magazynu uniemożliwia użytkownikom wyświetlanie listy kluczy kont. Operacja azure Storage list kluczy jest przetwarzana za pośrednictwem żądania POST w celu ochrony dostępu do kluczy kont, które zapewniają pełny dostęp do danych na koncie magazynu. Jeśli dla konta magazynu skonfigurowano blokadę tylko do odczytu, użytkownicy, którzy nie mają kluczy kont, muszą używać poświadczeń usługi Azure AD, aby uzyskać dostęp do danych obiektów blob lub kolejek. Blokada tylko do odczytu uniemożliwia również przypisywanie ról RBAC platformy Azure, które są w zakresie konta magazynu lub kontenera danych (kontenera obiektów blob lub kolejki).

  • Blokada nie można usunąć na koncie magazynu nie uniemożliwia usunięcia ani zmodyfikowania danych w ramach tego konta. Ten typ blokady chroni tylko samo konto magazynu przed usunięciem. Jeśli żądanie używa operacji płaszczyznydanych , blokada na koncie magazynu nie chroni danych obiektów blob, kolejek, tabel ani plików w ramach tego konta magazynu. Jeśli jednak żądanie używa operacji płaszczyzny sterowania, blokada chroni te zasoby.

    Jeśli na przykład żądanie używa udziałów plików — Usuń, co jest operacją płaszczyzny sterowania, usunięcie zostanie odrzucone. Jeśli żądanie używa akcji Usuń udział, która jest operacją płaszczyzny danych, usunięcie zakończy się pomyślnie. Zalecamy używanie operacji płaszczyzny sterowania.

  • Blokada tylko do odczytu na koncie magazynu nie uniemożliwia usunięcia ani zmodyfikowania danych na tym koncie. Ten typ blokady chroni tylko samo konto magazynu przed usunięciem lub modyfikacją i nie chroni danych obiektów blob, kolejek, tabel ani plików w ramach tego konta magazynu.

  • Blokada tylko do odczytu zasobu App Service uniemożliwia Visual Studio Eksplorator serwera wyświetlania plików dla zasobu, ponieważ ta interakcja wymaga dostępu do zapisu.

  • Blokada tylko do odczytu dla grupy zasobów zawierającej plan App Service uniemożliwia skalowanie planu w górę lub w górę.

  • Blokada tylko do odczytu w grupie zasobów zawierającej maszynę wirtualną uniemożliwia wszystkim użytkownikom uruchamianie lub ponowne uruchamianie maszyny wirtualnej. Te operacje wymagają żądania POST.

  • Blokada nie można usunąć w grupie zasobów uniemożliwia Azure Resource Manager automatyczne usuwanie wdrożeń w historii. Jeśli w historii osiągniesz 800 wdrożeń, wdrożenia nie powiodą się.

  • Nie można usunąć blokady grupy zasobów utworzonej przez usługę Azure Backup powoduje niepowodzenie tworzenia kopii zapasowych. Usługa obsługuje maksymalnie 18 punktów przywracania. Po zablokowaniu usługa tworzenia kopii zapasowych nie może wyczyścić punktów przywracania. Aby uzyskać więcej informacji, zobacz Często zadawane pytania — Kopii zapasowej maszyn wirtualnych platformy Azure.

  • Blokada nie można usunąć w grupie zasobów uniemożliwia Azure Machine Learning skalowania automatycznego Azure Machine Learning klastrów obliczeniowych w celu usunięcia nieużywanych węzłów.

  • Blokada tylko do odczytu subskrypcji uniemożliwia Azure Advisor prawidłowego działania. Advisor nie może przechowywać wyników swoich zapytań.

  • Blokada tylko do odczytu na Application Gateway uniemożliwia uzyskanie kondycji zaplecza bramy aplikacji. Ta operacja używa postu, który jest blokowany przez blokadę tylko do odczytu.

  • Blokada tylko do odczytu w klastrze usługi AKS uniemożliwia wszystkim użytkownikom uzyskiwanie dostępu do dowolnych zasobów klastra z sekcji Zasoby Kubernetes bloku po lewej stronie klastra usługi AKS w Azure Portal. Te operacje wymagają żądania POST w celu uwierzytelnienia.

KtoTo można tworzyć lub usuwać blokady

Aby utworzyć lub usunąć blokady zarządzania, musisz mieć dostęp do akcji Microsoft.Authorization/* Microsoft.Authorization/locks/* lub . Spośród wbudowanych ról tylko Właściciel i Administrator dostępu użytkowników mają dostęp do tych akcji.

Blokady i aplikacje zarządzane

Niektóre usługi platformy Azure, takie jak Azure Databricks, implementują usługę za pomocą aplikacji zarządzanych. W takim przypadku usługa tworzy dwie grupy zasobów. Jedna grupa zasobów zawiera omówienie usługi i nie jest zablokowana. Druga grupa zasobów zawiera infrastrukturę usługi i jest zablokowana.

Jeśli spróbujesz usunąć grupę zasobów infrastruktury, wystąpi błąd informujący, że grupa zasobów jest zablokowana. Jeśli spróbujesz usunąć blokadę dla grupy zasobów infrastruktury, zostanie wyświetlany komunikat o błędzie informujący, że nie można usunąć blokady, ponieważ jest ona własnością aplikacji systemowej.

Zamiast tego usuń usługę , co spowoduje również usunięcie grupy zasobów infrastruktury.

W przypadku aplikacji zarządzanych wybierz wdrożoną usługę.

Wybieranie usługi

Zwróć uwagę, że usługa zawiera link do zarządzanej grupy zasobów. Ta grupa zasobów przechowuje infrastrukturę i jest zablokowana. Nie można go bezpośrednio usunąć.

Pokaż grupę zarządzaną

Aby usunąć wszystko dla usługi, w tym zablokowaną grupę zasobów infrastruktury, wybierz pozycję Usuń dla usługi.

Usuwanie usługi

Konfigurowanie blokad

Portal

  1. W bloku Ustawienia dla zasobu, grupy zasobów lub subskrypcji do zablokowania wybierz pozycję Blokady.

    Wybierz pozycję Zablokuj.

  2. Aby dodać blokadę, wybierz pozycję Dodaj. Jeśli chcesz utworzyć blokadę na poziomie nadrzędnym, wybierz blokadę nadrzędną. Aktualnie wybrany zasób dziedziczy blokadę z elementu nadrzędnego. Możesz na przykład zablokować grupę zasobów, aby zastosować blokadę do wszystkich jej zasobów.

    Dodaj blokadę.

  3. Nadaj blokadze nazwę i poziom blokady. Opcjonalnie możesz dodać notatki opisujące blokadę.

    Ustaw blokadę.

  4. Aby usunąć blokadę, wybierz przycisk Usuń.

    Usuń blokadę.

Szablon ARM

W przypadku Azure Resource Manager szablonu usługi Arm (arm) do wdrażania blokady należy pamiętać o zakresie blokady i zakresie wdrożenia. Aby zastosować blokadę w zakresie wdrożenia, na przykład zablokować grupę zasobów lub subskrypcję, nie należy ustawiać właściwości zakresu. Podczas blokowania zasobu w zakresie wdrożenia ustaw właściwość scope.

Poniższy szablon stosuje blokadę do grupy zasobów, w która jest wdrażana. Zwróć uwagę, że dla zasobu blokady nie ma właściwości scope, ponieważ zakres blokady odpowiada zakresowi wdrożenia. Ten szablon jest wdrażany na poziomie grupy zasobów.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/locks",
      "apiVersion": "2016-09-01",
      "name": "rgLock",
      "properties": {
        "level": "CanNotDelete",
        "notes": "Resource group should not be deleted."
      }
    }
  ]
}

Aby utworzyć grupę zasobów i zablokować ją, wd wdrażaj następujący szablon na poziomie subskrypcji.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "rgName": {
      "type": "string"
    },
    "rgLocation": {
      "type": "string"
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Resources/resourceGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('rgName')]",
      "location": "[parameters('rgLocation')]",
      "properties": {}
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "lockDeployment",
      "resourceGroup": "[parameters('rgName')]",
      "dependsOn": [
        "[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "type": "Microsoft.Authorization/locks",
              "apiVersion": "2016-09-01",
              "name": "rgLock",
              "properties": {
                "level": "CanNotDelete",
                "notes": "Resource group and its resources should not be deleted."
              }
            }
          ],
          "outputs": {}
        }
      }
    }
  ],
  "outputs": {}
}

Podczas stosowania blokady do zasobu w grupie zasobów dodaj właściwość scope. Ustaw zakres na nazwę zasobu do zablokowania.

Poniższy przykład przedstawia szablon, który tworzy plan usługi App Service, witrynę internetową i blokadę witryny internetowej. Zakres blokady jest ustawiony na witrynę internetową.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "hostingPlanName": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "siteName": "[concat('ExampleSite', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2020-12-01",
      "name": "[parameters('hostingPlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "tier": "Free",
        "name": "f1",
        "capacity": 0
      },
      "properties": {
        "targetWorkerCount": 1
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2020-12-01",
      "name": "[variables('siteName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
      ],
      "properties": {
        "serverFarmId": "[parameters('hostingPlanName')]"
      }
    },
    {
      "type": "Microsoft.Authorization/locks",
      "apiVersion": "2016-09-01",
      "name": "siteLock",
      "scope": "[concat('Microsoft.Web/sites/', variables('siteName'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', variables('siteName'))]"
      ],
      "properties": {
        "level": "CanNotDelete",
        "notes": "Site should not be deleted."
      }
    }
  ]
}

Azure PowerShell

Wdrożone zasoby można zablokować za Azure PowerShell za pomocą polecenia New-AzResourceLock.

Aby zablokować zasób, podaj nazwę zasobu, jego typ zasobu i nazwę grupy zasobów.

New-AzResourceLock -LockLevel CanNotDelete -LockName LockSite -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

Aby zablokować grupę zasobów, podaj nazwę grupy zasobów.

New-AzResourceLock -LockName LockGroup -LockLevel CanNotDelete -ResourceGroupName exampleresourcegroup

Aby uzyskać informacje na temat blokady, użyj get-AzResourceLock. Aby uzyskać wszystkie blokady w subskrypcji, użyj:

Get-AzResourceLock

Aby uzyskać wszystkie blokady dla zasobu, użyj:

Get-AzResourceLock -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

Aby uzyskać wszystkie blokady dla grupy zasobów, użyj:

Get-AzResourceLock -ResourceGroupName exampleresourcegroup

Aby usunąć blokadę zasobu, użyj:

$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup -ResourceName examplesite -ResourceType Microsoft.Web/sites).LockId
Remove-AzResourceLock -LockId $lockId

Aby usunąć blokadę dla grupy zasobów, użyj:

$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup).LockId
Remove-AzResourceLock -LockId $lockId

Interfejs wiersza polecenia platformy Azure

Wdrożone zasoby można zablokować za pomocą interfejsu wiersza polecenia platformy Azure za pomocą polecenia az lock create.

Aby zablokować zasób, podaj nazwę zasobu, jego typ zasobu i nazwę grupy zasobów.

az lock create --name LockSite --lock-type CanNotDelete --resource-group exampleresourcegroup --resource-name examplesite --resource-type Microsoft.Web/sites

Aby zablokować grupę zasobów, podaj nazwę grupy zasobów.

az lock create --name LockGroup --lock-type CanNotDelete --resource-group exampleresourcegroup

Aby uzyskać informacje o blokadę, użyj az lock list. Aby uzyskać wszystkie blokady w subskrypcji, użyj:

az lock list

Aby uzyskać wszystkie blokady dla zasobu, użyj:

az lock list --resource-group exampleresourcegroup --resource-name examplesite --namespace Microsoft.Web --resource-type sites --parent ""

Aby uzyskać wszystkie blokady dla grupy zasobów, użyj:

az lock list --resource-group exampleresourcegroup

Aby usunąć blokadę zasobu, użyj:

lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup --resource-type Microsoft.Web/sites --resource-name examplesite --output tsv --query id)
az lock delete --ids $lockid

Aby usunąć blokadę dla grupy zasobów, użyj:

lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup  --output tsv --query id)
az lock delete --ids $lockid

Interfejs API REST

Wdrożone zasoby można zablokować za pomocą interfejsu API REST w celu blokowania zarządzania. Interfejs API REST umożliwia tworzenie i usuwanie blokad oraz pobieranie informacji o istniejących blokadach.

Aby utworzyć blokadę, uruchom:

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/locks/{lock-name}?api-version={api-version}

Zakresem może być subskrypcja, grupa zasobów lub zasób. Nazwa blokady jest nazwą, którą chcesz wywołać blokadę. W przypadku wersji api-version użyj ciągu 2016-09-01.

W żądaniu dołącz obiekt JSON, który określa właściwości blokady.

{
  "properties": {
  "level": "CanNotDelete",
  "notes": "Optional text notes."
  }
}

Następne kroki

  • Aby dowiedzieć się więcej o logicznym organizowaniu zasobów, zobacz Organizowanie zasobów przy użyciu tagów.
  • Możesz stosować ograniczenia i konwencje w ramach subskrypcji za pomocą dostosowanych zasad. Aby uzyskać więcej informacji, zobacz artykuł Co to jest usługa Azure Policy?.
  • Aby uzyskać instrukcje dla przedsiębiorstw dotyczące użycia usługi Resource Manager w celu efektywnego zarządzania subskrypcjami, zobacz Azure enterprise scaffold - prescriptive subscription governance (Szkielet platformy Azure dla przedsiębiorstwa — narzucony nadzór subskrypcji).