Creare sottoscrizioni con contratto Enterprise di Azure a livello di codice con le API più recenti

Questo articolo illustra come creare a livello di codice sottoscrizioni con contratto Enterprise di Azure per un account di fatturazione EA usando le versioni più recenti dell'API. Se si usa ancora la versione di anteprima precedente, vedere Creare api legacy delle sottoscrizioni di Azure a livello di codice.

Questo articolo contiene informazioni su come creare sottoscrizioni a livello di codice usando Azure Resource Manager.

Quando si crea una sottoscrizione di Azure a livello di codice, rientra nelle condizioni del contratto in cui si ricevono i servizi di Azure da Microsoft o da un venditore certificato. Per altre informazioni, vedere Informazioni legali su Microsoft Azure.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Non è possibile creare piani di supporto a livello di codice. È possibile invece acquistare un nuovo piano di supporto o aggiornarne uno già esistente nel portale di Azure. Passare a Guida e supporto e nella parte superiore della pagina selezionare Scegliere il piano di supporto appropriato.

Prerequisiti

Per creare una sottoscrizione, un utente deve avere il ruolo di amministratore dell'organizzazione o il ruolo di proprietario in un account di registrazione. Esistono due modi per ottenere il ruolo di proprietario in un account di registrazione:

Per usare un'entità servizio per creare una sottoscrizione EA, un proprietario dell'account di registrazione deve concedere a tale entità servizio la possibilità di creare sottoscrizioni.

Quando si usa un'entità servizio per creare sottoscrizioni, usare l'ObjectId dell'applicazione aziendale Microsoft Entra come ID dell'entità servizio usando PowerShell di Microsoft Graph o l'interfaccia della riga di comando di Azure. È anche possibile eseguire i passaggi descritti in Trovare l'entità servizio e gli ID tenant per trovare l'ID oggetto nel portale di Azure per un'entità servizio esistente.

Per altre informazioni sulla richiesta di API di assegnazione di ruolo EA, vedere Assegnare ruoli ai nomi delle entità servizio del Contratto Enterprise di Azure. L'articolo include un elenco di ruoli (e gli ID di definizione del ruolo) che possono essere assegnati a un'entità servizio.

Nota

  • Assicurarsi di usare la versione corretta dell'API per concedere le autorizzazioni di proprietario dell'account di registrazione. Per questo articolo e per le API documentate, usare l'API 2019-10-01-preview.
  • Se si esegue la migrazione per usare le API più recenti, la configurazione precedente eseguita con la versione 2015-07-01 non viene convertita automaticamente per l'uso con le API più recenti.
  • Le informazioni sull'account di registrazione sono visibili solo quando il ruolo dell'utente è proprietario dell'account. Quando un utente ha più ruoli, l'API usa quello meno restrittivo.

Trovare gli account a cui si ha accesso

Dopo l'aggiunta dell'utente a un account di registrazione associato a un proprietario dell'account, Azure usa la relazione tra account e registrazione per determinare il destinatario degli addebiti della sottoscrizione. Tutte le sottoscrizioni create con l'account vengono fatturate alla registrazione con Contratto Enterprise in cui si trova l'account. Per creare sottoscrizioni, è necessario passare i valori sull'account di registrazione e le entità utente proprietarie della sottoscrizione.

Per eseguire i comandi seguenti è necessario che sia stato effettuato l'accesso nella home directory del proprietario dell'account, ovvero la directory in cui, per impostazione predefinita, vengono create le sottoscrizioni.

Richiesta per ottenere l'elenco di tutti gli account di registrazione a cui si può accedere:

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

La risposta dell'API elenca tutti gli account di registrazione a cui si può accedere:

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

Il valore di un ambito di fatturazione e id sono equivalenti. L'id dell'account di registrazione è l'ambito di fatturazione in cui è stata iniziata la richiesta di sottoscrizione. È importante conoscere l'ID perché è un parametro obbligatorio che verrà usato più avanti nell'articolo per creare una sottoscrizione.

Creare sottoscrizioni in un account di registrazione specifico

L'esempio seguente crea una sottoscrizione denominata Dev Team Subscription nell'account di registrazione selezionato nel passaggio precedente.

