Tutorial: Erstellen einer benutzerdefinierten RichtliniendefinitionTutorial: Create a custom policy definition

Mit einer benutzerdefinierten Richtliniendefinition können Kunden eigene Regeln für die Verwendung von Azure definieren.A custom policy definition allows customers to define their own rules for using Azure. Mit diesen Regeln wird häufig Folgendes erzwungen:These rules often enforce:

  • SicherheitsmaßnahmenSecurity practices
  • KostenverwaltungCost management
  • Organisationsspezifische Regeln (z. B. Benennung oder Speicherorte)Organization-specific rules (like naming or locations)

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.Whatever the business driver for creating a custom policy, the steps are the same for defining the new custom policy.

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.Before creating a custom policy, check the policy samples to see if a policy that matches your needs already exists.

Der Ansatz zur Erstellung einer benutzerdefinierten Richtlinie umfasst die folgenden Schritte:The approach to creating a custom policy follows these steps:

  • Ermitteln Ihrer geschäftlichen AnforderungenIdentify your business requirements
  • Zuordnen der einzelnen Anforderungen zu einer Azure-RessourceneigenschaftMap each requirement to an Azure resource property
  • Zuordnen der Eigenschaft zu einem AliasMap the property to an alias
  • Ermitteln der zu verwendenden AuswirkungDetermine which effect to use
  • Verfassen der RichtliniendefinitionCompose the policy definition

VoraussetzungenPrerequisites

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

Ermitteln der AnforderungenIdentify requirements

Es ist wichtig, dass Sie sich vor dem Erstellen der Richtliniendefinition mit der Absicht der Richtlinie vertraut machen.Before creating the policy definition, it's important to understand the intent of the policy. Für dieses Tutorial verwenden wir eine gängige Sicherheitsanforderung von Unternehmen, um die erforderlichen Schritte zu verdeutlichen:For this tutorial, we'll use a common enterprise security requirement as the goal to illustrate the steps involved:

  • Für jedes Speicherkonto muss HTTPS aktiviert sein.Each storage account must be enabled for HTTPS
  • Für jedes Speicherkonto muss HTTP deaktiviert sein.Each storage account must be disabled for HTTP

In Ihren Anforderungen sollten die gewünschten und unerwünschten Ressourcenzustände jeweils eindeutig angegeben werden.Your requirements should clearly identify both the "to be" and the "not to be" resource states.

Wir haben zwar den erwarteten Zustand der Ressource definiert, aber wird haben noch nicht festgelegt, was mit nicht konformen Ressourcen passieren soll.While we've defined the expected state of the resource, we've not yet defined what we want done with non-compliant resources. Azure Policy unterstützt verschiedene Auswirkungen.Azure Policy supports a number of effects. 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.For this tutorial, we'll define the business requirement as preventing the creation of resources if they aren't compliant with the business rules. Um dieses Ziel zu erreichen, verwenden wir die Auswirkung Deny (Verweigern).To meet this goal, we'll use the Deny effect. Außerdem möchten wir die Möglichkeit haben, die Richtlinie für bestimmte Fälle auszusetzen.We also want the option to suspend the policy for specific assignments. Hierfür verwenden wir die Auswirkung Disabled (Deaktiviert) und machen die Auswirkung zu einem Parameter in der Richtliniendefinition.As such, we'll use the Disabled effect and make the effect a parameter in the policy definition.

Ermitteln von RessourceneigenschaftenDetermine resource properties

Basierend auf der geschäftlichen Anforderung ist die Azure-Ressource, die mit Azure Policy überwacht werden soll, ein Speicherkonto.Based on the business requirement, the Azure resource to audit with Azure Policy is a storage account. Wir wissen aber nicht, welche Eigenschaften in der Richtliniendefinition verwendet werden sollen.However, we don't know the properties to use in the policy definition. 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.Azure Policy evaluates against the JSON representation of the resource, so we'll need to understand the properties available on that resource.

