Schnellstart: Definieren und Zuweisen einer Azure-Blaupause mit der REST-API

Wichtig

Azure Blueprints (Vorschau) wird am 31. Januar 2027 eingestellt, mit einer phasenweisen Einstellung ab dem 31. Juli 2026. Migrieren Sie Ihre vorhandenen Blueprintdefinitionen und Zuweisungen zu Deployment Stacks (empfohlen) und Template Specs. Blueprintartefakte werden in ARM-JSON-Vorlagen oder Bicep Dateien konvertiert, die zum Definieren von Bereitstellungsstapeln verwendet werden. Den vollständigen, in Phasen unterteilten Zeitplan, die Auswirkungen sowie häufig gestellte Fragen finden Sie unter Einstellung von Azure Blueprints oder unter https://aka.ms/AzureBlueprintsRetirement. Informationen zum Erstellen eines Artefakts als ARM-Ressource finden Sie unter:

In diesem Tutorial erfahren Sie, wie Sie mithilfe von Azure Blueprints einige allgemeine Aufgaben im Zusammenhang mit der organisationsweiten Erstellung, Veröffentlichung und Zuweisung einer Blaupause durchführen. Mit dieser Fertigkeit können Sie allgemeine Muster definieren, um wiederverwendbare und schnell bereitstellbare Konfigurationen zu entwickeln, die auf ARM-Vorlagen (Azure Resource Manager), Richtlinien und Sicherheit basieren.

Voraussetzungen

Azure Cloud Shell

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.

Starten von Azure Cloud Shell:

Option Beispiel/Link
Wählen Sie rechts oben in einem Code- oder Befehlsblock die Option Ausprobieren aus. Durch die Auswahl von Ausprobieren wird der Code oder Befehl nicht automatisch in Cloud Shell kopiert. Screenshot: Beispiel von „Jetzt testen“ für Azure Cloud Shell.
Rufen Sie https://shell.azure.com auf, oder klicken Sie auf die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen. Schaltfläche zum Starten von Azure Cloud Shell.
Wählen Sie im Azure-Portal rechts oben im Menü die Schaltfläche Cloud Shell aus. Screenshot: Schaltfläche „Cloud Shell“ im Azure-Portal

So verwenden Sie Azure Cloud Shell:

  1. Starten Sie Cloud Shell.

  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock (oder Befehlsblock) aus, um den Code oder Befehl zu kopieren.

  3. Fügen Sie den Code oder Befehl mit STRG+UMSCHALT+V unter Windows und Linux oder CMD+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.

  4. Drücken Sie die EINGABETASTE, um den Code oder Befehl auszuführen.

Erste Schritte mit der REST-API

Wenn Sie mit der REST-API nicht vertraut sind, sehen Sie sich zunächst die Azure REST-API-Referenz an, insbesondere die Abschnitte zu Anforderungs-URI und Anforderungstext. In dieser Schnellstartanleitung dienen diese Konzepte als Grundlage für die Anweisungen zur Verwendung von Azure Blueprints. Aus diesem Grund werden entsprechende Grundkenntnisse vorausgesetzt. Mit Tools wie ARMClient kann die Autorisierung automatisch durchgeführt werden. Diese Tools werden für Anfänger empfohlen.

Die Spezifikationen zu Azure Blueprints finden Sie in der REST-API-Referenz für Azure Blueprints.

REST-API und PowerShell

Wenn Sie noch über kein Tool für REST-API-Aufrufe verfügen, können Sie PowerShell für diese Anweisungen verwenden. Im Folgenden finden Sie einen Beispielheader für die Authentifizierung bei Azure. Generieren Sie einen Authentifizierungsheader, der manchmal als Bearertoken bezeichnet wird, und geben Sie den REST-API-URI für die Verbindung mit Parametern oder einen Request Body an:

# Log in first with Connect-AzAccount if not using Cloud Shell

$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token.AccessToken
}

# Invoke the REST API
$restUri = 'https://management.azure.com/subscriptions/{subscriptionId}?api-version=2020-01-01'
$response = Invoke-RestMethod -Uri $restUri -Method Get -Headers $authHeader

Ersetzen Sie {subscriptionId} in der vorangehenden Variablen $restUri, um Informationen zu Ihrem Abonnement zu erhalten. Die Variable $response enthält das Ergebnis des Cmdlets Invoke-RestMethod, das mit Cmdlets wie ConvertFrom-Json analysiert werden kann. Wenn im REST-API-Dienstendpunkt ein Request Body erwartet wird, geben Sie eine JSON-formatierte Variable für den Parameter -Body von Invoke-RestMethod an.

Erstellen Sie einen Entwurf

Der erste Schritt bei der Definition eines Standardmusters für die Compliance besteht darin, aus den verfügbaren Ressourcen eine Vorlage zu erstellen. Lassen Sie uns nun ein Blueprint namens MyBlueprint erstellen, um Rollen- und Richtlinienzuweisungen für das Abonnement zu konfigurieren. Anschließend fügen Sie eine Ressourcengruppe, eine ARM-Vorlage und eine Rollenzuweisung für die Ressourcengruppe hinzu.

Hinweis

Bei Verwendung der REST-API wird zuerst das blueprint-Objekt erstellt. Für jedes hinzuzufügende Artefakt mit Parametern definieren Sie die Parameter vorab im ursprünglichen Blueprint.

Ersetzen Sie in jedem REST-API-URI die folgenden Variablen durch Ihre eigenen Werte:

  • {YourMG}: Ersetzen Sie diese Variable durch die ID Ihrer Verwaltungsgruppe.
  • {subscriptionId}: Ersetzen Sie diese Variable durch Ihre Abonnement-ID.

Hinweis

Sie können auch auf Abonnementebene Blueprints erstellen. Weitere Informationen finden Sie im Beispiel: Erstellen einer Blaupause im Abonnement.

  1. Erstellen Sie das anfängliche blueprint-Objekt. Der Request Body enthält Eigenschaften der Blaupause, alle zu erstellenden Ressourcengruppen und alle Parameter auf Blaupausenebene. Sie legen die Parameter während der Zuweisung fest, woraufhin sie von den Artefakten verwendet werden, die Sie in späteren Schritten hinzufügen.

    • REST-API-URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
      
    • Anforderungstext

      {
          "properties": {
              "description": "This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.",
              "targetScope": "subscription",
              "parameters": {
                  "storageAccountType": {
                      "type": "string",
                      "metadata": {
                          "displayName": "storage account type.",
                          "description": null
                      }
                  },
                  "tagName": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The name of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "tagValue": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The value of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "contributors": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Contributor role at the subscription"
                      }
                  },
                  "owners": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Owner role at the resource group"
                      }
                  }
              },
              "resourceGroups": {
                  "storageRG": {
                      "description": "Contains the resource template deployment and a role assignment."
                  }
              }
          }
      }
      
  2. Fügen Sie eine Rollenzuweisung im Abonnement hinzu. Der Request Body definiert die Art des Artefakts. Die Eigenschaften orientieren sich am Rollendefinitionsbezeichner, und die Prinzipalbezeichner werden als Array von Werten übergeben. Im folgenden Beispiel ist für die Prinzipalbezeichner, denen die angegebene Rolle zugewiesen wird, ein Parameter konfiguriert, der bei der Blaupausenzuweisung festgelegt wird. In diesem Beispiel wird die integrierte Rolle Contributor mit der GUID b24988ac-6180-42a0-ab88-20f7382dd24c verwendet.

    • REST API URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleContributor?api-version=2018-11-01-preview
      
    • Anforderungstext

      {
          "kind": "roleAssignment",
          "properties": {
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
              "principalIds": "[parameters('contributors')]"
          }
      }
      
  3. Fügen Sie eine Richtlinienzuweisung im Abonnement hinzu. Das Request Body definiert die Art des Artefakts, die Eigenschaften sind auf eine Richtlinien- oder Initiativdefinition abgestimmt, und die Richtlinienzuordnung ist so konfiguriert, dass die definierten Blueprint-Parameter bei der Blueprint-Zuweisung verwendet werden. In diesem Beispiel wird die integrierte Richtlinie Apply tag and its default value to resource groups mit der GUID 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71 verwendet.

    • REST-API-URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyTags?api-version=2018-11-01-preview
      
    • Anforderungstext

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply tag and its default value to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValue": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  4. Fügen Sie eine weitere Richtlinienzuweisung für das Storage-Tag (unter Wiederverwendung des Parameters storageAccountType_ parameter) für das Abonnement hinzu. Dieses zusätzliche Artefakt der Richtlinienzuweisung veranschaulicht, dass ein für die Blaupause definierter Parameter von mehreren Artefakten verwendet werden kann. In dem Beispiel verwenden Sie storageAccountType, um ein Tag für die Ressourcengruppe festzulegen. Dieser Wert stellt Informationen zu dem Speicherkonto bereit, das Sie im nächsten Schritt erstellen werden. In diesem Beispiel wird die integrierte Richtlinie Apply tag and its default value to resource groups mit der GUID 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71 verwendet.

    • REST-API-URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyStorageTags?api-version=2018-11-01-preview
      
    • Anfragekörper

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply storage tag and the parameter also used by the template to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "StorageType"
                  },
                  "tagValue": {
                      "value": "[parameters('storageAccountType')]"
                  }
              }
          }
      }
      
  5. Fügen Sie unter der Ressourcengruppe eine Vorlage hinzu. Der Request Body für eine ARM-Vorlage enthält die normale JSON-Komponente der Vorlage und definiert die Zielressourcengruppe mit properties.resourceGroup. Die Vorlage verwendet außerdem die Blueprint-Parameter storageAccountType, tagName und tagValue wieder, indem sie einzeln an die Vorlage übergeben werden. Die Blueprint-Parameter werden der Vorlage durch Definieren von properties.parameters zur Verfügung gestellt, und im JSON der Vorlage wird dieses Schlüssel-Wert-Paar verwendet, um den Wert einzufügen. Die Namen der Blueprint- und Template-Parameter können identisch sein, sind hier jedoch unterschiedlich, um zu veranschaulichen, wie jeder vom Blueprint an das Template-Artefakt übergeben wird.

    • REST-API-URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/templateStorage?api-version=2018-11-01-preview
      
    • Anforderungstext

      {
          "kind": "template",
          "properties": {
              "template": {
                  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                  "contentVersion": "1.0.0.0",
                  "parameters": {
                      "storageAccountTypeFromBP": {
                          "type": "string",
                          "defaultValue": "Standard_LRS",
                          "allowedValues": [
                              "Standard_LRS",
                              "Standard_GRS",
                              "Standard_ZRS",
                              "Premium_LRS"
                          ],
                          "metadata": {
                              "description": "Storage Account type"
                          }
                      },
                      "tagNameFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag name from blueprint"
                          }
                      },
                      "tagValueFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag value from blueprint"
                          }
                      }
                  },
                  "variables": {
                      "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
                  },
                  "resources": [{
                      "type": "Microsoft.Storage/storageAccounts",
                      "name": "[variables('storageAccountName')]",
                      "apiVersion": "2016-01-01",
                      "tags": {
                         "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
                      },
                      "location": "[resourceGroups('storageRG').location]",
                      "sku": {
                          "name": "[parameters('storageAccountTypeFromBP')]"
                      },
                      "kind": "Storage",
                      "properties": {}
                  }],
                  "outputs": {
                      "storageAccountSku": {
                          "type": "string",
                          "value": "[variables('storageAccountName')]"
                      }
                  }
              },
              "resourceGroup": "storageRG",
              "parameters": {
                  "storageAccountTypeFromBP": {
                      "value": "[parameters('storageAccountType')]"
                  },
                  "tagNameFromBP": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValueFromBP": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  6. Fügen Sie eine Rollenzuweisung unter der Ressourcengruppe hinzu. Ähnlich wie beim vorherigen Rollenzuweisungseintrag wird im folgenden Beispiel der Definitionsbezeichner für die Rolle Owner verwendet und dafür ein anderer Parameter aus der Blaupause angegeben. In diesem Beispiel wird die integrierte Rolle Owner mit der GUID 8e3af657-a8ff-443c-a75c-2fe8c4bcb635 verwendet.

    • REST-API-URI

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleOwner?api-version=2018-11-01-preview
      
    • Anforderungstext

      {
          "kind": "roleAssignment",
          "properties": {
              "resourceGroup": "storageRG",
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
              "principalIds": "[parameters('owners')]"
          }
      }
      

Blueprint veröffentlichen

Nachdem Sie die Artefakte zur Blaupause hinzugefügt haben, kann diese veröffentlicht werden. Durch die Veröffentlichung kann die Blaupause einem Abonnement zugewiesen werden.

  • REST-API-URI

    PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/versions/{BlueprintVersion}?api-version=2018-11-01-preview
    

Der Wert für {BlueprintVersion} ist eine Zeichenfolge mit Buchstaben, Zahlen und Bindestrichen (ohne Leerzeichen oder Sonderzeichen). Die maximale Länge beträgt 20 Zeichen. Verwenden Sie einen eindeutigen und aussagekräftigen Wert, z. B. v20180622-135541.

Zuweisen einer Blaupause

Nach dem Veröffentlichen einer Blaupause mit der REST-API kann sie einem Abonnement zugewiesen werden. Weisen Sie die von Ihnen erstellte Blaupause einem der Abonnements unter Ihrer Verwaltungsgruppenhierarchie zu. Wenn der Blueprint in einer Subscription gespeichert ist, kann er nur dieser Subscription zugewiesen werden. Das Request Body gibt das zuzuweisende Blueprint an und weist allen Ressourcengruppen in der Blueprintdefinition einen Namen und einen Standort zu. Request Body stellt außerdem alle Parameter bereit, die im Blueprint definiert sind und von einem oder mehreren angehängten Artefakten verwendet werden.

Ersetzen Sie in jedem REST-API-URI die folgenden Variablen durch Ihre eigenen Werte:

  • {tenantId} - Ersetzen Sie sie durch Ihre Mandanten-ID.
  • {YourMG}: Ersetzen Sie diese Variable durch die ID Ihrer Verwaltungsgruppe.
  • {subscriptionId}: Ersetzen Sie diese Variable durch Ihre Abonnement-ID.
  1. Weisen Sie dem Azure Blueprints-Dienstprinzipal für das Zielabonnement die Rolle Owner zu. Die AppId ist statisch (f71766dc-90d9-4b7d-bd9d-4499c4331c3f), aber die Dienstprinzipal-ID variiert von Mandant zu Mandant. Verwenden Sie die folgende REST-API, um Details für Ihren Mandanten anzufordern. Hierbei wird die Azure Active Directory Graph-API verwendet, die eine andere Autorisierung aufweist.

    • REST-API-URI

      GET https://graph.windows.net/{tenantId}/servicePrincipals?api-version=1.6&$filter=appId eq 'f71766dc-90d9-4b7d-bd9d-4499c4331c3f'
      
  2. Führen Sie die Blueprint-Bereitstellung durch, indem Sie sie einem Abonnement zuweisen. Da für die Parameter contributors und owners ein Array von objectIds der Prinzipale, denen die Rollenzuweisung erteilt werden soll, erforderlich ist, verwenden Sie die Azure Active Directory Graph-API zum Sammeln der objectIds zur Verwendung in den Request Body für Ihre eigenen Benutzer, Gruppen oder Dienstprinzipale.

    • REST-API-URI

      PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
      
    • Anforderungstext

      {
          "properties": {
              "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint",
              "resourceGroups": {
                  "storageRG": {
                      "name": "StorageAccount",
                      "location": "eastus2"
                  }
              },
              "parameters": {
                  "storageAccountType": {
                      "value": "Standard_GRS"
                  },
                  "tagName": {
                      "value": "CostCenter"
                  },
                  "tagValue": {
                      "value": "ContosoIT"
                  },
                  "contributors": {
                      "value": [
                          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                          "38833b56-194d-420b-90ce-cff578296714"
                      ]
                  },
                  "owners": {
                      "value": [
                          "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                          "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                      ]
                  }
              }
          },
          "identity": {
              "type": "systemAssigned"
          },
          "location": "westus"
      }
      
    • Benutzerseitig zugewiesene verwaltete Identität

      Eine Blueprintzuweisung kann auch eine benutzerzugewiesene verwaltete Identität verwenden. In diesem Fall ändert sich der Teil identity des Anforderungshauptteils wie folgt. Ersetzen Sie {yourRG} und {userIdentity} durch den Namen Ihrer Ressourcengruppe bzw. durch den Namen Ihrer benutzerseitig zugewiesenen verwalteten Identität.

      "identity": {
          "type": "userAssigned",
          "tenantId": "{tenantId}",
          "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{yourRG}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userIdentity}": {}
          }
      },
      

      Die benutzerseitig zugewiesene verwaltete Identität kann sich in einem beliebigen Abonnement oder in einer beliebigen Ressourcengruppe befinden, für das bzw. die der Benutzer, der die Blaupause zuweist, über Berechtigungen verfügt.

      Wichtig

      Die benutzerseitig zugewiesene verwaltete Identität wird nicht von Azure Blueprints verwaltet. Benutzer sind dafür verantwortlich, ausreichende Rollen und Berechtigungen zuzuweisen, andernfalls schlägt die Blueprintzuweisung fehl.

Bereinigen von Ressourcen

Zuweisung eines Blueprints aufheben

Sie können einen Blueprint aus einem Abonnement entfernen. Dieser Schritt wird häufig ausgeführt, wenn die Artefaktressourcen nicht mehr benötigt werden. Wenn eine Blaupause entfernt wird, werden die als Teil der Blaupause zugewiesenen Artefakte beibehalten. Verwenden Sie die folgende REST-API-Operation, um eine Blueprintzuweisung zu entfernen:

  • REST-API-URI

    DELETE https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
    

Blueprint löschen

Verwenden Sie die folgende REST-API-Operation, um das Blueprint selbst zu entfernen:

  • REST-API-URI

    DELETE https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
    

Nächste Schritte

In diesem Schnellstart haben Sie mit der REST-API einen Blueprint erstellt, zugewiesen und entfernt. Weitere Informationen zu Azure Blueprints finden Sie im Artikel zum Blueprint-Lebenszyklus.