Partager via


Créer des abonnements Contrat Entreprise Azure programmatiquement avec les API les plus récentes

Cet article vous aide à créer des abonnements Contrat Entreprise (EA) Azure programmatiquement pour un compte de facturation EA à l’aide des versions d’API les plus récentes. Si vous utilisez toujours la préversion, consultez Créer des abonnements Azure programmatiquement avec des API héritées.

Dans cet article, vous apprenez à créer des abonnements par programmation en utilisant Azure Resource Manager.

Lorsque vous créez un abonnement Azure programmatiquement, celui-ci est régi par les termes du contrat dans le cadre duquel vous recevez des services Azure de la part de Microsoft ou d’un vendeur certifié. Pour plus d’informations, consultez Informations légales relatives à Microsoft Azure.

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour bien démarrer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Vous ne pouvez pas créer de plans de support par programmation. Vous pouvez acheter un nouveau plan de support ou en mettre un à niveau dans le portail Azure. Accédez à Aide et support, puis, en haut de la page, sélectionnez Choisir le plan de support approprié.

Prérequis

Un utilisateur doit disposer du rôle Administrateur d’entreprise ou du rôle Propriétaire sur un compte d’inscription pour créer un abonnement. Il existe deux façons d’obtenir le rôle Propriétaire sur un compte d’inscription :

Pour utiliser un principal de service afin de créer un abonnement EA, le propriétaire du compte d’inscription doit autoriser ce principal de service à créer des abonnements.

Pendant l’utilisation d’un principal du service pour créer des abonnements, utilisez le paramètre ObjectId de l’application d’entreprise Microsoft Entra comme ID du principal de service en tirant parti de Microsoft Graph PowerShell ou d’Azure CLI. Vous pouvez également utiliser les étapes décrites dans Rechercher vos ID de principal de service et de tenant pour rechercher votre ID d’objet dans le Portail Azure pour un principal de service existant.

Pour plus d’informations sur la demande d’API d’attribution de rôle EA, consultez Attribuer des rôles à des noms de principal de service Contrat Entreprise Azure. Cet article comprend la liste des rôles (et des ID de définition de rôle) qui peuvent être affectés à un principal de service.

Remarque

  • Veillez à utiliser la bonne version d’API pour accorder des autorisations de propriétaire au compte d’inscription. Pour cet article et pour les API qui y sont documentées, utilisez l’API 2019-10-01-preview.
  • Si vous procédez à la migration pour utiliser des API plus récentes, votre configuration précédente effectuée avec la version 2015-07-01 n’est pas automatiquement convertie en vue d’être utilisée avec les nouvelles API.
  • Les informations du compte d’inscription sont visibles uniquement lorsque le rôle de l’utilisateur est Propriétaire du compte. Lorsqu’un utilisateur a plusieurs rôles, l’API utilise le rôle le moins restrictif de l’utilisateur.

Rechercher les comptes auxquels vous avez accès

Une fois que vous avez été ajouté à un compte d’inscription associé à un propriétaire de compte, Azure utilise la relation entre le compte et l’inscription pour déterminer où facturer les frais d’abonnement. Tous les abonnements créés sous le compte sont facturés à l’inscription EA à laquelle appartient ce compte. Pour créer des abonnements, vous devez transmettre les valeurs sur le compte d’inscription et les principaux d’utilisateur pour qu’ils obtiennent la propriété de l’abonnement.

Pour exécuter les commandes suivantes, vous devez être connecté au répertoire de base du propriétaire de compte, qui est le répertoire dans lequel les abonnements sont créés par défaut.

Demande pour obtenir la liste de tous les comptes d’inscription auxquels vous avez accès :

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

En réponse, l’API retourne la liste de tous les comptes d’inscription auxquels vous avez accès :

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

Les valeurs d’une étendue de facturation et celles de id sont la même chose. id, pour votre compte d’inscription, est l’étendue de facturation sous laquelle la demande d’abonnement est initiée. Il est important de connaître l’ID, car c’est un paramètre obligatoire que vous allez utiliser pour créer un abonnement, plus loin dans cet article.

Créer des abonnements sous un compte d’inscription spécifique

L’exemple suivant crée un abonnement nommé Dev Team Subscription dans le compte d’inscription sélectionné à l’étape précédente.

À l’aide de l’une des méthodes suivantes, vous créez un nom d’alias d’abonnement. Lorsque vous créez le nom d’alias, nous vous recommandons d’utiliser les éléments suivants :

  • Utilisiez des caractères alphanumériques, des traits d’union
  • Commenciez par une lettre et terminiez par un caractère alphanumérique
  • N’utilisez pas de points

Un alias est utilisé pour la substitution simple d’une chaîne définie par l’utilisateur au lieu du GUID de l’abonnement. En d’autres termes, vous pouvez l’utiliser comme raccourci. Pour en savoir plus sur l’alias, consultez Alias - Créer. Dans les exemples suivants, un sampleAlias est créé mais vous pouvez utiliser tout chaîne de votre choix.

Si vous avez plusieurs rôles d’utilisateur en plus du rôle Propriétaire du compte, vous devez récupérer l’ID de compte à partir du portail Azure. Vous pouvez ensuite utiliser l’ID pour créer des abonnements par programmation.

Appelez l’API PUT pour créer un alias ou une requête de création d’abonnement.

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

Dans le corps de la requête, fournissez comme billingScope l’id de l’un de vos enrollmentAccounts.

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

Les valeurs autorisées pour Workload sont Production et DevTest.

response

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

Vous pouvez exécuter une opération GET sur la même URL pour obtenir l’état de la requête.

Requête

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

response

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

L’état En cours est retourné comme un état Accepted sous provisioningState.

Créer un abonnement et en faire de subscriptionOwnerId le propriétaire

Quand un principal de service utilise l’API Alias d’abonnement pour créer un abonnement et n’inclut pas additionalProperties dans la demande, le principal de service devient automatiquement le propriétaire du nouvel abonnement. Si vous ne souhaitez pas que le propriétaire soit le propriétaire, vous pouvez spécifier subscriptionTenantId et subscriptionOwnerId dans le additionalProperties. Ce processus rend le subscriptionOwnerId spécifié le propriétaire du nouvel abonnement, et non le principal de service.

Exemple de corps de la demande :


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

Créer des abonnements dans un autre locataire

À l’aide de l’API REST Alias d’abonnement, vous pouvez créer un abonnement dans un autre locataire en utilisant le paramètre subscriptionTenantId dans le corps de la requête. Votre principal de service (SPN) Azure doit obtenir un jeton auprès du locataire d’origine pour créer l’abonnement. Après avoir créé l’abonnement, vous devez obtenir un jeton du locataire cible pour accepter le transfert en utilisant l’API Accepter la propriété.

Pour plus d’informations sur la création d’abonnements Contrat Entreprise dans un autre locataire, consultez Créer un abonnement dans un autre locataire et afficher les demandes de transfert.

Utiliser un modèle ARM ou Bicep

La section précédente vous a montré comment créer un abonnement avec PowerShell, Azure CLI ou l’API REST. Si vous devez automatiser la création des abonnements, utilisez plutôt un modèle ARM (Azure Resource Manager) ou un fichier Bicep.

Le modèle ARM suivant permet de créer un abonnement. Pour billingScope , indiquez l’ID du compte d’inscription. L’abonnement est créé dans le groupe d’administration racine. Après avoir créé l’abonnement, vous pouvez le déplacer vers un autre groupe d’administration.

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

Ou, utilisez un fichier Bicep pour créer l’abonnement.

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

Déployez le modèle au niveau du groupe d’administration. Les exemples suivants illustrent le déploiement du modèle ARM JSON, mais vous pouvez déployer un fichier Bicep à la place.

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

Avec le corps de la demande :

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

Pour déplacer un abonnement vers un nouveau groupe d’administration, utilisez le modèle ARM suivant.

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

Ou, créez le fichier Bicep suivant.

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

Limitations de l’API de création d’abonnement Azure Enterprise

  • Seuls des abonnements Azure Enterprise peuvent être créés à l’aide de l’API.
  • Il existe une limite de 5 000 abonnements par compte d’inscription. Au-delà de cette limite, les abonnements supplémentaires pour le compte peuvent être créés uniquement à partir du portail Azure. Pour créer des abonnements supplémentaires via l’API, créez un autre compte d’inscription. Les abonnements annulés, supprimés et transférés sont pris en compte dans la limite de 5 000.
  • Les utilisateurs qui ne sont pas propriétaires de compte, mais qui ont été ajoutés à un compte d’inscription par le biais du contrôle d’accès en fonction du rôle Azure, ne peuvent pas créer d’abonnements dans le portail Azure.

Étapes suivantes