Compartir vía


Creación de suscripciones de Contrato Enterprise de Azure mediante programación con las API más recientes

Este artículo le ayuda a crear mediante programación suscripciones de Contrato Enterprise de Azure para una cuenta de facturación de EA mediante las versiones más recientes de las API. Si todavía usa la versión preliminar anterior, consulte Creación de suscripciones de Azure mediante programación con las versiones preliminares de las API.

En este artículo, se ofrece información sobre cómo crear suscripciones mediante programación con Azure Resource Manager.

Cuando se crea una suscripción de Azure mediante programación, esta queda sujeta a los términos del acuerdo por el que se reciben los servicios de Azure de Microsoft o de un vendedor certificado. Para más información, consulte Información legal de Microsoft Azure.

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

No se pueden crear planes de soporte técnico mediante programación. Puede comprar un nuevo plan de soporte técnico o actualizar uno en Azure Portal. Vaya a Ayuda y soporte técnico y, a continuación, en la parte superior de la página, seleccione Elegir el plan de soporte técnico adecuado.

Requisitos previos

Un usuario debe tener el rol Administrador de empresa o Propietario en una cuenta de inscripción para poder crear una suscripción. Hay dos maneras de obtener el rol Propietario en una cuenta de inscripción:

Para usar una entidad de servicio para crear una suscripción de EA, un propietario de la cuenta de inscripción debe conceder a esa entidad de servicio la capacidad de crear suscripciones.

Al usar una entidad de servicio para crear suscripciones, use el ObjectId de la aplicación empresarial de Microsoft Entra como id. de entidad de servicio mediante PowerShell de Microsoft Graph o la CLI de Azure. También puede seguir los pasos descritos en Búsqueda de los identificadores de la entidad de servicio y del inquilino para buscar el identificador de objeto en Azure Portal de una entidad de servicio existente.

Para más información sobre la solicitud de API de asignación de roles de EA, consulte Asignación de roles a nombres de entidad de seguridad de servicio de Contrato Enterprise de Azure. Este artículo incluye una lista de roles (e identificadores de definición de roles) que se pueden asignar a una entidad de servicio.

Nota:

  • Asegúrese de usar la versión correcta de API para conceder permisos de propietario a la cuenta de inscripción. A los efectos de este artículo y de las API que se documentan en él, use la API 2019-10-01-Preview.
  • Si va a migrar para usar las API más recientes, la configuración anterior realizada con la versión 2015-07-01 no se convierte automáticamente para su uso con las API más recientes.
  • La información de la cuenta de inscripción solo es visible cuando el rol del usuario es Propietario de la cuenta. Cuando un usuario tiene varios roles, la API usa el rol menos restrictivo del usuario.

Búsqueda de cuentas a las que tiene acceso

Cuando haya sido agregado a una cuenta de inscripción asociada a un propietario de cuenta, Azure usa la relación cuenta-inscripción para determinar dónde se cobra la suscripción. Todas las suscripciones creadas en la cuenta se facturan a la inscripción de EA en la que se encuentra la cuenta. Para crear suscripciones, debe pasar valores sobre la cuenta de inscripción y las entidades de seguridad de usuario al propietario de la suscripción.

Para ejecutar los comandos siguientes, debe iniciar sesión en el directorio particular del propietario de cuenta, que es el directorio en el que las suscripciones se crean de manera predeterminada.

Solicite mostrar todas las cuentas de inscripción a las que tiene acceso:

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

La respuesta de la API muestra todas las cuentas de inscripción a las que tiene acceso:

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

Los valores para un ámbito de facturación y id son lo mismo. El id de la cuenta de inscripción es el ámbito de facturación en el que se inicia la solicitud de suscripción. Es importante conocer el identificador porque es un parámetro necesario que se usará más adelante en el artículo para crear una suscripción.

Creación de suscripciones con una cuenta de inscripción concreta

En el ejemplo siguiente se crea una suscripción denominada Dev Team Subscription en la cuenta de inscripción seleccionada en el paso anterior.

Con uno de los métodos siguientes, se crea un nombre de alias de suscripción. Se recomienda que, al crear el nombre de alias, haga lo siguiente:

  • Use caracteres alfanuméricos y guiones
  • Comience con una letra y termine con un carácter alfanumérico
  • No use puntos

Se usa un alias para la sustitución simple de una cadena definida por el usuario en lugar del GUID de suscripción. Es decir, puede usarlo como acceso directo. Puede obtener más información sobre el alias en Alias - Create. En los ejemplos siguientes, se crea sampleAlias, pero puede usar cualquier cadena que le guste.

Si tiene varios roles de usuario además del rol Propietario de la cuenta, debe recuperar el identificador de cuenta de Azure Portal. A continuación, puede usar el identificador para crear suscripciones mediante programación.

Llame a PUT API para crear una solicitud de creación de suscripción o un alias.

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

En el cuerpo de la solicitud, proporcione el billingScope como el id de una de las enrollmentAccounts.

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

Los valores permitidos de Workload son Production y DevTest.

Response

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

Puede realizar una operación GET en la misma dirección URL para obtener el estado de la solicitud.

Solicitud

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

Un estado en curso se devuelve como estado Accepted en provisioningState.

Crear suscripción y convertir subscriptionOwnerId en el propietario

Cuando una entidad de servicio usa la API de alias de suscripción para crear una nueva suscripción y no incluye additionalProperties en la solicitud, la entidad de servicio se convierte automáticamente en el propietario de la nueva suscripción. Si no desea que la entidad de servicio sea el propietario, puede especificar subscriptionTenantId y subscriptionOwnerId en additionalProperties. Este proceso hace que el propietario especificado subscriptionOwnerId de la nueva suscripción, no la entidad de servicio.

Cuerpo de solicitud de ejemplo:


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

Crear suscripciones en un inquilino diferente

Mediante la API de REST Alias de suscripción, puede crear una suscripción en un inquilino diferente mediante el parámetro subscriptionTenantId en el cuerpo de la solicitud. La entidad de servicio (SPN) de Azure debe obtener un token de su inquilino principal para crear la suscripción. Después de crear la suscripción, debe obtener un token del inquilino de destino para aceptar la transferencia mediante la API Aceptar la propiedad.

Para obtener más información sobre cómo crear suscripciones de EA en otro inquilino, consulte Creación de una suscripción en otro inquilino y visualización de las solicitudes de transferencia.

Uso de una plantilla de ARM o Bicep

En la sección anterior se mostró cómo crear una suscripción con PowerShell, la CLI o la API REST. Si tiene que automatizar la creación de suscripciones, considere la posibilidad de usar una plantilla de Azure Resource Manager (plantilla de ARM) o un archivo de Bicep.

La plantilla de ARM siguiente crea una suscripción. Para billingScope, proporcione el identificador de la cuenta de inscripción. La suscripción se crea en el grupo de administración raíz. Después de crear la suscripción, puede moverla a otro grupo de administración.

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

O bien, usar un archivo de Bicep para crear la suscripción.

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

Implemente la plantilla en el nivel de grupo de administración. Los ejemplos siguientes muestran cómo implementar la plantilla de ARM de JSON, pero es posible implementar un archivo de Bicep en su lugar.

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

Con un cuerpo de la solicitud:

{
  "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 una suscripción a un nuevo grupo de administración, use la siguiente plantilla de 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": {}
}

O bien, el archivo de Bicep siguiente.

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

Limitaciones de la API de creación de suscripciones de Azure Enterprise

  • Con esta API solo pueden crearse suscripciones de Azure Enterprise.
  • Hay un límite de 5000 suscripciones por cuenta de inscripción. Después, solo se pueden crear más suscripciones para la cuenta en Azure Portal. Para crear más suscripciones mediante la API, cree otra cuenta de inscripción. Las suscripciones canceladas, eliminadas y transferidas cuentan para el límite de 5000.
  • Los usuarios que no son propietarios de cuenta, pero se han agregado a una cuenta de inscripción a través del control de acceso basado en roles de Azure, no pueden crear suscripciones en Azure Portal.

Pasos siguientes