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 .
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 toMicrosoft.Storage/storageAccounts
. - Konto
supportsHttpsTrafficOnly
magazynu nietrue
jest .
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:
Wybierz pozycję Definicje (lub Przypisania, jeśli próbujesz usunąć przypisanie) w obszarze Tworzenie w lewej części strony usługi Azure Policy.
Wyszukaj nowo utworzoną definicję inicjatywy lub zasad (albo przypisanie), którą chcesz usunąć.
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: