Programmatisch Azure Enterprise Agreement-abonnementen maken met de nieuwste API's

Dit artikel helpt u programmatisch Azure EA-abonnementen (Enterprise Agreement) voor een EA-factureringsaccount te maken met behulp van de meest recente API-versies. Als u nog steeds de oudere preview-versie gebruikt, raadpleegt u Programmatisch verouderde API's voor Azure-abonnementen maken.

In dit artikel leert u hoe u via programmatisch abonnementen kunt maken met behulp van Azure Resource Manager.

Wanneer u programmatisch een Azure-abonnement maakt, valt dit onder de voorwaarden van de overeenkomst waar u Azure-services van Microsoft of een gecertificeerde verkoper ontvangt. Zie de Juridische informatie van Microsoft Azure voor meer informatie.

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

U kunt geen ondersteuningsplannen programmatisch maken. U kunt een nieuw ondersteuningsplan kopen of een upgrade uitvoeren in Azure Portal. Navigeer naar Help en ondersteuning en selecteer vervolgens boven aan de pagina het juiste ondersteuningsplan kiezen.

Vereisten

Een gebruiker moet de rol Enterprise Beheer istrator hebben of de rol Eigenaar voor een inschrijvingsaccount om een abonnement te maken. Er zijn twee manieren om de rol Eigenaar op te halen voor een inschrijvingsaccount:

  • De Enterprise-beheerder van uw inschrijving kan u een accounteigenaar maken (aanmelden vereist) waardoor u eigenaar van het inschrijvingsaccount bent.
  • Een bestaande eigenaar van het inschrijvingsaccount kan u toegang verlenen.

Als u een service-principal wilt gebruiken om een EA-abonnement te maken, moet een eigenaar van het inschrijvingsaccount die service-principal de mogelijkheid verlenen om abonnementen te maken.

Wanneer u een service-principal gebruikt om abonnementen te maken, gebruikt u de ObjectId van de Microsoft Entra Enterprise-toepassing als service-principal-id met behulp van Microsoft Graph PowerShell of Azure CLI. U kunt ook de stappen in De service-principal en tenant-id's zoeken om de object-id in Azure Portal te vinden voor een bestaande service-principal.

Zie Rollen toewijzen aan Azure Enterprise Overeenkomst service-principalnamen voor meer informatie over de API-aanvraag voor EA-roltoewijzing. Het artikel bevat een lijst met rollen (en roldefinitie-id's) die kunnen worden toegewezen aan een service-principal.

Notitie

  • Zorg ervoor dat u de juiste API-versie gebruikt om de eigenaarsmachtigingen voor het inschrijvingsaccount te verlenen. Voor dit artikel en voor de API's die erin worden beschreven, gebruikt u de API 2019-10-01-preview.
  • Als u migreert om de nieuwere API's te gebruiken, wordt de vorige configuratie die is gemaakt met de versie 2015-07-01, niet automatisch geconverteerd voor gebruik met de nieuwere API's.
  • De gegevens van het inschrijvingsaccount zijn alleen zichtbaar wanneer de rol van de gebruiker accounteigenaar is. Wanneer een gebruiker meerdere rollen heeft, gebruikt de API de minst beperkende rol van de gebruiker.

Accounts zoeken waartoe u toegang hebt

Wanneer u bent toegevoegd aan een inschrijvingsaccount dat is gekoppeld aan een accounteigenaar, wordt de relatie account-naar-inschrijving gebruikt om te bepalen waaraan de abonnementskosten moeten worden gefactureerd. Alle abonnementen die onder het account zijn gemaakt, worden gefactureerd aan de EA-inschrijving waarin het account zich bevindt. Als u abonnementen wilt maken, moet u waarden over het inschrijvingsaccount en de gebruiker-principals doorgeven om eigenaar van het abonnement te kunnen zijn.

Als u de volgende opdrachten wilt uitvoeren, moet u zijn aangemeld bij de basismap van de accounteigenaar. Dit is de map waarin standaard abonnementen worden gemaakt.

Vraag een opsomming aan van alle inschrijvingsaccounts waartoe u toegang hebt:

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

De API-respons vermeldt alle inschrijvingsaccounts waartoe u toegang hebt:

{
  "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"
    }
  ]
}

De waarden voor een factureringsbereik en id zijn hetzelfde. De id voor uw inschrijvingsaccount is het factureringsbereik waarbinnen de abonnementsaanvraag wordt gestart. Het is belangrijk om de id te kennen omdat het een vereiste parameter is die u verderop in het artikel gebruikt om een abonnement te maken.

Abonnementen maken onder een specifiek inschrijvingsaccount

In het volgende voorbeeld wordt in het inschrijvingsaccount dat u in de vorige stap hebt geselecteerd, een abonnement gemaakt met de naam Dev Team Subscription.

Met een van de volgende methoden maakt u een aliasnaam voor een abonnement. We raden u aan om bij het maken van de aliasnaam het volgende te doen:

  • Alfanumerieke tekens en afbreekstreepjes gebruiken
  • Beginnen met een letter en eindigen met een alfanumeriek teken
  • Gebruik geen perioden

Een alias wordt gebruikt voor eenvoudige vervanging van een door de gebruiker gedefinieerde tekenreeks in plaats van de abonnements-GUID. Met andere woorden, u kunt deze gebruiken als een snelkoppeling. Meer informatie over alias vindt u bij Alias - Maken. In de volgende voorbeelden wordt een tekenreeks gemaakt, sampleAlias maar u kunt elke gewenste tekenreeks gebruiken.

Als u naast de rol Accounteigenaar meerdere gebruikersrollen hebt, moet u de account-id ophalen uit Azure Portal. Vervolgens kunt u de id gebruiken om programmatisch abonnementen te maken.

Roep de PUT API aan om een aanvraag/alias voor het maken van een abonnement te maken.

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

Geef in de hoofdtekst van de aanvraag de id van een van uw enrollmentAccounts op als billingScope.

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

Toegestane waarden voor Workload zijn Production en DevTest.

Respons

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "b5bab918-e8a9-4c34-a2e2-ebc1b75b9d74",
    "provisioningState": "Accepted"
  }
}

U kunt een GET uitvoeren op dezelfde URL om de status van de aanvraag op te halen.

Aanvragen

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

Response

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "b5bab918-e8a9-4c34-a2e2-ebc1b75b9d74",
    "provisioningState": "Succeeded"
  }
}

Een 'in voortgang'-status wordt geretourneerd als een Accepted-status onder provisioningState.

Abonnement maken en subscriptionOwnerId de eigenaar maken

Wanneer een service-principal gebruikmaakt van de Abonnementsalias-API om een nieuw abonnement te maken en niet wordt opgenomen additionalProperties in de aanvraag, wordt de service-principal automatisch de eigenaar van het nieuwe abonnement. Als u niet wilt dat de service-principal de eigenaar is, kunt u dit opgeven subscriptionTenantId en subscriptionOwnerId in de additionalProperties. Dit proces maakt de opgegeven subscriptionOwnerId eigenaar van het nieuwe abonnement, niet de service-principal.

Voorbeeldtekst van aanvraag:


{
    "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": {}
        }
    }
}

Abonnementen maken in een andere tenant

Met behulp van de ALIAS REST API van het abonnement kunt u een abonnement in een andere tenant maken met behulp van de subscriptionTenantId parameter in de aanvraagbody. Uw Azure Service Principal (SPN) moet een token ophalen van de eigen tenant om het abonnement te maken. Nadat u het abonnement hebt gemaakt, moet u een token ophalen van de doeltenant om de overdracht te accepteren met behulp van de API Eigendom accepteren.

Zie Een abonnement maken in een andere tenant en overdrachtsaanvragen weergeven voor meer informatie over het maken van EA-abonnementen in een andere tenant.

ARM-sjabloon of Bicep gebruiken

In de vorige sectie hebt u gezien hoe u een abonnement maakt met PowerShell, CLI of REST API. Als u het maken van abonnementen wilt automatiseren, kunt u overwegen om een ARM-sjabloon (Azure Resource Manager) of Bicep-bestand te gebruiken.

Met de volgende ARM-sjabloon wordt een abonnement gemaakt. Geef billingScopede id van het inschrijvingsaccount op. Het abonnement wordt gemaakt in de hoofdbeheergroep. Nadat u het abonnement hebt gemaakt, kunt u het verplaatsen naar een andere beheergroep.

{
    "$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": {}
}

U kunt ook een Bicep-bestand gebruiken om het abonnement te maken.

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

Implementeer de sjabloon op het niveau van de beheergroep. In de volgende voorbeelden ziet u hoe u de JSON ARM-sjabloon implementeert, maar u kunt in plaats daarvan een Bicep-bestand implementeren.

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

Met een aanvraagbody:

{
  "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"
  }
}

Als u een abonnement wilt verplaatsen naar een nieuwe beheergroep, gebruikt u de volgende ARM-sjabloon.

{
    "$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": {}
}

Of het volgende Bicep-bestand.

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}'
}

Beperkingen van de API voor het maken van Azure Enter prise-abonnementen

  • Alleen Azure Enterprise-abonnementen worden met de API gemaakt.
  • Er geldt een limiet van 5000 abonnementen per inschrijvingsaccount. Daarna kunnen alleen nog meer abonnementen voor het account worden gemaakt in Azure Portal. Als u meer abonnementen via de API wilt maken, maakt u een nieuw inschrijvingsaccount. Het aantal geannuleerde, verwijderde en overgedragen abonnementen ten opzichte van de limiet van 5000.
  • Gebruikers die geen accounteigenaar zijn, maar zijn toegevoegd aan een inschrijvingsaccount via op rollen gebaseerd toegangsbeheer van Azure, kunnen geen abonnementen maken in Azure Portal.

Volgende stappen