Schnellstart: Definieren und Zuweisen einer Azure-Blaupause mit der Azure CLI

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

  • Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Wenn Sie Azure Blueprints noch nicht verwendet haben, registrieren Sie den Ressourcenanbieter über die Azure CLI mit az provider register --namespace Microsoft.Blueprint.

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. Screenshot: Cloud Shell in einem neuen Fenster starten.
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.

Hinzufügen der Blueprint-Erweiterung

Damit die Azure CLI Blaupausendefinitionen und -zuweisungen verwalten kann, müssen Sie die Erweiterung hinzufügen. Diese Erweiterung funktioniert überall dort, wo Sie die Azure CLI verwenden können. Dies schließt Bash in Windows 10, Cloud Shell (sowohl die eigenständige Version als auch die Version im Portal), das Azure CLI-Docker-Image oder eine lokal installierte Erweiterung ein.

  1. Vergewissern Sie sich, dass die neueste Azure CLI (mindestens 2.0.76) installiert ist. Falls es noch nicht installiert ist, befolgen Sie diese Anweisungen.

  2. Importieren Sie in der Azure CLI-Umgebung Ihrer Wahl die Erweiterung mit folgendem Befehl:

    # Add the Blueprint extension to the Azure CLI environment
    az extension add --name blueprint
    
  3. Überprüfen Sie, ob die Erweiterung installiert wurde und in der erwarteten Version vorliegt (mindestens 0.1.0):

    # Check the extension list (note that you might have other extensions installed)
    az extension list
    
    # Run help for extension options
    az blueprint -h
    

Erstellen einer Blaupause

Im ersten Schritt beim Definieren eines Standardmusters für die Konformität wird eine Blaupause aus den verfügbaren Ressourcen erstellt. Erstellen wir nun eine Blaupause namens MyBlueprint, 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

