Compartilhar via


Criar assinaturas do Azure de modo programático para um Contrato de Cliente da Microsoft com as APIs mais recentes

Este artigo ajudará você a criar assinaturas do Azure de modo programático para um Contrato de Cliente da Microsoft usando as versões mais recentes da API. Se você ainda estiver usando a versão prévia mais antiga, consulte Criar programaticamente assinaturas do Azure com APIs herdadas.

Neste artigo, você aprenderá a criar assinaturas programaticamente usando o Azure Resource Manager.

Se você precisar de criar uma assinatura do Azure MCA em locatários do Microsoft Entra, consulte Criar programaticamente assinaturas do MCA entre locatários do Microsoft Entra.

Quando você cria uma assinatura do Azure programaticamente, essa assinatura é regida pelo contrato sob o qual você obteve serviços Azure da Microsoft ou de um revendedor autorizado. Para obter mais informações, confira Informações Legais do Microsoft Azure.

Observação

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

Você não pode criar planos de suporte programaticamente. Você pode comprar um novo ou atualizar um plano de suporte no portal do Azure. Navegue até Ajuda + suporte e, na parte superior da página, selecione Escolher o plano de suporte correto.

Pré-requisitos

Para criar assinaturas, você precisa ter uma função de proprietário, de colaborador ou de criador de assinatura do Azure em uma seção de fatura; ou uma função de proprietário ou de colaborador em um perfil de cobrança ou uma conta de cobrança. Você também pode atribuir a mesma função a um SPN (nome da entidade de serviço). Para obter mais informações sobre as funções e como atribuir permissões a elas, confira Funções de cobrança de assinatura e tarefas.

Se você estiver usando um SPN para criar assinaturas, use a ObjectId do Aplicativo empresarial do Microsoft Entra como a ID da Entidade de Segurança usando o Microsoft Graph PowerShell ou a CLI do Azure.

Observação

As permissões diferem entre a API herdada (api-version=2018-03-01-preview) e a API mais recente (api-version=2020-05-01). Talvez você já tenha uma função suficiente para usar a API herdada, mas pode ser necessário solicitar que um administrador do EA lhe atribua uma função para usar a API mais recente.

Se você não souber se tem acesso a uma conta do Contrato de Cliente da Microsoft, confira Verificar o acesso a um Contrato de Cliente da Microsoft.

Localizar as contas de cobrança às quais você tem acesso

Faça a solicitação a seguir para listar todas as contas de cobrança.

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

A resposta da API lista as contas de cobrança às quais você tem acesso.

{
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx",
      "name": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx",
      "properties": {
        "accountStatus": "Active",
        "accountType": "Enterprise",
        "agreementType": "MicrosoftCustomerAgreement",
        "billingProfiles": {
          "hasMoreResults": false
        },
        "displayName": "Contoso",
        "hasReadAccess": false
      },
      "type": "Microsoft.Billing/billingAccounts"
    }
  ]
}

Use a propriedade displayName para identificar a conta de cobrança para a qual você deseja criar assinaturas. Verifique se o agreementType da conta é MicrosoftCustomerAgreement. Copie o name da conta. Por exemplo, para criar uma assinatura para a conta de cobrança Contoso, copie aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx. Cole esse valor em algum lugar para usá-lo na próxima etapa.

Localizar perfis de cobrança e seções de fatura para criar assinaturas

Os preços da sua assinatura serão exibidos em uma seção da fatura do perfil de cobrança. Use a API a seguir para obter uma lista de perfis de cobrança e seções de fatura nos quais você tem permissão para criar assinaturas do Azure.

Primeiro, você obtém a lista de perfis de cobrança na conta de cobrança à qual você tem acesso (use o name que você obteve na etapa anterior)

GET https://management.azure.com/providers/Microsoft.Billing/billingaccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingprofiles/?api-version=2020-05-01

A resposta da API listará todos os perfis de cobrança aos quais você tem acesso para criar assinaturas:

{
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx",
      "name": "AW4F-xxxx-xxx-xxx",
      "properties": {
        "billingRelationshipType": "Direct",
        "billTo": {
          "addressLine1": "One Microsoft Way",
          "city": "Redmond",
          "companyName": "Contoso",
          "country": "US",
          "email": "kenny@contoso.com",
          "phoneNumber": "425xxxxxxx",
          "postalCode": "98052",
          "region": "WA"
        },
        "currency": "USD",
        "displayName": "Contoso Billing Profile",
        "enabledAzurePlans": [
          {
            "skuId": "0002",
            "skuDescription": "Microsoft Azure Plan for DevTest"
          },
          {
            "skuId": "0001",
            "skuDescription": "Microsoft Azure Plan"
          }
        ],
        "hasReadAccess": true,
        "invoiceDay": 5,
        "invoiceEmailOptIn": false,
        "invoiceSections": {
          "hasMoreResults": false
        },
        "poNumber": "001",
        "spendingLimit": "Off",
        "status": "Active",
        "systemId": "AW4F-xxxx-xxx-xxx",
        "targetClouds": []
      },
      "type": "Microsoft.Billing/billingAccounts/billingProfiles"
    }
  ]
}

Copie a id para identificar a seguir as seções de fatura abaixo do perfil de cobrança. Por exemplo, copie /providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx e chame a API a seguir.

GET https://management.azure.com/providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoicesections?api-version=2020-05-01

Resposta

{
  "totalCount": 1,
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx",
      "name": "SH3V-xxxx-xxx-xxx",
      "properties": {
        "displayName": "Development",
        "state": "Active",
        "systemId": "SH3V-xxxx-xxx-xxx"
      },
      "type": "Microsoft.Billing/billingAccounts/billingProfiles/invoiceSections"
    }
  ]
}

Use a propriedade id para identificar a seção da fatura para a qual você deseja criar assinaturas. Copie toda a cadeia de caracteres. Por exemplo, /providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx.

Criar uma assinatura de uma seção da fatura

O exemplo a seguir criará uma assinatura chamada Assinatura da Equipe de Desenvolvimento para a seção de fatura Desenvolvimento. A assinatura será cobrada no perfil de cobrança chamado Perfil de Cobrança da Contoso e aparecerá na seção Desenvolvimento da fatura da empresa. Use o escopo do orçamento copiado da etapa anterior: /providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx.

Substitua o valor do espaço reservado sampleAlias conforme necessário. Para obter mais informações sobre essas chamadas REST, consulte Criar e Obter.

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

Corpo da solicitação

{
  "properties":
    {
        "billingScope": "/providers/Microsoft.Billing/billingAccounts/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx",
        "DisplayName": "Dev Team subscription",
        "Workload": "Production"
    }
}

Resposta

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

É possível executar uma função GET na mesma URL para obter o status da solicitação.

Solicitação

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

Resposta

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

Um status em andamento será retornado como um estado Accepted em provisioningState.

Usar o modelo do ARM ou o Bicep

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

O modelo a seguir cria uma assinatura. Para billingScope, forneça a ID da seção da fatura. A assinatura é criada no grupo de gerenciamento raiz. Depois de criar a assinatura, você poderá 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": {}
}

Também é possível usar 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 do ARM de JSON, mas você pode implantar um arquivo Bicep como alternativa.

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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx"
      }
    },
    "mode": "Incremental"
  }
}

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

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

Também é possível usar o arquivo Bicep a seguir.

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

Próximas etapas