Entwerfen von Workflows für Policy-as-CodeDesign Policy as Code workflows

Je weiter Sie Ihre Cloudgovernance entwickeln, desto mehr werden Sie von der manuellen Verwaltung jeder Richtliniendefinition im Azure-Portal oder über die verschiedenen SDKs zu einem einfacheren und besser wiederholbaren Prozess auf Unternehmensebene wechseln wollen.As you progress on your journey with Cloud Governance, you'll want to shift from manually managing each policy definition in the Azure portal or through the various SDKs to something more manageable and repeatable at enterprise scale. Im Folgenden finden Sie die beiden vorherrschenden Ansätze für die Verwaltung von umfangreichen Systemen in der Cloud:Two of the predominant approaches to managing systems at scale in the cloud are:

  • Infrastructure-as-Code: Bei diesem Ansatz werden alle Inhalte, die Ihre Umgebungen definieren – von Resource Manager-Vorlagen über Azure Policy-Definitionen bis hin zu Azure Blueprints – als Quellcode behandelt.Infrastructure as Code: The practice of treating the content that defines your environments, everything from Resource Manager templates to Azure Policy definitions to Azure Blueprints, as source code.
  • DevOps: DevOps vereint Personen, Prozesse und Produkte, um hochwertige Continuous Delivery-Prozesse an Endbenutzer zu ermöglichen.DevOps: The union of people, process, and products to enable continuous delivery of value to our end users.

Policy-as-Code ist eine Kombination dieser beiden Ansätze.Policy as Code is the combination of these ideas. Im Wesentlichen behalten Sie Ihre Richtliniendefinitionen in der Quellcodeverwaltung und testen und validieren Änderungen, wann immer diese eingeführt werden sollen.Essentially, keep your policy definitions in source control and whenever a change is made, test and validate that change. Dies sollte jedoch nicht der einzige Aspekt der Einbeziehung von Richtlinien in Infrastructure-as-Code oder DevOps sein.However, that shouldn't be the extent of policies involvement with Infrastructure as Code or DevOps.

Der Validierungsschritt sollte auch Teil anderer Continuous Integration- oder Continuous Deployment-Workflows sein.The validation step should also be a component of other continuous integration or continuous deployment workflows. Dies gilt beispielsweise für die Bereitstellung einer Anwendungsumgebung oder einer virtuellen Infrastruktur.Examples include deploying an application environment or virtual infrastructure. Indem die Azure Policy-Validierung bereits frühzeitig im Erstellungs- und Bereitstellungsprozess erfolgt, können Anwendungs- und Betriebsteams eine eventuelle Nichteinhaltung von Richtlinien ermitteln, lange bevor es zu spät ist und die Teams die Anwendung in der Produktion bereitstellen möchten.By making Azure Policy validation an early component of the build and deployment process the application and operations teams discover if their changes are non-complaint, long before it's too late and they're attempting to deploy in production.

Übersicht über WorkflowWorkflow overview

Der empfohlene allgemeine Workflow für Policy-as-Code sieht in etwa wie das folgende Diagramm aus:The recommended general workflow of Policy as Code looks like this diagram:

Übersicht über Policy-as-Code

Erstellen und Aktualisieren von RichtliniendefinitionenCreate and update policy definitions

Die Richtliniendefinitionen werden mit JSON erstellt und in der Quellcodeverwaltung gespeichert.The policy definitions are created using JSON, and stored in source control. Jede Richtlinie verfügt über einen eigenen Satz Dateien – z. B. Parameter, Regeln und Umgebungsparameter –, die im gleichen Ordner gespeichert werden sollten.Each policy has it's own set of files, such as the parameters, rules, and environment parameters, that should be stored in the same folder. Die folgende Struktur zeigt eine empfohlene Methode zum Speichern der Richtliniendefinitionen in der Quellcodeverwaltung.The following structure is a recommended way of keeping your policy definitions in source control.

