Udostępnij przez


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
  • Przypisz każde wymaganie do właściwości zasobu Azure
  • Mapowanie właściwości na alias
  • Określ, który efekt użyć
  • 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 mieć włączony protokół HTTPS.
  • HTTP musi być wyłączony dla każdego konta magazynu.

Twoje wymagania powinny wyraźnie identyfikować zarówno stany zasobów „do istnienia”, jak i „nie do istnienia”.

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 polityki dla konkretnych zadań. Użyj efektu wyłączonego i uczynić efekt parametrem 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 elementów tego samouczka:

  • Rozszerzenie usługi Azure Policy dla programu VS Code.
  • Szablony usługi Azure Resource Manager (szablony usługi ARM).
    • Eksportuj istniejący zasób.
    • Doświadczenie 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 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. Spójrz na stronę Eksportu szablonu w Ustawieniach w Azure Portal dla określonego zasobu.

Ostrzeżenie

Szablon ARM wyeksportowany przez Azure Portal nie można bezpośrednio wprowadzić do właściwości deployment szablonu w definicji zasad deployIfNotExists.

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

Wykonanie tej czynności dla konta przechowywania 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": []
  }
]

Pod properties znajduje się wartość o nazwie supportsHttpsTrafficOnly ustawiona na false. Ta nieruchomość wygląda na to, że może być tą, której szukamy. Ponadto, type zasobu 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, na karcie Zaawansowane dostępna jest opcja Wymagany transfer bezpieczeństwa. Ta właściwość ma opcje Wyłączone i Włączone. Ikona informacji zawiera więcej tekstu, który potwierdza, że ta opcja to prawdopodobnie to, czego szukamy. 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 szybkiego startu na GitHubie

Azure Quickstart Templates w usłudze GitHub mają setki szablonów 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 referencyjna zasobu

Aby zweryfikować, czy supportsHttpsTrafficOnly jest poprawną właściwością, sprawdź odniesienia do szablonu ARM dla zasobu konta magazynu u dostawcy usług magazynowych. 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.

Azure Resource Explorer

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ć według dostawców, subskrypcji, grup zasobów i zasobów.

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

Znajdź alias właściwości

Zidentyfikowaliśmy właściwość zasobu, ale musimy przypisać ją do aliasu.

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

  • Rozszerzenie usługi Azure Policy dla programu VS Code.
  • Azure CLI
  • 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.

Azure CLI

W Azure CLI, grupa poleceń az provider służy do wyszukiwania aliasów zasobów. Filtrujemy przestrzeń nazw Microsoft.Storage na podstawie wcześniej uzyskanych informacji o zasobie Azure.

# 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 widzimy alias obsługiwany przez konto magazynowania o nazwie supportsHttpsTrafficOnly. Istnienie tego aliasu oznacza, że możemy zapisać zasady, aby realizować 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 wcześniejszych szczegółowych informacji o zasobie platformy Azure.

# 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 Azure CLI, wyniki pokazują alias wspierany przez konta magazynu o nazwie supportsHttpsTrafficOnly.

Określ efekt 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. Audyt jest dobrym pierwszym wyborem dla skutku polityki w celu określenia, jaki jest wpływ polityki przed ustawieniem go na deny. Jednym ze sposobów na ułatwienie zmiany efektu dla przypisania jest jego sparametryzowanie. Zobacz parametry , aby uzyskać szczegółowe informacje.

Tworzenie definicji

Teraz mamy szczegóły właściwości oraz nazwę aliasu dla tych, którymi planujemy 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. Definiujesz parametr effectType i ograniczasz go tylko do deny 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"
    }
  }
},

Zasada polityki

Utworzenie reguły zasad to ostatni krok tworzenia niestandardowej definicji zasad. Zidentyfikowaliśmy dwa stwierdzenia, aby przetestować:

  • Konto magazynowe type jest Microsoft.Storage/storageAccounts.
  • Konto supportsHttpsTrafficOnly magazynu nie jest true.

Ponieważ oba te zdania muszą być prawdziwe, użyj logicznego operatora . 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, za pomocą sparametryzowanego efektu, przypisz go 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 udało Ci się pomyślnie wykonać następujące zadania:

  • Określono wymagania biznesowe
  • Przypisano każde wymaganie do właściwości zasobu 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: