Udostępnij za pośrednictwem


Samouczek: Tworzenie niestandardowej definicji zasad

Niestandardowa definicja zasad umożliwia klientom definiowanie własnych reguł dotyczących korzystania z platformy Azure. Te reguły często wymuszają:

  • Rozwiązania dotyczące zabezpieczeń.
  • Zarządzanie kosztami.
  • Reguły specyficzne dla organizacji (takie jak nazewnictwo lub lokalizacje).

Niezależnie od potrzeb biznesowych wymagających utworzenia zasad niestandardowych, kroki definiowania nowych zasad niestandardowych są takie same.

Przed utworzeniem zasad niestandardowych zapoznaj się z przykładami zasad, aby sprawdzić, czy zasady spełniające Twoje potrzeby już istnieją.

Proces tworzenia zasad niestandardowych obejmuje następujące kroki:

  • Określanie wymagań biznesowych
  • Mapowanie każdego wymagania na właściwość zasobu platformy Azure
  • Mapowanie właściwości na alias
  • Określanie efektu do użycia
  • Tworzenie definicji zasad

Wymagania wstępne

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Określanie wymagań

Ważne jest, aby przed utworzeniem definicji zasad poznać przeznaczenie zasad. Na potrzeby tego samouczka użyj typowego wymagania dotyczącego zabezpieczeń przedsiębiorstwa jako celu zilustrowania kroków, których dotyczy:

  • Każde konto magazynu musi być włączone dla protokołu HTTPS.
  • Każde konto magazynu musi być wyłączone dla protokołu HTTP.

Wymagania powinny wyraźnie definiować zarówno „poprawne”, jak i „zakazane” stany zasobów.

Chociaż zdefiniowaliśmy oczekiwany stan zasobu, nie zdefiniowaliśmy tego, co chcemy zrobić z niezgodnymi zasobami. Usługa Azure Policy obsługuje wiele efektów. W tym samouczku zdefiniujemy wymaganie biznesowe jako uniemożliwiające tworzenie zasobów, jeśli nie są one zgodne z regułami biznesowymi. Aby osiągnąć ten cel, użyjemy efektu odmowy . Chcemy również mieć możliwość wstrzymania zasad dla określonych przypisań. Użyj efektu wyłączonego i wprowadź efekt parametru w definicji zasad.

Określanie właściwości zasobów

Zgodnie z wymaganiem biznesowym zasobem platformy Azure objętym inspekcją usługi Azure Policy jest konto magazynu. Jednak nie znamy właściwości do użycia w definicji zasad. Usługa Azure Policy oblicza reprezentację zasobu w formacie JSON, dlatego musimy zrozumieć właściwości dostępne w tym zasobie.

Istnieje wiele sposobów określania właściwości zasobu platformy Azure. Przyjrzymy się każdemu z tych samouczków:

  • Rozszerzenie usługi Azure Policy dla programu VS Code.
  • Szablony usługi Azure Resource Manager (szablony usługi ARM).
    • Eksportuj istniejący zasób.
    • Środowisko tworzenia.
    • Szablony szybkiego startu (GitHub).
    • Dokumentacja referencyjna szablonu.
  • Eksplorator zasobów platformy Azure.

Wyświetlanie zasobów w rozszerzeniu programu VS Code

Przy użyciu rozszerzenia programu VS Code można przeglądać zasoby w środowisku i wyświetlać właściwości usługi Resource Manager dla każdego zasobu.

Szablony usługi ARM

Istnieje kilka sposobów przeglądania szablonu usługi ARM zawierającego właściwość, którą chcesz zarządzać.

Istniejący zasób w portalu

Najprostszym sposobem na znalezienie właściwości jest przyjrzenie się istniejącemu zasobowi tego samego typu. Zasoby już skonfigurowane za pomocą ustawienia, które ma być wymuszane, służą także do porównywania wartości. Przyjrzyj się stronie Eksportowanie szablonu w obszarze Ustawienia w witrynie Azure Portal dla tego konkretnego zasobu.

Ostrzeżenie

Szablon arm wyeksportowany przez witrynę Azure Portal nie może być podłączony bezpośrednio do deployment właściwości szablonu usługi ARM w definicji zasad deployIfNotExists .

Zrzut ekranu przedstawiający stronę Eksportuj szablon w istniejącym zasobie w witrynie Azure Portal.

Wykonanie tego działania dla konta magazynu spowoduje wyświetlenie szablonu podobnego do następującego przykładu:

"resources": [
  {
    "comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
      "name": "Standard_LRS",
      "tier": "Standard"
    },
    "kind": "Storage",
    "name": "[parameters('storageAccounts_mystorageaccount_name')]",
    "apiVersion": "2018-07-01",
    "location": "westus",
    "tags": {
      "ms-resource-usage": "azure-cloud-shell"
    },
    "scale": null,
    "properties": {
      "networkAcls": {
        "bypass": "AzureServices",
        "virtualNetworkRules": [],
        "ipRules": [],
        "defaultAction": "Allow"
      },
      "supportsHttpsTrafficOnly": false,
      "encryption": {
        "services": {
          "file": {
            "enabled": true
          },
          "blob": {
            "enabled": true
          }
        },
        "keySource": "Microsoft.Storage"
      }
    },
    "dependsOn": []
  }
]

W obszarze properties jest wartością o nazwie supportsHttpsTrafficOnly ustawioną na false. Ta właściwość wygląda na to, że może to być właściwość, dla których szukamy. Ponadto zasób type to Microsoft.Storage/storageAccounts. Ten typ umożliwia ograniczenie zasad do zasobów tylko tego typu.

Tworzenie zasobu w portalu

Innym sposobem użycia portalu jest środowisko tworzenia zasobu. Podczas tworzenia konta magazynu za pośrednictwem portalu wymagana jest opcja na karcie Zaawansowane. Ta właściwość ma opcje Wyłączone i Włączone. Ikona informacji zawiera więcej tekstu, który potwierdza, że ta opcja jest prawdopodobnie odpowiednią właściwością. Jednak portal nie informuje nas o nazwie właściwości na tym ekranie.

W dolnej części karty Przeglądanie + tworzenie znajduje się link Pobierz szablon automatyzacji. Wybranie linku otwiera szablon, który tworzy skonfigurowany zasób. W tym przypadku są widoczne dwie kluczowe informacje:

...
"supportsHttpsTrafficOnly": {
  "type": "bool"
}
...
"properties": {
  "accessTier": "[parameters('accessTier')]",
  "supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...

Te informacje informują nas o typie właściwości, a także potwierdza supportsHttpsTrafficOnly , że jest to właściwość, która szukamy.

Szablony Szybki start w usłudze GitHub

Szablony szybkiego startu platformy Azure w usłudze GitHub mają setki szablonów usługi ARM utworzonych dla różnych zasobów. Szablony te mogą być doskonałym sposobem na znalezienie szukanej właściwości zasobu. Niektóre właściwości mogą wydawać się być tym, czego szukasz, ale kontrolować coś innego.

Dokumentacja zasobu

Aby sprawdzić supportsHttpsTrafficOnly poprawność właściwości, sprawdź dokumentację szablonu usługi ARM dla zasobu konta magazynu u dostawcy magazynu. Obiekt właściwości zawiera listę prawidłowych parametrów. Wybranie linku StorageAccountPropertiesCreateParameters obiektu spowoduje wyświetlenie tabeli dopuszczalnych właściwości. supportsHttpsTrafficOnly jest obecny, a opis jest zgodny z tym, czego szukamy w odniesieniu do wymagań biznesowych.

Eksplorator zasobów Azure

Innym sposobem eksplorowania zasobów platformy Azure jest użycie usługi Azure Resource Explorer (wersja zapoznawcza). To narzędzie używa kontekstu subskrypcji, więc musisz uwierzytelnić się w witrynie internetowej przy użyciu poświadczeń platformy Azure. Po uwierzytelnieniu możesz przeglądać pozycje według dostawców, subskrypcji, grup zasobów i zasobów.

Znajdź zasób konta magazynu i poszukaj właściwości. Widzimy supportsHttpsTrafficOnly również właściwość tutaj. Po wybraniu karty Dokumentacja widać, że opis właściwości pasuje do tego, co znaleźliśmy wcześniej w dokumentacji.

Znajdowanie aliasu właściwości

Zidentyfikowaliśmy właściwość zasobu, ale musimy zamapować jej właściwość na alias.

Istnieje kilka sposobów określenia aliasów dla zasobu platformy Azure. Przyjrzymy się każdemu z tych samouczków:

  • Rozszerzenie usługi Azure Policy dla programu VS Code.
  • Interfejs wiersza polecenia platformy Azure.
  • Azure PowerShell.

Uzyskiwanie aliasów w rozszerzeniu programu VS Code

Rozszerzenie usługi Azure Policy dla rozszerzenia programu VS Code ułatwia przeglądanie zasobów i odnajdywanie aliasów.

Uwaga

Rozszerzenie programu VS Code uwidacznia tylko właściwości trybu usługi Resource Manager i nie wyświetla żadnych właściwości trybu dostawcy zasobów.

Interfejs wiersza polecenia platformy Azure

W interfejsie wiersza polecenia platformy Azure polecenie az provider służy do wyszukiwania aliasów zasobu. Filtrujemy Microsoft.Storage przestrzeń nazw na podstawie szczegółowych informacji o zasobie platformy Azure wcześniej.

# Login first with az login if not using Cloud Shell

# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"

W wynikach zobaczymy alias obsługiwany przez konta magazynu o nazwie supportsHttpsTrafficOnly. Istnienie tego aliasu oznacza, że możemy zapisać zasady, aby wymuszać nasze wymagania biznesowe!

Azure PowerShell

W programie Azure PowerShell polecenie cmdlet Get-AzPolicyAlias służy do wyszukiwania aliasów zasobu. Filtruj Microsoft.Storage przestrzeń nazw na podstawie szczegółowych informacji o zasobie platformy Azure wcześniej.

# Login first with Connect-AzAccount if not using Cloud Shell

# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases

Podobnie jak w przypadku interfejsu wiersza polecenia platformy Azure, wyniki pokazują alias obsługiwany przez konta magazynu o nazwie supportsHttpsTrafficOnly.

Określanie efektu do użycia

Określenie, co należy zrobić z niezgodnymi zasobami, jest niemal tak ważne, jak zdecydowanie, co należy ocenić w pierwszej kolejności. Każda możliwa odpowiedź na niezgodny zasób jest nazywana efektem. Efekt kontroluje, czy niezgodny zasób jest rejestrowany, blokowany, czy są dołączane do niego dane lub czy jest z nim kojarzone wdrożenie przywracające zasób do stanu zgodności.

W naszym przykładzie jest to efekt, którego potrzebujemy, deny ponieważ nie chcemy, aby niezgodne zasoby zostały utworzone w naszym środowisku platformy Azure. Inspekcja jest dobrym pierwszym wyborem dla efektu zasad w celu określenia, jaki jest wpływ zasad przed ustawieniem go na deny. Jednym ze sposobów na ułatwienie modyfikowania efektu dla przypisania jest sparametryzowanie efektu. Zobacz parametry , aby uzyskać szczegółowe informacje.

Tworzenie definicji

Teraz mamy szczegóły i alias właściwości, którą chcemy zarządzać. Następnie utworzymy samą regułę zasad. Jeśli nie znasz języka zasad, zapoznaj się ze strukturą definicji zasad, aby dowiedzieć się, jak utworzyć strukturę definicji zasad. Oto pusty szablon definicji zasad:

{
  "properties": {
    "displayName": "<displayName>",
    "description": "<description>",
    "mode": "<mode>",
    "parameters": {
              <parameters>
    },
    "policyRule": {
      "if": {
              <rule>
      },
      "then": {
        "effect": "<effect>"
      }
    }
  }
}

Metadane

Pierwsze trzy składniki to metadane zasad. Łatwo jest podać wartości dla tych składników, ponieważ wiemy, jaki jest cel tworzenia reguły. Tryb dotyczy przede wszystkim tagów i lokalizacji zasobu. Ponieważ nie musimy ograniczać oceny do zasobów obsługujących tagi, użyj wartości all dla elementu mode.

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

Parametry

Chociaż nie użyto parametru do zmiany oceny, chcemy użyć parametru , aby umożliwić zmianę parametru effect na potrzeby rozwiązywania problemów. effectType Definiujesz parametr i ograniczasz go tylko deny do parametrów i disabled. Te dwie opcje pasują do naszych wymagań biznesowych. Ukończony blok parametrów wygląda jak w następującym przykładzie:

"parameters": {
  "effectType": {
    "type": "string",
    "defaultValue": "Deny",
    "allowedValues": [
      "Deny",
      "Disabled"
    ],
    "metadata": {
      "displayName": "Effect",
      "description": "Enable or disable the execution of the policy"
    }
  }
},

Reguła zasad

Utworzenie reguły zasad to ostatni krok tworzenia niestandardowej definicji zasad. Zidentyfikowaliśmy dwie instrukcje do przetestowania dla:

  • Konto type magazynu to Microsoft.Storage/storageAccounts.
  • Konto supportsHttpsTrafficOnly magazynu nie truejest .

Ponieważ obie te instrukcje muszą być prawdziwe, użyj operatora logicznego allOf . effectType Przekaż parametr do efektu zamiast deklaracji statycznej. Ukończona reguła wygląda podobnie do następującego przykładu:

"if": {
  "allOf": [
    {
      "field": "type",
      "equals": "Microsoft.Storage/storageAccounts"
    },
    {
      "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
      "notEquals": "true"
    }
  ]
},
"then": {
  "effect": "[parameters('effectType')]"
}

Ukończona definicja

Oto kompletna definicja zawierająca wszystkie trzy części zasad:

{
  "properties": {
    "displayName": "Deny storage accounts not using only HTTPS",
    "description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
    "mode": "all",
    "parameters": {
      "effectType": {
        "type": "string",
        "defaultValue": "Deny",
        "allowedValues": [
          "Deny",
          "Disabled"
        ],
        "metadata": {
          "displayName": "Effect",
          "description": "Enable or disable the execution of the policy"
        }
      }
    },
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
          },
          {
            "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
            "notEquals": "true"
          }
        ]
      },
      "then": {
        "effect": "[parameters('effectType')]"
      }
    }
  }
}

Ukończonej definicji można użyć do utworzenia nowych zasad. Portal i każdy z zestawów SDK (interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell i interfejsu API REST) przyjmuje definicję w inny sposób, więc należy przejrzeć polecenia dla każdego z nich, aby zwalidować poprawność składni. Następnie przypisz ją za pomocą sparametryzowanego efektu do odpowiednich zasobów w celu zarządzania zabezpieczeniami kont magazynu.

Czyszczenie zasobów

Jeśli skończysz pracę z zasobami z tego samouczka, wykonaj następujące kroki, aby usunąć dowolne utworzone przypisania lub definicje:

  1. Wybierz pozycję Definicje (lub Przypisania, jeśli próbujesz usunąć przypisanie) w obszarze Tworzenie w lewej części strony usługi Azure Policy.

  2. Wyszukaj nowo utworzoną definicję inicjatywy lub zasad (albo przypisanie), którą chcesz usunąć.

  3. Kliknij prawym przyciskiem myszy wiersz albo wybierz wielokropek na końcu definicji lub przypisania, a następnie wybierz pozycję Usuń definicję (lub Usuń przypisanie).

Wykonaj przegląd

W tym samouczku pomyślnie wykonano następujące czynności:

  • Określono wymagania biznesowe
  • Zamapowano każde wymaganie na właściwość zasobu platformy Azure
  • Zamapowano właściwości na alias
  • Określono efekt do użycia
  • Utworzono definicję zasad

Następne kroki

Następnie za pomocą niestandardowej definicji zasad utwórz i przypisz zasady: