Tutorial: Erstellen einer benutzerdefinierten Richtliniendefinition
Mit einer benutzerdefinierten Richtliniendefinition können Kunden eigene Regeln für die Verwendung von Azure definieren. Mit diesen Regeln wird häufig Folgendes erzwungen:
- Sicherheitsmaßnahmen:
- Kostenverwaltung:
- Organisationsspezifische Regeln (z. B. Benennung oder Speicherorte).
Unabhängig davon, welche geschäftlichen Gründe für die Erstellung einer benutzerdefinierten Richtlinie vorliegen, sind die Schritte zum Definieren der neuen benutzerdefinierten Richtlinie identisch.
Sehen Sie sich vor dem Erstellen einer benutzerdefinierten Richtlinie die Richtlinienbeispiele an, um zu ermitteln, ob bereits eine Richtlinie vorhanden ist, die Ihre Anforderungen erfüllt.
Der Ansatz zur Erstellung einer benutzerdefinierten Richtlinie umfasst die folgenden Schritte:
- Ermitteln Ihrer geschäftlichen Anforderungen
- Zuordnen der einzelnen Anforderungen zu einer Azure-Ressourceneigenschaft
- Zuordnen der Eigenschaft zu einem Alias
- Ermitteln der zu verwendenden Auswirkung
- Verfassen der Richtliniendefinition
Voraussetzungen
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Ermitteln der Anforderungen
Es ist wichtig, dass Sie sich vor dem Erstellen der Richtliniendefinition mit der Absicht der Richtlinie vertraut machen. Für dieses Tutorial verwenden Sie eine gängige Sicherheitsanforderung von Unternehmen, um die erforderlichen Schritte zu verdeutlichen:
- Für jedes Speicherkonto muss HTTPS aktiviert sein.
- Für jedes Speicherkonto muss HTTP deaktiviert sein.
In Ihren Anforderungen sollten die gewünschten und unerwünschten Ressourcenzustände jeweils eindeutig angegeben werden.
Wir haben zwar den erwarteten Zustand der Ressource definiert, aber wird haben noch nicht festgelegt, was mit nicht konformen Ressourcen passieren soll. Azure Policy unterstützt viele Effekte. Für dieses Tutorial definieren wir die geschäftliche Anforderung so, dass die Erstellung von Ressourcen verhindert wird, wenn sie mit den Geschäftsregeln nicht konform sind. Um dieses Ziel zu erreichen, verwenden wir die Auswirkung deny (Verweigern). Außerdem möchten wir die Möglichkeit haben, die Richtlinie für bestimmte Fälle auszusetzen. Verwenden Sie die Auswirkung disabled (Deaktiviert) und machen die Auswirkung zu einem Parameter in der Richtliniendefinition.
Ermitteln von Ressourceneigenschaften
Basierend auf der geschäftlichen Anforderung ist die Azure-Ressource, die mit Azure Policy überwacht werden soll, ein Speicherkonto. Wir wissen aber nicht, welche Eigenschaften in der Richtliniendefinition verwendet werden sollen. Da Azure Policy eine Evaluierung anhand der JSON-Darstellung der Ressource durchführt, müssen wir die Eigenschaften verstehen, die für diese Ressource verfügbar sind.
Es gibt viele Möglichkeiten, die Eigenschaften für eine Azure-Ressource zu ermitteln. In diesem Tutorial sehen wir uns die einzelnen Fälle an:
- Azure Policy-Erweiterung für VS Code.
- Azure Resource Manager-Vorlagen (ARM-Vorlagen).
- Export der vorhandenen Ressource.
- Umgebung für die Erstellung.
- Schnellstartvorlagen (GitHub).
- Vorlagenreferenzdokumente.
- Azure-Ressourcen-Explorer.
Anzeigen von Ressourcen in der VS Code-Erweiterung
Mit der VS Code-Erweiterung können Sie Ressourcen in Ihrer Umgebung durchsuchen und die Resource Manager-Eigenschaften der einzelnen Ressourcen anzeigen.
ARM-Vorlagen
Es gibt mehrere Möglichkeiten, sich eine ARM-Vorlage anzusehen, die die zu verwaltende Eigenschaft enthält.
Vorhandene Ressource im Portal
Am einfachsten finden Sie Eigenschaften, indem Sie sich eine vorhandene Ressource desselben Typs ansehen. Ressourcen, die bereits mit der zu erzwingenden Einstellung konfiguriert sind, enthalten auch den Wert für den Vergleich. Sehen Sie sich im Azure-Portal die Seite Exportvorlage unter Einstellungen für die jeweilige Ressource an.
Warnung
Die vom Azure-Portal exportierte ARM-Vorlage kann nicht direkt in die Eigenschaft deployment
für eine ARM-Vorlage in einer Richtliniendefinition vom Typ deployIfNotExists integriert werden.
Wenn Sie so für ein Speicherkonto vorgehen, wird eine Vorlage bereitgestellt, die der Vorlage in diesem Beispiel ähnelt:
"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": []
}
]
Unter properties
ist ein Wert namens supportsHttpsTrafficOnly
auf false
festgelegt. Diese Eigenschaft könnte die gesuchte Eigenschaft sein. Außerdem ist der type
Ressource Microsoft.Storage/storageAccounts
. Mit diesem Typ können wir die Richtlinie auf die Ressourcen dieses Typs beschränken.
Erstellen einer Ressource im Portal
Eine weitere Möglichkeit zur Verwendung des Portals ist die Umgebung für die Ressourcenerstellung. Wenn Sie ein Speicherkonto über das Portal erstellen, können Sie auch auf der Registerkarte Erweitert die Option Sicherheitstransfer erforderlich verwenden. Diese Eigenschaft verfügt über die Optionen Deaktiviert und Aktiviert. Für das Infosymbol wird weiterer Text angezeigt, um zu bestätigen, dass es sich bei dieser Option wahrscheinlich um die gewünschte Eigenschaft handelt. Im Portal wird in diesem Fenster aber nicht der Name der Eigenschaft angegeben.
Die Registerkarte Bewerten + erstellen enthält unten den Link Vorlage zur Automatisierung herunterladen. Wenn Sie den Link auswählen, wird die Vorlage geöffnet, mit der die konfigurierte Ressource erstellt wird. In diesem Fall werden zwei wichtige Informationen angezeigt:
...
"supportsHttpsTrafficOnly": {
"type": "bool"
}
...
"properties": {
"accessTier": "[parameters('accessTier')]",
"supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...
Hier wird der Eigenschaftentyp angegeben und außerdem bestätigt, dass es sich bei supportsHttpsTrafficOnly
um die gewünschte Eigenschaft handelt.
Schnellstartvorlagen auf GitHub
Unter Azure-Schnellstartvorlagen auf GitHub finden Sie Hunderte von ARM-Vorlagen, die für unterschiedliche Ressourcen bestimmt sind. Diese Vorlagen können eine gute Möglichkeit darstellen, um nach der gewünschten Ressourceneigenschaft zu suchen. Bei einigen Eigenschaften kann es erscheinen, als ob sie den gewünschten Zweck erfüllen, während sie eigentlich für die Steuerung eines anderen Sachverhalts gedacht sind.
Referenzdokumente zu Ressourcen
Gehen Sie wie folgt vor, um sich zu vergewissern, dass supportsHttpsTrafficOnly
die richtige Eigenschaft ist: Überprüfen Sie die ARM-Vorlagenreferenz für die Speicherkontoressource des Speicheranbieters. Das properties-Objekt verfügt über eine Liste mit gültigen Parametern. Wenn Sie die StorageAccountPropertiesCreateParameters
-Objektverknüpfung auswählen, wird eine Tabelle mit akzeptablen Eigenschaften angezeigt. supportsHttpsTrafficOnly
ist vorhanden, und die Beschreibung passt zu den zu erfüllenden geschäftlichen Anforderungen.
Azure-Ressourcen-Explorer
Eine weitere Möglichkeit zum Erkunden Ihrer Azure-Ressourcen ist der Azure-Ressourcen-Explorer (Vorschauversion). Da bei diesem Tool der Kontext Ihres Abonnements verwendet wird, müssen Sie sich auf der Website mit Ihren Azure-Anmeldeinformationen authentifizieren. Nach der Authentifizierung können Sie nach Anbietern, Abonnements, Ressourcengruppen und Ressourcen suchen.
Suchen Sie nach einer Speicherkontoressource, und sehen Sie sich die Eigenschaften an. Die Eigenschaft supportsHttpsTrafficOnly
wird hier ebenfalls angezeigt. Wenn wir die Registerkarte Dokumentation wählen, ist erkennbar, dass die Beschreibung der Eigenschaft mit den zuvor ermittelten Informationen in den Referenzdokumenten übereinstimmt.
Suchen nach dem Eigenschaftenalias
Wir haben die Ressourceneigenschaft identifiziert, aber wir müssen diese Eigenschaft einem Alias zuordnen.
Es gibt verschiedene Möglichkeiten, die Aliase für eine Azure-Ressource zu ermitteln. In diesem Tutorial sehen wir uns die einzelnen Fälle an:
- Azure Policy-Erweiterung für VS Code.
- Azure-Befehlszeilenschnittstelle.
- Azure PowerShell.
Abrufen von Aliasen in der VS Code-Erweiterung
Mit der Azure Policy-Erweiterung für die VS Code-Erweiterung können Sie ganz einfach Ihre Ressourcen durchsuchen und Aliase ermitteln.
Hinweis
Die VS Code-Erweiterung stellt nur Eigenschaften des Resource Manager-Modus zur Verfügung und zeigt keine Eigenschaften des Ressourcenanbietermodus an.
Azure CLI
In der Azure-Befehlszeilenschnittstelle wird die Befehlsgruppe az provider
verwendet, um nach Ressourcenaliasen zu suchen. Wir filtern anhand der Details, die wir zuvor zur Azure-Ressource erhalten haben, nach dem Namespace Microsoft.Storage
.
# 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"
In den Ergebnissen wird ein Alias angezeigt, der von den Speicherkonten unterstützt wird und den Namen supportsHttpsTrafficOnly
hat. Das Vorhandensein dieses Alias bedeutet, dass wir die Richtlinie schreiben können, um unsere geschäftlichen Anforderungen zu erzwingen!
Azure PowerShell
In Azure PowerShell wird das Cmdlet Get-AzPolicyAlias
verwendet, um nach Ressourcenaliasen zu suchen. Filtern Sie anhand der Details, die wir zuvor zur Azure-Ressource erhalten haben, nach dem Namespace Microsoft.Storage
.
# 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
Wie in der Azure-Befehlszeilenschnittstelle auch, wird in den Ergebnissen ein Alias angezeigt, der von den Speicherkonten unterstützt wird und den Namen supportsHttpsTrafficOnly
hat.
Ermitteln der zu verwendenden Auswirkung
Die Entscheidung, was mit Ihren nicht konformen Ressourcen passieren soll, ist fast so wichtig wie die Entscheidung, was überhaupt evaluiert werden soll. Jede mögliche Reaktion auf eine nicht konforme Ressource wird als Auswirkung bezeichnet. Mit der Auswirkung wird gesteuert, ob die nicht konforme Ressource protokolliert oder blockiert wird, über angefügte Daten verfügt oder mit einer zugeordneten Bereitstellung versehen ist, um die Ressource wieder in einen konformen Zustand zu versetzen.
Für unser Beispiel ist deny
die passende Auswirkung, weil wir nicht möchten, dass in unserer Azure-Umgebung nicht konforme Ressourcen erstellt werden. Die Überwachung ist eine gute erste Wahl für eine Richtlinienauswirkung, um vor dem Festlegen einer Richtlinie auf deny
zu ermitteln, welche Auswirkung damit verbunden ist. Eine Möglichkeit, die Änderung der Auswirkung pro Zuweisung zu vereinfachen, ist die Parametrisierung der Auswirkung. Weitere Informationen finden Sie unter Parameter.
Verfassen der Definition
Wir verfügen jetzt über die Eigenschaftendetails und den Alias für die geplante Verwaltung. Als Nächstes verfassen wir die eigentliche Richtlinienregel. Falls Sie mit der Richtliniensprache noch nicht vertraut sind, helfen Ihnen die Informationen zur Strukturierung der Richtliniendefinition weiter, die unter Struktur von Richtliniendefinitionen angegeben sind. Hier ist eine leere Vorlage zu einer Richtliniendefinition angegeben:
{
"properties": {
"displayName": "<displayName>",
"description": "<description>",
"mode": "<mode>",
"parameters": {
<parameters>
},
"policyRule": {
"if": {
<rule>
},
"then": {
"effect": "<effect>"
}
}
}
}
Metadaten
Die ersten drei Komponenten sind Richtlinienmetadaten. Diese Komponenten sind einfach anzugebende Werte, da wir wissen, wofür wir die Regel erstellen. Beim Modus geht es hauptsächlich um Tags und den Ressourcenspeicherort. Da wir die Evaluierung nicht auf Ressourcen beschränken müssen, die Tags unterstützen, verwenden wir für mode
den Wert all.
"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",
Parameter
Wir haben zwar keinen Parameter für die Änderung der Evaluierung verwendet, aber wir möchten einen Parameter nutzen, um das Ändern der effect
für die Problembehandlung zuzulassen. Sie definieren einen effectType
-Parameter und beschränken ihn nur auf deny
und disabled
. Diese beiden Optionen entsprechen unseren geschäftlichen Anforderungen. Der fertige Parameterblock sieht wie im folgenden Beispiel aus:
"parameters": {
"effectType": {
"type": "string",
"defaultValue": "Deny",
"allowedValues": [
"Deny",
"Disabled"
],
"metadata": {
"displayName": "Effect",
"description": "Enable or disable the execution of the policy"
}
}
},
Richtlinienregel
Das Verfassen der Richtlinienregel ist der letzte Schritt bei der Erstellung der benutzerdefinierten Richtliniendefinition. Wir haben zwei Anweisungen für den Test identifiziert:
- Das Speicherkonto
type
istMicrosoft.Storage/storageAccounts
. - Das Speicherkonto
supportsHttpsTrafficOnly
ist nichttrue
.
Da diese beiden Anweisungen wahr sein müssen, verwenden wir allOf
als logischen Operator. Übergeben Sie den Parameter effectType
an die Auswirkung, anstatt eine statische Deklaration zu verwenden. Die fertige Regel sieht wie in diesem Beispiel aus:
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
{
"field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
"notEquals": "true"
}
]
},
"then": {
"effect": "[parameters('effectType')]"
}
Fertige Definition
Nachdem alle drei Teile der Richtlinie festgelegt wurden, sieht die fertige Definition wie folgt aus:
{
"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')]"
}
}
}
}
Die fertige Definition kann genutzt werden, um eine neue Richtlinie zu erstellen. Vom Portal und den einzelnen SDKs (Azure CLI, Azure PowerShell und REST-API) wird die Definition auf unterschiedliche Weise akzeptiert. Sehen Sie sich also jeweils die Befehle genau an, um die richtige Nutzung sicherzustellen. Führen Sie anschließend die Zuweisung zu den passenden Ressourcen durch, indem Sie die parametrisierte Auswirkung verwenden, um die Sicherheit Ihrer Speicherkonten zu verwalten.
Bereinigen von Ressourcen
Wenn Sie die Ressourcen dieses Tutorials nicht mehr benötigen, führen Sie die folgenden Schritte aus, um die erstellten Zuweisungen oder Definitionen zu löschen:
Klicken Sie links auf der Seite „Azure Policy“ unter Erstellung auf Definitionen (oder auf Zuweisungen, wenn Sie eine Zuweisung löschen möchten).
Suchen Sie nach der neuen Initiativ- oder Richtliniendefinition (bzw. der Zuweisung), die Sie entfernen möchten.
Klicken Sie mit der rechten Maustaste auf die Zeile, oder wählen Sie die Auslassungspunkte am Ende der Definition (oder Zuweisung), und wählen Sie anschließend Definition löschen (bzw. Zuweisung löschen) aus.
Überprüfung
In diesem Tutorial haben Sie folgende Aufgaben durchgeführt:
- Ermitteln Ihrer geschäftlichen Anforderungen
- Zuordnen der einzelnen Anforderungen zu einer Azure-Ressourceneigenschaft
- Zuordnen der Eigenschaft zu einem Alias
- Ermitteln der zu verwendenden Auswirkung
- Verfassen der Richtliniendefinition
Nächste Schritte
Als Nächstes verwenden Sie Ihre benutzerdefinierte Richtliniendefinition, um eine Richtlinie zu erstellen und zuzuweisen: