Freigeben über


Programmgesteuertes Erstellen von Azure Enterprise Agreement-Abonnements mit den neuesten APIs

In diesem Artikel wird erläutert, wie Sie mithilfe der aktuellen API-Versionen programmgesteuert Azure Enterprise Agreement-Abonnements für ein EA-Abrechnungskonto erstellen. Wenn Sie noch die ältere Vorschauversion verwenden, finden Sie weitere Informationen unter Programmgesteuertes Erstellen von Azure-Abonnements mit Legacy-APIs.

Dieser Artikel enthält Informationen zum programmgesteuerten Erstellen von Abonnements mithilfe von Azure Resource Manager.

Wenn Sie ein Azure-Abonnement programmgesteuert erstellen, fällt es unter die Bedingungen des Vertrags, in dem Sie Azure-Dienste von Microsoft oder einem zertifizierten Verkäufer erhalten. Weitere Informationen finden Sie unter Rechtliche Hinweise zu Microsoft Azure.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Supportpläne können nicht programmgesteuert erstellt werden. Sie können einen neuen Supportplan kaufen oder ein Upgrade im Azure-Portal durchführen. Navigieren Sie zur Hilfe + Support, und wählen Sie dann oben auf der Seite Auswahl des richtigen Supportplans aus.

Voraussetzungen

Ein Benutzer muss entweder über die Unternehmensadministratorrolle oder die Rolle „Besitzer“ für ein Registrierungskonto verfügen, um ein Abonnement zu erstellen. Es gibt zwei Möglichkeiten, die Rolle „Besitzer“ für ein Registrierungskonto abzurufen:

Wenn ein Dienstprinzipal zum Erstellen eines EA-Abonnements verwendet werden soll, muss ein Besitzer des Registrierungskontos diesem Dienstprinzipal die Berechtigung zum Erstellen von Abonnements erteilen.

Wenn Sie Abonnements mithilfe eines Dienstprinzipals erstellen, verwenden Sie die Objekt-ID (ObjectId) der Microsoft Entra-Unternehmensanwendung als Dienstprinzipal-ID mit Microsoft Graph PowerShell oder der Azure CLI. Sie können auch die Schritte unter Suchen des Dienstprinzipals und der Mandanten-ID ausführen, um die Objekt-ID für einen vorhandenen Dienstprinzipal im Azure-Portal zu ermitteln.

Weitere Informationen zur API-Anforderung für die EA-Rollenzuweisung finden Sie unter Zuweisen von Rollen zu Azure Enterprise Agreement-Dienstprinzipalnamen. Der Artikel enthält eine Liste der Rollen (und Rollendefinitions-IDs), die einem Dienstprinzipal zugewiesen werden können.

Hinweis

  • Stellen Sie sicher, dass Sie die richtige API-Version verwenden, um dem Registrierungskonto Besitzerberechtigungen zu erteilen. Verwenden Sie für diesen Artikel und die darin dokumentierten APIs die API 2019-10-01-preview.
  • Wenn Sie zur Verwendung der neueren APIs eine Migration durchführen, wird Ihre vorherige Konfiguration, die mit der Version 2015-07-01 erstellt wurde, nicht automatisch für die Verwendung mit den neueren APIs konvertiert.
  • Die Registrierungskontoinformationen sind nur sichtbar, wenn die Rolle des Benutzers „Kontobesitzer“ lautet. Wenn ein Benutzer über mehrere Rollen verfügt, verwendet die API die am wenigsten restriktive Rolle des Benutzers.

Ermitteln der Konten, auf die Sie Zugriff besitzen

Nachdem Sie einem Registrierungskonto hinzugefügt wurden, das einem Kontobesitzer zugeordnet ist, verwendet Azure die Beziehung zwischen dem Konto und der Registrierung für die Ermittlung, wo die Abonnementgebühren angerechnet werden sollen. Alle Abonnements, die unter dem Konto erstellt werden, werden über die EA-Registrierung abgerechnet, in der sich das Konto befindet. Um Abonnements zu erstellen, müssen Sie Werte zum Registrierungskonto und den Benutzerprinzipalen als Besitzer des Abonnements übergeben.

Um die folgenden Befehle ausführen zu können, müssen Sie im Basisverzeichnis des Kontobesitzers angemeldet sein. Dies ist das Verzeichnis, in dem Abonnements standardmäßig erstellt werden.

Fordern Sie eine Liste aller Registrierungskonten an, auf die Sie zugreifen können:

GET https://management.azure.com/providers/Microsoft.Billing/billingaccounts/?api-version=2020-05-01

In der API-Antwort sind alle Registrierungskonten aufgelistet, auf die Sie Zugriff haben:

{
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/1234567",
      "name": "1234567",
      "properties": {
        "accountStatus": "Unknown",
        "accountType": "Enterprise",
        "agreementType": "EnterpriseAgreement",
        "soldTo": {
          "companyName": "Contoso",
          "country": "US "
        },
        "billingProfiles": {
          "hasMoreResults": false
        },
        "displayName": "Contoso",
        "enrollmentAccounts": [
          {
            "id": "/providers/Microsoft.Billing/billingAccounts/1234567/enrollmentAccounts/7654321",
            "name": "7654321",
            "type": "Microsoft.Billing/enrollmentAccounts",
            "properties": {
              "accountName": "Contoso",
              "accountOwnerEmail": "kenny@contoso.onmicrosoft.com",
              "costCenter": "Test",
              "isDevTest": false
            }
          }
        ],
        "hasReadAccess": false
      },
      "type": "Microsoft.Billing/billingAccounts"
    }
  ]
}

Die Werte für einen Abrechnungsbereich und id sind identisch. Die ID (id) für Ihr Registrierungskonto ist der Abrechnungsbereich, unter dem die Abonnementanforderung initiiert wird. Es ist wichtig, die ID zu kennen, da sie ein erforderlicher Parameter ist, den Sie später im Artikel zum Erstellen eines Abonnements verwenden.

Erstellen von Abonnements unter einem bestimmten Registrierungskonto

Im folgenden Beispiel wird ein Abonnement namens Dev Team Subscription in Registrierungskonto erstellt, das im vorherigen Schritt ausgewählt wurde.

Mit einer der folgenden Methoden erstellen Sie einen Abonnementaliasnamen. Es wird empfohlen, beim Erstellen des Aliasnamens Folgendes zu beachten:

  • Verwenden Sie alphanumerische Zeichen und Bindestriche.
  • Der Name sollte mit einem Buchstaben beginnen und mit einem alphanumerischen Zeichen enden.
  • Verwenden Sie keine Punkte.

Für die einfache Ersetzung einer benutzerdefinierten Zeichenfolge wird anstelle der Abonnement-GUID ein Alias verwendet. Anders ausgedrückt: Sie können ihn als Verknüpfung verwenden. Weitere Informationen zum Alias finden Sie im Abschnitt zur Aliaserstellung. In den folgenden Beispielen wird sampleAlias erstellt, Sie können jedoch eine beliebige Zeichenfolge verwenden.

Wenn Sie zusätzlich zur Rolle „Kontobesitzer“ mehrere Benutzerrollen haben, müssen Sie die Konto-ID aus dem Azure-Portal abrufen. Anschließend können Sie die ID verwenden, um Abonnements programmgesteuert zu erstellen.

Rufen Sie die PUT-API auf, um eine Anforderung bzw. einen Alias für die Abonnementerstellung zu generieren.

PUT https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01api-version=2021-10-01

Geben Sie im Anforderungstext die ID (id) eines Ihrer Registrierungskonten (enrollmentAccounts) als billingScope an.

{
  "properties": {
        "billingScope": "/providers/Microsoft.Billing/BillingAccounts/1234567/enrollmentAccounts/7654321",
        "DisplayName": "Dev Team Subscription", //Subscription Display Name
        "Workload": "Production"
  }
}

Zulässige Werte für Workload sind Production und DevTest.

Antwort

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "provisioningState": "Accepted"
  }
}

Sie können eine GET-Anforderung für die gleiche URL ausführen, um den Status der Anforderung zu erhalten.

Anforderung

GET https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01

Antwort

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "provisioningState": "Succeeded"
  }
}

Der Status „In Bearbeitung“ wird unter provisioningState als Status Accepted zurückgegeben.

Erstellen eines Abonnements und Festlegen von „subscriptionOwnerId“ als Besitzer

Wenn ein Dienstprinzipal die Abonnementalias-API zum Erstellen eines neuen Abonnements verwendet und additionalProperties nicht in die Anforderung einschließt, wird der Dienstprinzipal automatisch zum Besitzer des neuen Abonnements. Wenn Sie nicht möchten, dass der Dienstprinzipal der Besitzer ist, können Sie subscriptionTenantId und subscriptionOwnerId in additionalPropertiesangeben. Dieser Vorgang macht die angegebene subscriptionOwnerId zum Besitzer des neuen Abonnements, nicht den Dienstprinzipal.

Text von Beispielanforderung:


{
    "properties": {
        "billingScope": "/providers/Microsoft.Billing/billingAccounts/{EABillingAccountId}/enrollmentAccounts/{EnrollmentAccountId}",
        "displayName": "{SubscriptionName}",
        "workLoad": "Production",
        "resellerId": null,
        "additionalProperties": {
            "managementGroupId": "",
            "subscriptionTenantId": "{SubscriptionTenantId}", // Here you input the tenant GUID where the subscription resides after creation
            "subscriptionOwnerId": "{ObjectId that becomes the owner of the subscription}", // Here you input the objectId which is set as the subscription owner when it gets created.
            "tags": {}
        }
    }
}

Erstellen von Abonnements in einem anderen Mandanten

Mithilfe dem Abonnementalias REST-API können Sie ein Abonnement in einem anderen Mandanten erstellen, indem Sie den subscriptionTenantId Parameter im Anforderungstext verwenden. Ihr Azure Service Principal (SPN) muss ein Token von seinem Privaten Mandanten abrufen, um das Abonnement zu erstellen. Nachdem Sie das Abonnement erstellt haben, müssen Sie ein Token vom Zielmandanten abrufen, um die Übertragung mithilfe der Accept Ownership API zu akzeptieren.

Weitere Informationen zum Erstellen von EA-Abonnements in einem anderen Mandanten finden Sie unter Erstellen eines Abonnements in einem anderen Mandanten und Anzeigen von Übertragungsanforderungen.

Verwenden von ARM-Vorlagen oder Bicep

Im vorherigen Abschnitt wurde gezeigt, wie Sie ein Abonnement mit PowerShell, der CLI oder der REST-API erstellen. Wenn Sie das Erstellen von Abonnements automatisieren müssen, verwenden Sie ggf. eine Azure Resource Manager-Vorlage (ARM-Vorlage) oder eine Bicep-Datei.

Mit der folgenden ARM-Vorlage wird ein Abonnement erstellt. Geben Sie für billingScope die ID des Registrierungskontos an. Das Abonnement wird in der Stammverwaltungsgruppe erstellt. Nachdem Sie das Abonnement erstellt haben, können Sie es in eine andere Verwaltungsgruppe verschieben.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "subscriptionAliasName": {
            "type": "string",
            "metadata": {
                "description": "Provide a name for the alias. This name will also be the display name of the subscription."
            }
        },
        "billingScope": {
            "type": "string",
            "metadata": {
                "description": "Provide the full resource ID of billing scope to use for subscription creation."
            }
        }
    },
    "resources": [
        {
            "scope": "/",
            "name": "[parameters('subscriptionAliasName')]",
            "type": "Microsoft.Subscription/aliases",
            "apiVersion": "2021-10-01",
            "properties": {
                "workLoad": "Production",
                "displayName": "[parameters('subscriptionAliasName')]",
                "billingScope": "[parameters('billingScope')]"
            }
        }
    ],
    "outputs": {}
}

Alternativ können Sie eine Bicep-Datei verwenden, um das Abonnement zu erstellen.

targetScope = 'managementGroup'

@description('Provide a name for the alias. This name will also be the display name of the subscription.')
param subscriptionAliasName string

@description('Provide the full resource ID of billing scope to use for subscription creation.')
param billingScope string

resource subscriptionAlias 'Microsoft.Subscription/aliases@2021-10-01' = {
  scope: tenant()
  name: subscriptionAliasName
  properties: {
    workload: 'Production'
    displayName: subscriptionAliasName
    billingScope: billingScope
  }
}

Stellen Sie die Vorlage auf Verwaltungsgruppenebene bereit. Die folgenden Beispiele zeigen die Bereitstellung der JSON-ARM-Vorlage, aber Sie können stattdessen auch eine Bicep-Datei bereitstellen.

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/mg1/providers/Microsoft.Resources/deployments/exampledeployment?api-version=2020-06-01

Mit dem Anforderungstext:

{
  "location": "eastus",
  "properties": {
    "templateLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json"
    },
    "parameters": {
      "subscriptionAliasName": {
        "value": "sampleAlias"
      },
      "billingScope": {
        "value": "/providers/Microsoft.Billing/BillingAccounts/1234567/enrollmentAccounts/7654321"
      }
    },
    "mode": "Incremental"
  }
}

Verwenden Sie die folgende ARM-Vorlage, um ein Abonnement in eine neue Verwaltungsgruppe zu verschieben.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "targetMgId": {
            "type": "string",
            "metadata": {
                "description": "Provide the ID of the management group that you want to move the subscription to."
            }
        },
        "subscriptionId": {
            "type": "string",
            "metadata": {
                "description": "Provide the ID of the existing subscription to move."
            }
        }
    },
    "resources": [
        {
            "scope": "/",
            "type": "Microsoft.Management/managementGroups/subscriptions",
            "apiVersion": "2020-05-01",
            "name": "[concat(parameters('targetMgId'), '/', parameters('subscriptionId'))]",
            "properties": {
            }
        }
    ],
    "outputs": {}
}

Verwenden Sie alternativ die folgende Bicep-Datei.

targetScope = 'managementGroup'

@description('Provide the ID of the management group that you want to move the subscription to.')
param targetMgId string

@description('Provide the ID of the existing subscription to move.')
param subscriptionId string

resource subToMG 'Microsoft.Management/managementGroups/subscriptions@2020-05-01' = {
  scope: tenant()
  name: '${targetMgId}/${subscriptionId}'
}

Einschränkungen der Azure Enterprise-Abonnementerstellungs-API

  • Nur Azure Enterprise-Abonnements werden mithilfe der API erstellt.
  • Pro Registrierungskonto sind maximal 5,000 Abonnements zulässig. Im Anschluss können weitere Abonnements für das Konto nur über das Azure-Portal erstellt werden. Wenn Sie über die API weitere Abonnements erstellen möchten, erstellen Sie ein weiteres Registrierungskonto. Abgebrochene, gelöschte und übertragene Abonnements werden auf den Grenzwert von 5000 angerechnet.
  • Benutzer, die keine Kontobesitzer sind, aber per Azure RBAC einem Registrierungskonto hinzugefügt wurden, können über das Azure-Portal keine Abonnements erstellen.

Nächste Schritte