Wenn Sie Azure CLI verwenden, wird als Erstes das Objekt blueprint erstellt. Für jedes hinzuzufügende Artefakt, das über Parameter verfügt, definieren Sie die Parameter vorab in der anfänglichen Blaupause (bluepringt-Objekt) werden.

  1. Erstellen Sie das anfängliche blueprint-Objekt. Der parameters-Parameter akzeptiert eine JSON-Datei, die alle Parameter auf Blaupausenebene enthält. Sie legen die Parameter während der Zuweisung fest, woraufhin sie von den Artefakten verwendet werden, die Sie in späteren Schritten hinzufügen.

    • JSON-Datei: blueprintparms.json

      {
         "storageAccountType": {
             "type": "string",
             "defaultValue": "Standard_LRS",
             "allowedValues": [
                 "Standard_LRS",
                 "Standard_GRS",
                 "Standard_ZRS",
                 "Premium_LRS"
             ],
             "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",
                 "strongType": "PrincipalId"
             }
         },
         "owners": {
             "type": "array",
             "metadata": {
                 "description": "List of AAD object IDs that is assigned Owner role at the resource group",
                 "strongType": "PrincipalId"
             }
         }
      }
      
    • Azure CLI-Befehl

      # Login first with az login if not using Cloud Shell
      
      # Create the blueprint object
      az blueprint create \
         --name 'MyBlueprint' \
         --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.' \
         --parameters blueprintparms.json
      

      Hinweis

      Verwenden Sie den Dateinamen blueprint.json, wenn Sie Ihre Blaupausendefinitionen importieren. Der Dateiname wird beim Aufrufen von az blueprint import verwendet.

      Das Blaupausenobjekt wird standardmäßig im Standardabonnement erstellt. Um die Verwaltungsgruppe anzugeben, verwenden Sie den Parameter managementgroup. Um das Abonnement anzugeben, verwenden Sie den Parameter subscription.

  2. Fügen Sie die Ressourcengruppe für die Speicherartefakte der Definition hinzu.

    az blueprint resource-group add \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'storageRG' \
       --description 'Contains the resource template deployment and a role assignment.'
    
  3. Fügen Sie eine Rollenzuweisung im Abonnement hinzu. 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.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleContributor' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c' \
       --principal-ids "[parameters('contributors')]"
    
  4. Fügen Sie eine Richtlinienzuweisung im Abonnement hinzu. 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.

    • JSON-Datei: artifacts\policyTags.json

      {
         "tagName": {
            "value": "[parameters('tagName')]"
         },
         "tagValue": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Azure CLI-Befehl

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply tag and its default value to resource groups' \
         --description 'Apply tag and its default value to resource groups' \
         --parameters artifacts\policyTags.json
      

      Hinweis

      Ersetzen Sie bei Verwendung von az blueprint auf einem Mac für Parameterwerte, die eine Pfadangabe erhalten, \ durch /. In unserem Fall wird der Wert für parameters zu artifacts/policyTags.json.

  5. 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.

    • JSON-Datei: artifacts\policyStorageTags.json

      {
         "tagName": {
            "value": "StorageType"
         },
         "tagValue": {
            "value": "[parameters('storageAccountType')]"
         }
      }
      
    • Azure CLI-Befehl

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyStorageTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply storage tag to resource group' \
         --description 'Apply storage tag and the parameter also used by the template to resource groups' \
         --parameters artifacts\policyStorageTags.json
      

      Hinweis

      Ersetzen Sie bei Verwendung von az blueprint auf einem Mac für Parameterwerte, die eine Pfadangabe erhalten, \ durch /. In diesem Fall wird der Wert für parameters zu artifacts/policyStorageTags.json.

  6. Fügen Sie eine Vorlage unter der Ressourcengruppe hinzu. Der Parameter template für eine ARM-Vorlage enthält die normale JSON-Komponente der Vorlage. Darüber hinaus verwendet die Vorlage auch die Blaupausenparameter storageAccountType, tagName und tagValue wieder, indem sie jeweils an die Vorlage übergeben werden. Die Blaupausenparameter werden für die Vorlage mithilfe des Parameters parameters bereitgestellt, und innerhalb des JSON-Codes der Vorlage wird der Wert mithilfe dieses Schlüssel-Wert-Paars eingefügt. Die Namen des Blaupausen- und des Vorlagenparameters können identisch sein.

    • JSON-ARM-Vorlagendatei: artifacts\templateStorage.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "type": "string",
                  "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": "[resourceGroup().location]",
              "sku": {
                  "name": "[parameters('storageAccountTypeFromBP')]"
              },
              "kind": "Storage",
              "properties": {}
          }],
          "outputs": {
              "storageAccountSku": {
                  "type": "string",
                  "value": "[variables('storageAccountName')]"
              }
          }
      }
      
    • JSON-ARM-Vorlagenparameterdatei: artifacts\templateStorageParams.json

      {
         "storageAccountTypeFromBP": {
            "value": "[parameters('storageAccountType')]"
         },
         "tagNameFromBP": {
            "value": "[parameters('tagName')]"
         },
         "tagValueFromBP": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Azure CLI-Befehl

      az blueprint artifact template create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'templateStorage' \
         --template artifacts\templateStorage.json \
         --parameters artifacts\templateStorageParams.json \
         --resource-group-art 'storageRG'
      

      Hinweis

      Ersetzen Sie bei Verwendung von az blueprint auf einem Mac für Parameterwerte, die eine Pfadangabe erhalten, \ durch /. In diesem Fall wird der Wert für template zu artifacts/templateStorage.json, und parameters wird artifacts/templateStorageParams.json.

  7. 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.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleOwner' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635' \
       --principal-ids "[parameters('owners')]" \
       --resource-group-art 'storageRG'
    

Veröffentlichen einer Blaupause

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.

az blueprint publish --blueprint-name 'MyBlueprint' --version '{BlueprintVersion}'

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. v20200605-135541.

Zuweisen einer Blaupause

Nach dem Veröffentlichen einer Blaupause mit der Azure CLI kann sie einem Abonnement zugewiesen werden. Weisen Sie die von Ihnen erstellte Blaupause einem der Abonnements unter Ihrer Verwaltungsgruppenhierarchie zu. Wenn die Blaupause in einem Abonnement gespeichert wird, kann sie nur diesem Abonnement zugewiesen werden. Der Parameter blueprint-name gibt die zuzuweisende Blaupause an. Verwenden Sie zum Angeben der Parameter name, location, identity, lock und blueprint die entsprechenden Azure CLI-Parameter im az blueprint assignment create-Befehl, oder geben Sie sie in der JSON-Datei parameters an.

  1. Führen Sie die Blaupausenbereitstellung aus, 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 parameters für Ihre eigenen Benutzer, Gruppen oder Dienstprinzipale.

    • JSON-Datei: blueprintAssignment.json

      {
         "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"
             ]
         }
      }
      
    • Azure CLI-Befehl

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      
    • Benutzerseitig zugewiesene verwaltete Identität

      Eine Blaupausenzuweisung kann auch eine benutzerseitig zugewiesene verwaltete Identität verwenden. In diesem Fall wird der identity-type-Parameter auf UserAssigned festgelegt, und der Parameter user-assigned-identities gibt die Identität an. Ersetzen Sie {userIdentity} durch den Namen Ihrer vom Benutzer zugewiesenen verwalteten Identität.

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --identity-type UserAssigned \
         --user-assigned-identities {userIdentity} \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      

      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, angemessene Rollen und Berechtigungen zuzuweisen. Andernfalls schlägt die Blaupausenzuweisung fehl.

Bereinigen von Ressourcen

Sie können eine Blaupause 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 zum Entfernen einer Blaupausenzuweisung den az blueprint assignment delete-Befehl:

az blueprint assignment delete --name 'assignMyBlueprint'

Nächste Schritte

In dieser Schnellstartanleitung haben Sie eine Blaupause mit Azure CLI erstellt, zugewiesen und entfernt. Weitere Informationen zu Azure Blueprints finden Sie im Artikel zum Lebenszyklus von Blaupausen.