使用最新的 API 以程式設計方式建立 Azure Enterprise 合約訂用帳戶

本文可協助您使用最新的 API 版本,以程式設計方式建立 EA 計費帳戶的 Azure Enterprise 合約 (EA) 訂用帳戶。 如果您仍在使用舊版預覽版本,請參閱 以程式設計方式建立 Azure 訂用帳戶舊版 API

在本文中,可了解如何使用 Azure Resource Manager 以程式設計方式建立訂用帳戶。

當您以程式設計方式建立 Azure 訂用帳戶時,該訂用帳戶會受合約規範,此合約是您向 Microsoft 或授權經銷商取得 Azure 服務時所簽署的合約。 如需詳細資訊,請參閱 Microsoft Azure 法律資訊

注意

本文使用 Azure Az PowerShell 模組,這是與 Azure 互動時建議使用的 PowerShell 模組。 若要開始使用 Az PowerShell 模組,請參閱安裝 Azure PowerShell。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

必要條件

使用者必須擁有註冊帳戶的「擁有者」角色,才能建立訂用帳戶。 有兩種方式可取得此角色:

若要使用服務主體 (SPN) 建立 EA 訂用帳戶,註冊帳戶的擁有者必須 授與該服務主體建立訂用帳戶的能力。

使用 SPN 建立訂用帳戶時,請使用 Azure Active Directory PowerShellAzure CLI,使用 Azure AD應用程式註冊的 ObjectId 作為服務主體 ObjectId。 您也可以使用尋找 SPN 和租使用者識別碼中的步驟,在現有 SPN 的Azure 入口網站中尋找物件識別碼。

如需 EA 角色指派 API 要求的詳細資訊,請參閱將角色指派給 Azure Enterprise 合約服務主體名稱。 本文包含可指派給 SPN 的角色清單 (和角色定義識別碼) 。

注意

  • 請確定您使用正確的 API 版本來授與註冊帳戶擁有者權限。 針對本文及其中所述的 API,請使用 2019-10-01-preview API。
  • 如果您要移轉以使用較新的 API,則使用 2015-07-01 版 所做的先前設定不會自動轉換以搭配較新的 API 使用。

尋找您可以存取的帳戶

當您加入與「帳戶擁有者」相關聯的註冊帳戶之後,Azure 會使用帳戶與註冊的關聯性來判斷由誰支付訂用帳戶的費用。 所有在該帳戶下所建立訂用帳戶的費用,都會由該帳戶所在的 EA 註冊支付。 若要建立訂用帳戶,您必須傳入註冊帳戶與使用者主體的相關值,才能擁有訂用帳戶。

若要執行下列命令,您必須登入「帳戶擁有者」的主目錄 (建立訂用帳戶時預設的所在目錄)。

要求列出您有權存取的所有註冊帳戶:

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

API 回應會列出您有權存取的所有註冊帳戶:

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

計費範圍 id 和 的值都相同。 註冊帳戶的 id 是起始訂用帳戶要求的計費範圍。 請務必記下識別碼,因為您稍後在建立訂用帳戶時會用到此必要參數。

在特定的註冊帳戶下建立訂用帳戶

下列範例會在上一個步驟中選取的註冊帳戶中,建立名為「開發小組訂用帳戶」的訂用帳戶。

使用下列其中一種方法,您將建立訂用帳號別名名稱。 當您建立別名名稱時,建議您:

  • 使用英數位元和連字號
  • 以字母開頭,並以英數位元結尾
  • 請勿使用句點

別名用於使用者定義字串的簡單替代,而不是訂用帳戶 GUID。 換句話說,您可以使用它做為快捷方式。 您可以在 別名 - 建立深入瞭解別名。 在下列範例中,會建立 , sampleAlias 但您可以使用任何您想要的字串。

呼叫 PUT API 以建立訂用帳戶建立要求/別名。

PUT  https://management.azure.com/providers/Microsoft.Subscription/aliases/sampleAlias?api-version=2020-09-01 

在要求本文中,提供您其中一個 enrollmentAccountsid 作為 billingScope

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

Workload 的允許值為 ProductionDevTest

回應

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "b5bab918-e8a9-4c34-a2e2-ebc1b75b9d74",
    "provisioningState": "Accepted"
  }
}

您可以在相同的 URL 上執行 GET,以取得要求的狀態。

要求

GET https://management.azure.com/providers/Microsoft.Subscription/aliases/sampleAlias?api-version=2020-09-01

回應

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "b5bab918-e8a9-4c34-a2e2-ebc1b75b9d74",
    "provisioningState": "Succeeded"
  }
}

此時會傳回進行中狀態,在 provisioningState 下顯示為 Accepted 狀態。

使用 ARM 範本或 Bicep

上一節示範如何使用 PowerShell、CLI 或 REST API 建立訂用帳戶。 如果您需要自動建立訂用帳戶,請考慮使用 Azure Resource Manager 範本 (ARM 範本) 或Bicep 檔案

下列 ARM 範本會建立訂用帳戶。 針對 billingScope ,請提供註冊帳戶識別碼。 訂用帳戶會在根管理群組中建立。 建立訂用帳戶之後,您可以將它移至另一個管理群組。

{
    "$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": "2020-09-01",
            "properties": {
                "workLoad": "Production",
                "displayName": "[parameters('subscriptionAliasName')]",
                "billingScope": "[parameters('billingScope')]"
            }
        }
    ],
    "outputs": {}
}

或者,使用 Bicep 檔案來建立訂用帳戶。

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@2020-09-01' = {
  scope: tenant()
  name: subscriptionAliasName
  properties: {
    workload: 'Production'
    displayName: subscriptionAliasName
    billingScope: billingScope
  }
}

管理群組層級部署範本。 下列範例示範部署 JSON ARM 範本,但您可以改為部署 Bicep 檔案。

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

使用要求本文:

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

若要將訂用帳戶移至新的管理群組,請使用下列 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": {}
}

或者,下列 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}'
}

Azure 企業版訂用帳戶建立 API 的限制

  • 使用此 API 只能建立「Azure 企業版」訂用帳戶。
  • 每個註冊帳戶有 5000 個訂用帳戶的限制。 之後,您只能在 Azure 入口網站中為帳戶建立更多訂用帳戶。 若要透過此 API 建立更多訂用帳戶,請建立另一個註冊帳戶。 已取消、刪除和轉移的訂用帳戶會計入 5000 個限制。
  • 不是「帳戶擁有者」但已透過 Azure RBAC 新增至註冊帳戶的使用者,並無法在 Azure 入口網站中建立訂用帳戶。
  • 您無法選取要作為訂用帳戶建立位置的租用戶。 訂用帳戶一律會建立在「帳戶擁有者」的主租用戶中。 若要將訂用帳戶移至不同的租用戶,請參閱變更訂用帳戶租用戶

後續步驟