Usando uno dei metodi seguenti, si crea un nome alias di sottoscrizione. Quando si crea l'alias, è consigliabile:

  • Usare caratteri alfanumerici e trattini
  • Iniziare con una lettera e terminare con un carattere alfanumerico
  • Non usare punti

Un alias viene usato per la sostituzione del GUID della sottoscrizione con una stringa definita dall'utente. In altre parole, è possibile usarlo come collegamento. Per altre informazioni sull'alias, vedere Alias - Crea. Negli esempi seguenti viene creato sampleAlias ma è possibile usare qualsiasi stringa desiderata.

Quando si hanno più ruoli utente oltre al ruolo di proprietario dell'account, è necessario recuperare l'ID account dal portale di Azure. È quindi possibile usare l'ID per creare sottoscrizioni a livello di codice.

Chiamare l'API PUT per creare una richiesta/un alias di creazione della sottoscrizione.

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

Nel corpo della richiesta fornire come billingScope il valore di id da uno di enrollmentAccounts.

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

I valori consentiti per Workload sono Production e DevTest.

Response

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

È possibile eseguire un'operazione GET nello stesso URL per ottenere lo stato della richiesta.

Richiedi

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

Risposta

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

Uno stato in corso viene restituito come stato Accepted in provisioningState.

Creare una sottoscrizione e impostare subscriptionOwnerId come proprietario

Quando un'entità servizio usa l'API Alias sottoscrizione per creare una nuova sottoscrizione e non include additionalProperties nella richiesta, l'entità servizio diventa automaticamente il proprietario della nuova sottoscrizione. Se non si vuole che l'entità servizio sia il proprietario, è possibile specificare subscriptionTenantId e subscriptionOwnerId in additionalProperties. Questo processo rende l'oggetto specificato subscriptionOwnerId il proprietario della nuova sottoscrizione, non l'entità servizio.

Corpo della richiesta di esempio:


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

Creare sottoscrizioni in un tenant diverso

Usando l'API REST alias della sottoscrizione, è possibile creare una sottoscrizione in un tenant diverso usando il subscriptionTenantId parametro nel corpo della richiesta. L'entità servizio di Azure deve ottenere un token dal tenant principale per creare la sottoscrizione. Dopo aver creato la sottoscrizione, è necessario ottenere un token dal tenant di destinazione per accettare il trasferimento usando l'API Accept Ownership .

Per altre informazioni sulla creazione di sottoscrizioni EA in un altro tenant, vedere Creare una sottoscrizione in altri tenant e visualizzare le richieste di trasferimento.

Usare il modello di ARM o Bicep

La sezione precedente ha illustrato come creare una sottoscrizione con PowerShell, interfaccia della riga di comando o API REST. Se è necessario automatizzare la creazione di sottoscrizioni, è consigliabile usare un modello di Azure Resource Manager (modello di ARM) o un file Bicep.

Il modello di ARM seguente crea una sottoscrizione. Per billingScope, specificare l'ID dell'account di registrazione. Le nuove sottoscrizioni vengono sempre create nel gruppo di gestione radice. Dopo aver creato la sottoscrizione, è possibile spostarla in un altro gruppo di gestione.

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

In alternativa, usare un file Bicep per creare la sottoscrizione.

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

Distribuire il modello a livello di gruppo di gestione. Gli esempi seguenti illustrano la distribuzione del modello di ARM JSON, ma in alternativa è possibile anche implementare un file Bicep.

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

Con un corpo della richiesta:

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

Per spostare una sottoscrizione in un nuovo gruppo di gestione, usare il modello di ARM seguente

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

o, in alternativa, il file Bicep seguente.

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

Limitazioni dell'API di creazione della sottoscrizione di Azure Enterprise

  • Usando l'API è possibile creare solo le sottoscrizioni di Azure Enterprise.
  • È previsto un limite di 5.000 sottoscrizioni per ogni account di registrazione. Dopo tale limite, sarà possibile creare altre sottoscrizioni per l'account nel portale di Azure. Per creare più sottoscrizioni tramite l'API, creare un altro account di registrazione. Le sottoscrizioni annullate, eliminate e trasferite vengono conteggiate ai fini del limite di 5000.
  • Gli utenti che non sono proprietari di account, ma sono stati aggiunti a un account di registrazione tramite il controllo degli accessi in base al ruolo di Azure, non possono creare sottoscrizioni nel portale di Azure.

Passaggi successivi