Partilhar via


Criar programaticamente subscrições de Contrato Enterprise do Azure com as APIs mais recentes

Este artigo ajuda-o a criar subscrições de Contrato Enterprise (EA) do Azure para uma conta de faturação do EA através de programação com as versões de API mais recentes. Se ainda estiver a utilizar a versão de pré-visualização mais antiga, consulte Criar APIs herdadas de subscrições do Azure de forma programática.

Neste artigo, aprenderá a criar subscrições através de programação com o Azure Resource Manager.

Quando cria uma subscrição do Azure de forma programática, esta é abrangida pelos termos do contrato em que recebe serviços do Azure da Microsoft ou de um vendedor certificado. Para obter mais informações, veja Informações Legais do Microsoft Azure.

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Não é possível criar planos de suporte programaticamente. Pode comprar um novo plano de suporte ou atualizar um no portal do Azure. Navegue até Ajuda + suporte e, na parte superior da página, selecione Escolher o plano de suporte correto.

Pré-requisitos

Um utilizador tem de ter a função de Administrador da empresa ou a função de Proprietário numa Conta de inscrição para criar uma subscrição. Existem duas formas de obter a função de Proprietário numa Conta de registo:

Para utilizar uma entidade de serviço para criar uma subscrição EA, um Proprietário da Conta de Inscrição tem de conceder a essa entidade de serviço a capacidade de criar subscrições.

Ao utilizar uma entidade de serviço para criar assinaturas, utilize o ObjectId da aplicação Microsoft Entra Enterprise como ID da entidade de serviço através do o Microsoft Graph PowerShell ou a CLI do Azure. Também pode utilizar os passos em Encontrar a sua entidade de serviço e IDs de tenant para encontrar a ID de objeto no portal do Azure para uma entidade de serviço existente.

Para obter mais informações sobre o pedido de API de atribuição de funções do EA, consulte Atribuir funções a nomes de entidades de serviço do Azure Enterprise Agreement. O artigo inclui uma lista de funções (e IDs de definição de funções) que podem ser atribuídas a uma entidade de serviço.

Nota

  • Confirme se utiliza a versão correta da API para conceder permissões de proprietário à conta de inscrição. Para este artigo e para as APIs documentadas no mesmo, utilize a API 2019-10-01-preview.
  • Se estiver a migrar para utilizar as API mais recentes, a sua configuração anterior efetuada com a versão 2015-07-01 não é automaticamente convertida para utilização com as API mais recentes.
  • As informações da Conta de inscrição só são visíveis quando a função do utilizador é Proprietário da conta. Quando um utilizador tem várias funções, a API utiliza a função menos restritiva do utilizador.

Localizar contas às quais tem acesso

Depois de ser adicionado a uma Conta de Inscrição associada a um Proprietário de Conta, o Azure usa a relação de conta para inscrição para determinar onde faturar os custos da subscrição. Todas as subscrições criadas no âmbito da conta são faturadas na inscrição de EA em que a conta está. Para criar subscrições, deve transmitir valores sobre a conta de inscrição e as entidades principais de utilizador para ser proprietário da subscrição.

Para executar os comandos seguintes, deve ter sessão iniciada no diretório raiz do Proprietário da Conta, que é o diretório no qual as subscrições são criadas por predefinição.

Pedido para listar todas as contas de inscrição às quais tem acesso:

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

A resposta da API lista todas as contas de inscrição às quais tem acesso:

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

Os valores para um escopo de faturamento e id são a mesma coisa. O id da sua conta de inscrição é o âmbito da faturação no qual o pedido de subscrição é iniciado. É importante saber o ID porque é um parâmetro obrigatório que você usa mais adiante no artigo para criar uma assinatura.

Criar subscrições numa conta de registo específica

O exemplo a seguir cria uma subscrição denominada Subscrição da Equipa de Desenvolvimento na conta de inscrição selecionada no passo anterior.

Usando um dos seguintes métodos, você cria um nome de alias de assinatura. Recomendamos que, ao criar o nome do alias, você:

  • Use caracteres alfanuméricos e hífenes
  • Comece com uma letra e termine com um caractere alfanumérico
  • Não use períodos menstruais

Um alias é usado para substituição simples de uma cadeia de caracteres definida pelo usuário em vez do GUID de assinatura. Em outras palavras, você pode usá-lo como um atalho. Você pode saber mais sobre alias em Alias - Criar. Nos exemplos a seguir, é criado, sampleAlias mas você pode usar qualquer cadeia de caracteres que desejar.

Se tiver várias funções de utilizador para além da função de Proprietário da conta, terá de obter o ID da conta a partir do portal do Azure. Em seguida, pode utilizar o ID para criar assinaturas de forma programática.

Chame a API PUT para criar uma subscrição/alias de criação de subscrição.

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

No corpo do pedido, indique o billingScope e o id de uma das suas enrollmentAccounts.

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

Os valores permitidos para Workload são Production e DevTest.

Response

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

Pode chamar GET no mesmo URL para obter o estado do pedido.

Pedir

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

É devolvido um estado em curso como um estado Accepted em provisioningState.

Criar subscrição e tornar subscriptionOwnerId o proprietário

Quando uma entidade de serviço utiliza a API de alias de subscrição para criar uma nova subscrição e não a inclui additionalProperties no pedido, a entidade de serviço torna-se automaticamente o proprietário da nova subscrição. Se não quiser que o responsável principal do serviço seja o proprietário, pode especificar subscriptionTenantId e subscriptionOwnerId no additionalProperties. Este processo faz com que o especificado subscriptionOwnerId seja o proprietário da nova subscrição e não o mandante do serviço.

Corpo da solicitação da amostra:


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

Criar subscrições num inquilino diferente

Usando a API REST do Alias de assinatura, você pode criar uma assinatura em um locatário diferente usando o subscriptionTenantId parâmetro no corpo da solicitação. Sua entidade de serviço do Azure (SPN) deve obter um token de seu locatário doméstico para criar a assinatura. Depois de criar a assinatura, você deve obter um token do locatário de destino para aceitar a transferência usando a API de Aceitação de Propriedade .

Para obter mais informações sobre como criar assinaturas EA em outro locatário, consulte Criar assinatura em outro locatário e exibir solicitações de transferência.

Usar modelo ARM ou Bíceps

A seção anterior mostrou como criar uma assinatura com PowerShell, CLI ou API REST. Se você precisar automatizar a criação de assinaturas, considere usar um modelo do Azure Resource Manager (modelo ARM) ou um arquivo Bicep.

O modelo ARM a seguir cria uma assinatura. Para billingScope, forneça o ID da conta de inscrição. A assinatura é criada no grupo de gerenciamento raiz. Depois de criar a assinatura, você pode movê-la para outro grupo de gerenciamento.

{
    "$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, use um arquivo Bicep para criar a assinatura.

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

Implante o modelo no nível do grupo de gerenciamento. Os exemplos a seguir mostram a implantação do modelo JSON ARM, mas você pode implantar um arquivo Bicep.

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

Com um corpo de solicitação:

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

Para mover uma assinatura para um novo grupo de gerenciamento, use o seguinte modelo ARM.

{
    "$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, o seguinte arquivo Bicep.

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

Limitações da API de criação de subscrições do Azure Enterprise

  • Apenas as subscrições do Azure Enterprise são criadas com esta API.
  • Existe um limite de 5000 subscrições por conta de registo. Depois disso, só podem ser criadas mais subscrições para a conta no portal do Azure. Para criar mais subscrições através da API, crie outra conta de inscrição. As subscrições canceladas, eliminadas e transferidas contam para o limite de 5000.
  • Os utilizadores que não são proprietários de contas, mas que foram adicionados a uma conta de registo através do controlo de acesso baseado em funções do Azure, não podem criar subscrições no portal do Azure.

Próximos passos