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 programaticamente APIs herdadas de subscrições do Azure.

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

Quando você cria uma assinatura do Azure programaticamente, ela se enquadra nos termos do contrato em que você 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 do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. 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. Você 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 usuário deve ter a função de Administrador Corporativo ou a função de Proprietário em uma Conta de Registro para criar uma assinatura. Há duas maneiras de obter a função de Proprietário em uma Conta de Inscrição:

Para usar uma entidade de serviço para criar uma assinatura EA, o Proprietário da Conta de Inscrição deve conceder a essa entidade de serviço a capacidade de criar assinaturas.

Ao usar uma entidade de serviço para criar assinaturas, use o ObjectId do aplicativo Microsoft Entra Enterprise como a ID da entidade de serviço usando o Microsoft Graph PowerShell ou a CLI do Azure. Você também pode usar as etapas em Localizar sua entidade de serviço e IDs de locatário para localizar a ID do objeto no portal do Azure para uma entidade de serviço existente.

Para obter mais informações sobre a solicitação de API de atribuição de função EA, consulte Atribuir funções a nomes principais de serviço do Azure Enterprise Agreement. O artigo inclui uma lista de funções (e IDs de definição de função) 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 você estiver migrando para usar as APIs mais recentes, sua configuração anterior feita com a versão 2015-07-01 não será convertida automaticamente para uso com as APIs mais recentes.
  • As informações da Conta de Inscrição só ficam visíveis quando a função do usuário é Proprietário da Conta. Quando um usuário tem várias funções, a API usa a função menos restritiva do usuário.

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 você tiver várias funções de usuário além da função de Proprietário da Conta, deverá recuperar a ID da conta no portal do Azure. Em seguida, você pode usar o ID para criar assinaturas programaticamente.

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/sampleAlias?api-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": "b5bab918-e8a9-4c34-a2e2-ebc1b75b9d74",
    "provisioningState": "Accepted"
  }
}

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

Pedir

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

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

Criar assinatura e tornar subscriptionOwnerId o proprietário

Quando uma entidade de serviço usa a API de Alias de Assinatura para criar uma nova assinatura e não inclui additionalProperties na solicitação, a entidade de serviço se torna automaticamente a proprietária da nova assinatura. Se você não quiser que a entidade de serviço seja o proprietário, especifique subscriptionTenantId e subscriptionOwnerId no additionalProperties. Esse processo torna o especificado subscriptionOwnerId o proprietário da nova assinatura, não a entidade de 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.
  • Há um limite de 5.000 assinaturas por conta de inscrição. 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 usuários que não são Proprietários de Conta, mas foram adicionados a uma conta de registro por meio do controle de acesso baseado em função do Azure, não podem criar assinaturas no portal do Azure.

Próximos passos