.
|
|- policies/  ________________________ # Root folder for policies
|  |- policy1/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- params.dev.json _____________ # Parameters for a Dev environment
|     |- params.prd.json _____________ # Parameters for a Prod environment
|     |- params.tst.json _____________ # Parameters for a Test environment
|
|  |- policy2/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- params.dev.json _____________ # Parameters for a Dev environment
|     |- params.prd.json _____________ # Parameters for a Prod environment
|     |- params.tst.json _____________ # Parameters for a Test environment
|

Wenn eine neue Richtlinie hinzugefügt oder eine vorhandene Richtlinie aktualisiert wird, sollte der Workflow die Richtliniendefinition in Azure automatisch aktualisieren.When a new policy is added or an existing one updated, the workflow should automatically update the policy definition in Azure. Das Testen der neuen oder aktualisierten Richtliniendefinition erfolgt in einem späteren Schritt.Testing of the new or updated policy definition comes in a later step.

Erstellen und Aktualisieren von InitiativendefinitionenCreate and update initiative definitions

Auch Initiativen verfügen über eine eigene JSON-Datei und zugehörige Dateien, die im gleichen Ordner gespeichert werden sollten.Likewise, initiatives have their own JSON file and related files that should be stored in the same folder. Die Initiativendefinition erfordert eine bereits vorhandene Richtliniendefinition und kann daher erst erstellt oder aktualisiert werden, wenn die Quelle für die Richtlinie zunächst in der Quellcodeverwaltung und dann in Azure aktualisiert wurde.The initiative definition requires the policy definition to already exist, so can't be created or updated until the source for the policy has been updated in source control and then updated in Azure. Die folgende Struktur zeigt eine empfohlene Methode zum Speichern der Initiativendefinitionen in der Quellcodeverwaltung.The following structure is a recommended way of keeping your initiative definitions in source control:

.
|
|- initiatives/ ______________________ # Root folder for initiatives
|  |- init1/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- params.dev.json _____________ # Parameters for a Dev environment
|     |- params.prd.json _____________ # Parameters for a Prod environment
|     |- params.tst.json _____________ # Parameters for a Test environment
|
|  |- init2/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- params.dev.json _____________ # Parameters for a Dev environment
|     |- params.prd.json _____________ # Parameters for a Prod environment
|     |- params.tst.json _____________ # Parameters for a Test environment
|

Ebenso wie bei Richtliniendefinitionen sollte der Workflow die Initiativendefinition in Azure automatisch aktualisieren, wenn eine neue Initiative hinzugefügt oder eine vorhandene aktualisiert wird.Like policy definitions, when adding or updating an existing initiative, the workflow should automatically update the initiative definition in Azure. Das Testen der neuen oder aktualisierten Initiativendefinition erfolgt in einem späteren Schritt.Testing of the new or updated initiative definition comes in a later step.

Testen und Validieren der aktualisierten DefinitionTest and validate the updated definition

Sobald die Automatisierung Ihre neu erstellten oder aktualisierten Richtlinien- oder Initiativendefinitionen übernommen und das entsprechende Objekt in Azure aktualisiert hat, ist es an der Zeit, die Änderungen zu testen.Once automation has taken your newly created or updated policy or initiative definitions and made the update to the object in Azure, it's time to test the changes that were made. Entweder die Richtlinie oder die zugehörige Initiative sollte Ressourcen in der Umgebung zugewiesen werden, die am weitesten von der Produktion entfernt ist.Either the policy or the initiative(s) it's part of should then be assigned to resources in the environment farthest from production. Diese Umgebung ist in der Regel die Entwicklungsumgebung: Dev.This environment is typically Dev.

Die Zuweisung sollte den enforcementMode deaktiviert verwenden, damit Ressourcenerstellung und -aktualisierung nicht blockiert, aber vorhandene Ressourcen weiterhin auf Einhaltung der aktualisierten Richtliniendefinition überwacht werden.The assignment should use enforcementMode of disabled so that resource creation and updates aren't blocked, but that existing resources are still audited for compliance to the updated policy definition. Auch im enforcementMode wird empfohlen, entweder eine Ressourcengruppe oder ein Abonnement, das speziell zur Validierung von Richtlinien dient, als Zuweisungsbereich zu verwenden.Even with enforcementMode, it's recommended that the assignment scope is either a resource group or a subscription that is specifically used for validating policies.

Hinweis

Dieser Modus ist zwar hilfreich, darf aber gründliche Tests einer Richtliniendefinition unter verschiedenen Bedingungen nicht ersetzen.While enforcement mode is helpful, it's not a replacement for thoroughly testing a policy definition under various conditions. Die Richtliniendefinition sollte mit den REST-API-Aufrufen PUT und PATCH, konformen und nicht konformen Ressourcen sowie für Sonderfälle wie fehlenden Ressourceneigenschaften getestet werden.The policy definition should be tested with PUT and PATCH REST API calls, compliant and non-compliant resources, and edge cases like a property missing from the resource.

Verwenden Sie nach dem Bereitstellen der Zuweisung das Policy SDK zum Abrufen von Compliancedaten für die neue Zuweisung.After the assignment is deployed, use the Policy SDK to get compliance data for the new assignment. Die zum Testen der Richtlinien und Zuweisungen verwendete Umgebung sollte sowohl konforme als auch nicht konforme Ressourcen enthalten.The environment used to test the policies and assignments should have both compliant and non-compliant resources. Ebenso wie bei einem sorgfältigen Komponententest für Code sollten Sie überprüfen, ob die Ressourcen den Erwartungen entsprechen und dass Sie keine falsch positiven oder falsch negativen Ergebnisse erhalten.Like a good unit test for code, you want to test that resources are as expected and that you also have no false-positives or false-negatives. Wenn Sie nur auf Ergebnisse testen, die Sie erwarten, kann die Richtlinie unerwartete und nicht identifizierte Auswirkungen nach sich ziehen.If you test and validate only for what you expect, there may be unexpected and unidentified impact from the policy. Weitere Informationen finden Sie unter Auswerten der Auswirkung einer neuen Azure-Richtlinie.For more information, see Evaluate the impact of a new Azure policy.

Ermöglichen von KorrekturtasksEnable remediation tasks

Wenn die Validierung der Zuweisung den Erwartungen entspricht, besteht der nächste Schritt darin, mögliche Korrekturmaßnahmen zu überprüfen.If validation of the assignment meets expectations, the next step is to validate remediation. Richtlinien, die entweder deployIfNotExists oder modify verwenden, können in einen Korrekturtask umgewandelt werden und nicht konforme Ressourcen korrigieren.Policies that use either deployIfNotExists or modify may be turned into a remediation task and correct resources from a non-compliant state.

Hierfür müssen Sie als Erstes der Richtlinienzuweisung die Rollenzuweisung erteilen, die in der Richtliniendefinition definiert ist.The first step to doing this is to grant the policy assignment the role assignment defined in the policy definition. Diese Rollenzuweisung gewährt der Identität, die über die Richtlinienzuweisung verwaltet wird, ausreichende Rechte, um die erforderlichen Änderungen vorzunehmen, damit die Ressource konform wird.This role assignment gives the policy assignment managed identity enough rights to make the needed changes to make the resource compliant.

Sobald die Richtlinienzuweisung über die entsprechenden Rechte verfügt, verwenden Sie das Policy SDK, um den Korrekturtask für einen Satz von Ressourcen auszulösen, die bekanntermaßen nicht konform sind.Once the policy assignment has appropriate rights, use the Policy SDK to trigger a remediation task against a set of resources that are known to be non-compliant. Für diese Korrekturtasks sollten drei Tests ausgeführt werden, bevor das Verfahren fortgesetzt wird:Three tests should be completed against these remediated tasks before proceeding:

  • Überprüfen, ob der Korrekturtask erfolgreich abgeschlossen wurdeValidate that the remediation task completed successfully
  • Ausführen einer Richtlinienauswertung, um herauszufinden, ob die Richtlinienkonformitätsergebnisse erwartungsgemäß aktualisiert wurdenRun policy evaluation to see that policy compliance results are updated as expected
  • Ausführen eines Komponententests in der Umgebung direkt für die Ressourcen, um zu überprüfen, ob die Eigenschaften geändert wurdenRun an environment unit test against the resources directly to validate their properties have changed

Indem Sie sowohl die aktualisierten Ergebnisse der Richtlinienauswertung als auch die Umgebung direkt testen, erhalten Sie die Bestätigung, dass die Korrekturtasks alle Aspekte erwartungsgemäß geändert haben und dass die Konformitätsänderung in der Richtliniendefinition reflektiert wird.Testing both the updated policy evaluation results and the environment directly provide confirmation that the remediation tasks changed what was expected and that the policy definition saw the compliance change as expected.

Aktualisieren von erzwungenen ZuweisungenUpdate to enforced assignments

Wenn alle Validierungsvorgänge abgeschlossen sind, aktualisieren Sie die Zuweisung so, dass sich der enforcementMode in aktiviert ändert.After all validation gates have completed, update the assignment to use enforcementMode of enabled. Diese Änderung sollte zunächst in derselben, weit von der Produktionsumgebung entfernten Umgebung durchgeführt werden.This change should initially be made in the same environment far from production. Sobald die erwartungsgemäße Funktionsweise dieser Umgebung überprüft wurde, kann die Änderung auf die nächste Umgebung und dann weiter ausgedehnt werden, bis die Richtlinie in Produktionsressourcen bereitgestellt ist.Once that environment is validated as working as expected, the change should then be scoped to include the next environment and so on until the policy is deployed to production resources.

Verarbeiten von integrierten AuswertungenProcess integrated evaluations

Im allgemeinen Workflow für Policy-as-Code werden Richtlinien und Initiativen in großem Umfang für eine Umgebung entwickelt und bereitgestellt.The general workflow for Policy as Code is for developing and deploying policies and initiatives to an environment at scale. Die Richtlinienauswertung sollte jedoch Teil des Bereitstellungsprozesses jedes Workflows sein, mit dem Ressourcen in Azure erstellt oder bereitgestellt werden. Hierzu gehören beispielsweise das Bereitstellen von Anwendung oder das Ausführen von Resource Manager-Vorlagen zum Erstellen einer Infrastruktur.However, policy evaluation should be part of the deployment process for any workflow that deploys or creates resources in Azure, such as deploying applications or running Resource Manager templates to create infrastructure.

In diesen Fällen sollte nach der Bereitstellung der Anwendung oder Infrastruktur in einem Testabonnement oder einer Testressourcengruppe eine Richtlinienauswertung für diesen Bereitstellungsumfang erfolgen, um die erfolgreiche Validierung aller vorhandenen Richtlinien und Initiativen zu überprüfen.In these cases, after the application or infrastructure deployment is done to a test subscription or resource group, policy evaluation should be done for that scope checking validation of all existing policies and initiatives. Auch wenn Richtlinien und Initiativen in einer solchen Umgebung möglicherweise mit dem enforcementMode deaktiviert konfiguriert sind, ist es nützlich, bereits frühzeitig zu erfahren, ob eine Anwendungs- oder Infrastrukturbereitstellung gegen Richtlinien verstoßen könnte.While they may be configured as enforcementMode disabled in such an environment, it's useful to know early if an application or infrastructure deployment is in violation of policy definitions early. Diese Richtlinienauswertung sollte daher als Schritt in solche Workflows eingebunden werden und Bereitstellungen, die nicht konforme Ressourcen erstellen, als fehlerhaft auswerten.This policy evaluation should therefore be a step in those workflows, and fail deployments that create non-compliant resources.

ÜberprüfungReview

Dieser Artikel beschreibt den allgemeinen Workflow für Policy-as-Code und erläutert, in welchen Fällen eine Richtlinienauswertung Teil anderer Bereitstellungsworkflows sein sollte.This article covers the general workflow for Policy as Code and also where policy evaluation should be part of other deployment workflows. Dieser Workflow kann in jeder Umgebung eingesetzt werden, die skriptbasierte Schritte und Automatisierung basierend auf Triggern unterstützt.This workflow can be used in any environment that supports scripted steps and automation based on triggers.

Nächste SchritteNext steps