Es gibt viele Möglichkeiten, die Eigenschaften für eine Azure-Ressource zu ermitteln.There are many ways to determine the properties for an Azure resource. In diesem Tutorial sehen wir uns die einzelnen Fälle an:We'll look at each for this tutorial:

  • Azure Policy-Erweiterung für VS CodeAzure Policy extension for VS Code
  • Resource Manager-VorlagenResource Manager templates
    • Export der vorhandenen RessourceExport existing resource
    • Umgebung für die ErstellungCreation experience
    • Schnellstartvorlagen (GitHub)Quickstart templates (GitHub)
    • VorlagenreferenzdokumenteTemplate reference docs
  • Azure-Ressourcen-ExplorerAzure Resource Explorer

Anzeigen von Ressourcen in der VS Code-ErweiterungView resources in VS Code extension

Mit der VS Code-Erweiterung können Sie Ressourcen in Ihrer Umgebung durchsuchen und die Resource Manager-Eigenschaften der einzelnen Ressourcen anzeigen.The VS Code extension can be used to browse resources in your environment and see the Resource Manager properties on each resource.

Resource Manager-VorlagenResource Manager templates

Es gibt mehrere Möglichkeiten, sich eine Resource Manager-Vorlage anzusehen, die die zu verwaltende Eigenschaft enthält.There are several ways to look at a Resource Manager template that includes the property you're looking to manage.

Vorhandene Ressource im PortalExisting resource in the portal

Am einfachsten finden Sie Eigenschaften, indem Sie sich eine vorhandene Ressource desselben Typs ansehen.The simplest way to find properties is to look at an existing resource of the same type. Ressourcen, die bereits mit der zu erzwingenden Einstellung konfiguriert sind, enthalten auch den Wert für den Vergleich.Resources already configured with the setting you want to enforce also provide the value to compare against. Sehen Sie sich im Azure-Portal die Seite Exportvorlage (unter Einstellungen) für die jeweilige Ressource an.Look at the Export template page (under Settings) in the Azure portal for that specific resource.

Seite zum Exportieren der Vorlage für eine vorhandene Ressource

Wenn Sie so für ein Speicherkonto vorgehen, wird eine Vorlage bereitgestellt, die der Vorlage in diesem Beispiel ähnelt:Doing so for a storage account reveals a template similar to this example:

...
"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 befindet sich der Wert supportsHttpsTrafficOnly, der auf false festgelegt ist.Under properties is a value named supportsHttpsTrafficOnly set to false. Diese Eigenschaft könnte die gesuchte Eigenschaft sein.This property looks like it may be the property we're looking for. Darüber hinaus lautet der Typ (type) der Ressource Microsoft.Storage/storageAccounts.Also, the type of the resource is Microsoft.Storage/storageAccounts. Mit diesem Typ können wir die Richtlinie auf die Ressourcen dieses Typs beschränken.The type lets us limit the policy to only resources of this type.

Erstellen einer Ressource im PortalCreate a resource in the portal

Eine weitere Möglichkeit zur Verwendung des Portals ist die Umgebung für die Ressourcenerstellung.Another way through the portal is the resource creation experience. Beim Erstellen eines Speicherkontos über das Portal können Sie auch auf der Registerkarte Erweitert die Option Sicherheitstransfer erforderlich verwenden.While creating a storage account through the portal, an option under the Advanced tab is Security transfer required. Diese Eigenschaft verfügt über die Optionen Deaktiviert und Aktiviert.This property has Disabled and Enabled options. Für das Infosymbol wird zusätzlicher Text angezeigt, um zu bestätigen, dass es sich bei dieser Option wahrscheinlich um die gewünschte Eigenschaft handelt.The info icon has additional text that confirms this option is likely the property we want. Im Portal wird in diesem Fenster aber nicht der Name der Eigenschaft angegeben.However, the portal doesn't tell us the property name on this screen.

Die Registerkarte Bewerten + erstellen enthält unten den Link Vorlage zur Automatisierung herunterladen.On the Review + create tab, a link is at the bottom of the page to Download a template for automation. Wenn Sie den Link auswählen, wird die Vorlage geöffnet, mit der die konfigurierte Ressource erstellt wird.Selecting the link opens the template that creates the resource we configured. In diesem Fall werden zwei wichtige Informationen angezeigt:In this case, we see two key pieces of information:

...
"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.This information tells us the property type and also confirms supportsHttpsTrafficOnly is the property we're looking for.

Schnellstartvorlagen auf GitHubQuickstart templates on GitHub

Unter Azure-Schnellstartvorlagen auf GitHub finden Sie Hunderte von Resource Manager-Vorlagen, die für unterschiedliche Ressourcen bestimmt sind.The Azure quickstart templates on GitHub has hundreds of Resource Manager templates built for different resources. Diese Vorlagen können eine gute Möglichkeit darstellen, um nach der gewünschten Ressourceneigenschaft zu suchen.These templates can be a great way to find the resource property you're looking for. 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.Some properties may appear to be what you're looking for, but control something else.

Referenzdokumente zu RessourcenResource reference docs

Gehen Sie wie folgt vor, um sich zu vergewissern, dass supportsHttpsTrafficOnly die richtige Eigenschaft ist: Überprüfen Sie die Resource Manager-Vorlagenreferenz für die Speicherkontoressource des Speicheranbieters.To validate supportsHttpsTrafficOnly is correct property, check the Resource Manager template reference for the storage account resource on the storage provider. Das properties-Objekt verfügt über eine Liste mit gültigen Parametern.The properties object has a list of valid parameters. Wenn Sie den Link StorageAccountPropertiesCreateParameters-object auswählen, wird eine Tabelle mit zulässigen Eigenschaften angezeigt.Selecting the StorageAccountPropertiesCreateParameters-object link shows a table of acceptable properties. supportsHttpsTrafficOnly ist vorhanden, und die Beschreibung passt zu den zu erfüllenden geschäftlichen Anforderungen.supportsHttpsTrafficOnly is present and the description matches what we are looking for to meet the business requirements.

Azure-Ressourcen-ExplorerAzure Resource Explorer

Eine weitere Möglichkeit zum Erkunden Ihrer Azure-Ressourcen ist der Azure-Ressourcen-Explorer (Vorschauversion).Another way to explore your Azure resources is through the Azure Resource Explorer (Preview). Da bei diesem Tool der Kontext Ihres Abonnements verwendet wird, müssen Sie sich auf der Website mit Ihren Azure-Anmeldeinformationen authentifizieren.This tool uses the context of your subscription, so you need to authenticate to the website with your Azure credentials. Nach der Authentifizierung können Sie nach Anbietern, Abonnements, Ressourcengruppen und Ressourcen suchen.Once authenticated, you can browse by providers, subscriptions, resource groups, and resources.

Suchen Sie nach einer Speicherkontoressource, und sehen Sie sich die Eigenschaften an.Locate a storage account resource and look at the properties. Hier wird auch die Eigenschaft supportsHttpsTrafficOnly angezeigt.We see the supportsHttpsTrafficOnly property here as well. Wenn wir die Registerkarte Dokumentation wählen, ist erkennbar, dass die Beschreibung der Eigenschaft mit den zuvor ermittelten Informationen in den Referenzdokumenten übereinstimmt.Selecting the Documentation tab, we see that the property description matches what we found in the reference docs earlier.

Suchen nach dem EigenschaftenaliasFind the property alias

Wir haben die Ressourceneigenschaft identifiziert, aber wir müssen diese Eigenschaft einem Alias zuordnen.We've identified the resource property, but we need to map that property to an alias.

Es gibt verschiedene Möglichkeiten, die Aliase für eine Azure-Ressource zu ermitteln.There are a few ways to determine the aliases for an Azure resource. In diesem Tutorial sehen wir uns die einzelnen Fälle an:We'll look at each for this tutorial:

  • Azure Policy-Erweiterung für VS CodeAzure Policy extension for VS Code
  • Azure-BefehlszeilenschnittstelleAzure CLI
  • Azure PowerShellAzure PowerShell
  • Azure Resource GraphAzure Resource Graph

Abrufen von Aliasen in der VS Code-ErweiterungGet aliases in VS Code extension

Mit der Azure Policy-Erweiterung für die VS Code-Erweiterung können Sie ganz einfach Ihre Ressourcen durchsuchen und Aliase ermitteln.The Azure Policy extension for VS Code extension makes it easy to browse your resources and discover aliases.

Azure-BefehlszeilenschnittstelleAzure CLI

In der Azure-Befehlszeilenschnittstelle wird die Befehlsgruppe az provider verwendet, um nach Ressourcenaliasen zu suchen.In Azure CLI, the az provider command group is used to search for resource aliases. Wir filtern anhand der Details, die wir zuvor zur Azure-Ressource erhalten haben, nach dem Namespace Microsoft.Storage.We'll filter for the Microsoft.Storage namespace based on the details we got about the Azure resource earlier.

# 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.In the results, we see an alias supported by the storage accounts named supportsHttpsTrafficOnly. Das Vorhandensein dieses Alias bedeutet, dass wir die Richtlinie schreiben können, um unsere geschäftlichen Anforderungen zu erzwingen!This existence of this alias means we can write the policy to enforce our business requirements!

Azure PowerShellAzure PowerShell

In Azure PowerShell wird das Cmdlet Get-AzPolicyAlias verwendet, um nach Ressourcenaliasen zu suchen.In Azure PowerShell, the Get-AzPolicyAlias cmdlet is used to search for resource aliases. Wir filtern anhand der Details, die wir zuvor zur Azure-Ressource erhalten haben, nach dem Namespace Microsoft.Storage.We'll filter for the Microsoft.Storage namespace based on the details we got about the Azure resource earlier.

# 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.Like Azure CLI, the results show an alias supported by the storage accounts named supportsHttpsTrafficOnly.

Azure Resource GraphAzure Resource Graph

Azure Resource Graph ist ein neuer Dienst.Azure Resource Graph is a new service. Mit diesem Dienst ist noch ein weiteres Verfahren zum Suchen nach Eigenschaften von Azure-Ressourcen möglich.It enables another method to find properties of Azure resources. Hier ist eine Beispielabfrage für die Suche nach einem einzelnen Speicherkonto mit Resource Graph angegeben:Here is a sample query for looking at a single storage account with Resource Graph:

where type=~'microsoft.storage/storageaccounts'
| limit 1
az graph query -q "where type=~'microsoft.storage/storageaccounts' | limit 1"
Search-AzGraph -Query "where type=~'microsoft.storage/storageaccounts' | limit 1"

Die Ergebnisse ähneln den Daten, die in den Resource Manager-Vorlagen enthalten sind und über den Azure-Ressourcen-Explorer bereitgestellt werden.The results look similar to what we see in the Resource Manager templates and through the Azure Resource Explorer. Azure Resource Graph-Ergebnisse können aber auch Aliasdetails enthalten, indem die Projektion für den Aliasarray ausgeführt wird:However, Azure Resource Graph results can also include alias details by projecting the aliases array:

where type=~'microsoft.storage/storageaccounts'
| limit 1
| project aliases
az graph query -q "where type=~'microsoft.storage/storageaccounts' | limit 1 | project aliases"
Search-AzGraph -Query "where type=~'microsoft.storage/storageaccounts' | limit 1 | project aliases"

Hier ist eine Beispielausgabe eines Speicherkontos für Aliase angegeben:Here is example output from a storage account for aliases:

"aliases": {
    "Microsoft.Storage/storageAccounts/accessTier": null,
    "Microsoft.Storage/storageAccounts/accountType": "Standard_LRS",
    "Microsoft.Storage/storageAccounts/enableBlobEncryption": true,
    "Microsoft.Storage/storageAccounts/enableFileEncryption": true,
    "Microsoft.Storage/storageAccounts/encryption": {
        "keySource": "Microsoft.Storage",
        "services": {
            "blob": {
                "enabled": true,
                "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
            },
            "file": {
                "enabled": true,
                "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
            }
        }
    },
    "Microsoft.Storage/storageAccounts/encryption.keySource": "Microsoft.Storage",
    "Microsoft.Storage/storageAccounts/encryption.keyvaultproperties.keyname": null,
    "Microsoft.Storage/storageAccounts/encryption.keyvaultproperties.keyvaulturi": null,
    "Microsoft.Storage/storageAccounts/encryption.keyvaultproperties.keyversion": null,
    "Microsoft.Storage/storageAccounts/encryption.services": {
        "blob": {
            "enabled": true,
            "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
        },
        "file": {
            "enabled": true,
            "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
        }
    },
    "Microsoft.Storage/storageAccounts/encryption.services.blob": {
        "enabled": true,
        "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
    },
    "Microsoft.Storage/storageAccounts/encryption.services.blob.enabled": true,
    "Microsoft.Storage/storageAccounts/encryption.services.file": {
        "enabled": true,
        "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
    },
    "Microsoft.Storage/storageAccounts/encryption.services.file.enabled": true,
    "Microsoft.Storage/storageAccounts/networkAcls": {
        "bypass": "AzureServices",
        "defaultAction": "Allow",
        "ipRules": [],
        "virtualNetworkRules": []
    },
    "Microsoft.Storage/storageAccounts/networkAcls.bypass": "AzureServices",
    "Microsoft.Storage/storageAccounts/networkAcls.defaultAction": "Allow",
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules": [],
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]": [],
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action": [],
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*]": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*].action": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*].id": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*].state": [],
    "Microsoft.Storage/storageAccounts/primaryEndpoints": {
        "blob": "https://mystorageaccount.blob.core.windows.net/",
        "file": "https://mystorageaccount.file.core.windows.net/",
        "queue": "https://mystorageaccount.queue.core.windows.net/",
        "table": "https://mystorageaccount.table.core.windows.net/"
    },
    "Microsoft.Storage/storageAccounts/primaryEndpoints.blob": "https://mystorageaccount.blob.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.file": "https://mystorageaccount.file.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.queue": "https://mystorageaccount.queue.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.table": "https://mystorageaccount.table.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.web": null,
    "Microsoft.Storage/storageAccounts/primaryLocation": "eastus2",
    "Microsoft.Storage/storageAccounts/provisioningState": "Succeeded",
    "Microsoft.Storage/storageAccounts/sku.name": "Standard_LRS",
    "Microsoft.Storage/storageAccounts/sku.tier": "Standard",
    "Microsoft.Storage/storageAccounts/statusOfPrimary": "available",
    "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly": false
}

Azure Resource Graph kann mit Cloud Shell verwendet werden. Dies ist eine schnelle und einfache Methode zum Erkunden der Eigenschaften Ihrer Ressourcen.Azure Resource Graph can be used through Cloud Shell, making it a fast and easy way to explore the properties of your resources.

Ermitteln der zu verwendenden AuswirkungDetermine the effect to use

Die Entscheidung, was mit Ihren nicht konformen Ressourcen passieren soll, ist fast so wichtig wie die Entscheidung, was überhaupt evaluiert werden soll.Deciding what to do with your non-compliant resources is nearly as important as deciding what to evaluate in the first place. Jede mögliche Reaktion auf eine nicht konforme Ressource wird als Auswirkung bezeichnet.Each possible response to a non-compliant resource is called an effect. 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.The effect controls if the non-compliant resource is logged, blocked, has data appended, or has a deployment associated to it for putting the resource back into a compliant state.

Für unser Beispiel ist „Deny“ die passende Auswirkung, da wir nicht möchten, dass in unserer Azure-Umgebung nicht konforme Ressourcen erstellt werden.For our example, Deny is the effect we want as we do not want non-compliant resources created in our Azure environment. 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.Audit is a good first choice for a policy effect to determine what the impact of a policy is before setting it to Deny. Eine Möglichkeit, die Änderung der Auswirkung pro Zuweisung zu vereinfachen, ist die Parametrisierung der Auswirkung.One way to make changing the effect per assignment easier is to parameterize the effect. Genauere Informationen zur Vorgehensweise finden Sie unter Parameter.See parameters below for the details on how.

Verfassen der DefinitionCompose the definition

Wir verfügen jetzt über die Eigenschaftendetails und den Alias für die geplante Verwaltung.We now have the property details and alias for what we plan to manage. Als Nächstes verfassen wir die eigentliche Richtlinienregel.Next, we'll compose the policy rule itself. 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.If you aren't yet familiar with the policy language, reference policy definition structure for how to structure the policy definition. Hier ist eine leere Vorlage zu einer Richtliniendefinition angegeben:Here is an empty template of what a policy definition looks like:

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

MetadatenMetadata

Die ersten drei Komponenten sind Richtlinienmetadaten.The first three components are policy metadata. Diese Komponenten sind einfach anzugebende Werte, da wir wissen, wofür wir die Regel erstellen.These components are easy to provide values for since we know what we are creating the rule for. Beim Modus geht es hauptsächlich um Tags und den Ressourcenspeicherort.Mode is primarily about tags and resource location. Da wir die Evaluierung nicht auf Ressourcen beschränken müssen, die Tags unterstützen, verwenden wir für mode den Wert all.Since we don't need to limit evaluation to resources that support tags, we'll use the all value for 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",

ParameterParameters

Wir haben zwar keinen Parameter für die Änderung der Evaluierung verwendet, aber wir möchten einen Parameter nutzen, um das Ändern der Auswirkung für die Problembehandlung zuzulassen.While we didn't use a parameter for changing the evaluation, we do want to use a parameter to allow changing the effect for troubleshooting. Wir definieren den Parameter effectType und beschränken ihn nur auf Deny und Disabled.We'll define an effectType parameter and limit it to only Deny and Disabled. Diese beiden Optionen entsprechen unseren geschäftlichen Anforderungen.These two options match our business requirements. Der fertige Parameterblock sieht wie im folgenden Beispiel aus:The finished parameters block looks like this example:

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

RichtlinienregelPolicy rule

Das Verfassen der Richtlinienregel ist der letzte Schritt bei der Erstellung der benutzerdefinierten Richtliniendefinition.Composing the policy rule is the final step in building our custom policy definition. Wir haben zwei Anweisungen für den Test identifiziert:We've identified two statements to test for:

  • Sicherstellung, dass der Typ (type) des Speicherkontos Microsoft.Storage/storageAccounts lautet.That the storage account type is Microsoft.Storage/storageAccounts
  • Sicherstellung, dass für das Speicherkonto supportsHttpsTrafficOnly nicht true festgelegt ist.That the storage account supportsHttpsTrafficOnly isn't true

Da diese beiden Anweisungen wahr sein müssen, verwenden wir allOf als logischen Operator.Since we need both of these statements to be true, we'll use the allOf logical operator. Wir übergeben den Parameter effectType an die Auswirkung, anstatt eine statische Deklaration zu verwenden.We'll pass the effectType parameter to the effect instead of making a static declaration. Die fertige Regel sieht wie in diesem Beispiel aus:Our finished rule looks like this example:

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

Fertige DefinitionCompleted definition

Nachdem alle drei Teile der Richtlinie festgelegt wurden, sieht die fertige Definition wie folgt aus:With all three parts of the policy defined, here is our completed definition:

{
    "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.The completed definition can be used to create a new policy. 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.Portal and each SDK (Azure CLI, Azure PowerShell, and REST API) accept the definition in different ways, so review the commands for each to validate correct usage. 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.Then assign it, using the parameterized effect, to appropriate resources to manage the security of your storage accounts.

Bereinigen von RessourcenClean up resources

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:If you're done working with resources from this tutorial, use the following steps to delete any of the assignments or definitions created above:

  1. Klicken Sie links auf der Seite „Azure Policy“ unter Erstellung auf Definitionen (oder auf Zuweisungen, wenn Sie eine Zuweisung löschen möchten).Select Definitions (or Assignments if you're trying to delete an assignment) under Authoring in the left side of the Azure Policy page.

  2. Suchen Sie nach der neuen Initiativ- oder Richtliniendefinition (bzw. der Zuweisung), die Sie entfernen möchten.Search for the new initiative or policy definition (or assignment) you want to remove.

  3. 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.Right-click the row or select the ellipses at the end of the definition (or assignment), and select Delete definition (or Delete assignment).

ÜberprüfungReview

In diesem Tutorial haben Sie folgende Aufgaben durchgeführt:In this tutorial, you successfully accomplished the following tasks:

  • Ermitteln Ihrer geschäftlichen AnforderungenIdentified your business requirements
  • Zuordnen der einzelnen Anforderungen zu einer Azure-RessourceneigenschaftMapped each requirement to an Azure resource property
  • Zuordnen der Eigenschaft zu einem AliasMapped the property to an alias
  • Ermitteln der zu verwendenden AuswirkungDetermined the effect to use
  • Verfassen der RichtliniendefinitionComposed the policy definition

Nächste SchritteNext steps

Als Nächstes verwenden Sie Ihre benutzerdefinierte Richtliniendefinition, um eine Richtlinie zu erstellen und zuzuweisen:Next, use your custom policy definition to create and assign a policy: