以程式設計方式跨 Microsoft Entra 租用戶建立 MCA 訂用帳戶

本文可協助您以程式設計方式跨 Microsoft Entra 租用戶建立 Microsoft 客戶合約 (MCA) 訂用帳戶。 在某些情況下,您可能需要跨 Microsoft Entra 租用戶建立 MCA 訂用帳戶,但將其繫結至單一計費帳戶。 這類情況的範例包括 SaaS 提供者,想要將託管的客戶服務與具有嚴格法規合規性需求的內部 IT 服務或內部環境隔離,例如付款卡產業 (PCI)。

跨租用戶建立 MCA 訂用帳戶的程序實際上是兩階段程序。 為此,必須在來源和目的地 Microsoft Entra 租用戶中執行動作。 本文使用下列術語:

  • 來源 Microsoft Entra ID (source.onmicrosoft.com)。 其代表 MCA 計費帳戶所在的來源租用戶。
  • 目的地雲端 Microsoft Entra ID (destination.onmicrosoft.com)。 它代表建立新 MCA 訂用帳戶的目的地租用戶。

您無法以程式設計方式建立支援計劃。 您可以在 Azure 入口網站中購買新的支援計劃或升級計劃。 瀏覽至 [說明 + 支援],然後在頁面頂端選取 [選擇正確的支援計劃]

必要條件

您必須已經建立下列租用戶:

  • 具有作用中 Microsoft 客戶合約計費帳戶的來源 Microsoft Entra 租用戶。 如果您沒有作用中的 MCA,可以建立一個。 如需詳細資訊,請參閱 Azure - 註冊
  • 與 MCA 所屬租用戶不同的目的地 Microsoft Entra 租用戶。 若要建立新的 Microsoft Entra 租用戶,請參閱 Microsoft Entra 租用戶設定

應用程式設定

使用下列各節中的資訊,在來源和目的地租用戶中設定所需的應用程式。

在來源租用戶中註冊應用程式

若要以程式設計方式建立 MCA 訂用帳戶,必須註冊 Microsoft Entra 應用程式,並授與適當的 Azure RBAC 權限。 在此步驟中,請確定您已使用有權註冊 Microsoft Entra 應用程式的帳戶登入來源租用戶 (source.onmicrosoft.com)。

請依照快速入門:使用 Microsoft 身分識別平台來註冊應用程式中的步驟來操作。

對於此程序的目的,您只需要遵循註冊應用程式新增認證章節中的說明。

儲存下列資訊以測試及設定您的環境:

  • 目錄 (租用戶) 識別碼
  • 應用程式 (用戶端) 識別碼
  • 物件識別碼
  • 產生的應用程式祕密值。 只有在建立時才會顯示此值。

為來源租用戶中的應用程式建立計費角色指派

請檢閱了解 Azure 中 Microsoft 客戶合約管理角色中的資訊,以判斷應用程式的適當範圍和計費角色

在您決定範圍和角色之後,請運用管理 Azure 入口網站中計費角色的資訊,為應用程式建立角色指派。 使用您在上一節中註冊應用程式時所使用的名稱來搜尋應用程式。

在目的地租用戶中註冊應用程式

若要接受目的地租用戶 (destination.onmicrosoft.com) 的 MCA 訂用帳戶,必須註冊 Microsoft Entra 應用程式,並將其新增至計費管理員 Microsoft Entra 角色。 在此步驟中,請確定您已使用有權註冊 Microsoft Entra 應用程式的帳戶登入目的地租用戶 (destination.onmicrosoft.com)。 它也必須具有計費管理員角色權限。

請遵循上述的相同步驟,在來源租用戶中註冊應用程式。 儲存下列資訊以測試及設定您的環境:

  • 目錄 (租用戶) 識別碼
  • 應用程式 (用戶端) 識別碼
  • 物件識別碼
  • 產生的應用程式祕密值。 只有在建立時才會顯示此值。

將目的地應用程式新增至計費管理員 Microsoft Entra 角色

運用將管理員和非管理員角色指派給具有 Microsoft Entra ID 的使用者的資訊,將上一節中建立的目的地應用程式新增至目的地租用戶中的計費管理員 Microsoft Entra 角色。

以程式設計方式建立訂用帳戶

設定應用程式和權限之後,請使用下列資訊,以程式設計方式建立訂用帳戶。

取得目的地應用程式服務主體的識別碼

當您在來源租用戶中建立 MCA 訂用帳戶時,必須將目的地租用戶中應用程式的服務主體或 SPN 指定為擁有者。 使用下列其中一種方法來取得識別碼。 在這兩種方法中,要用於空白 GUID 的值是先前所建立目的地租用戶的應用程式 (用戶端) 識別碼。

Azure CLI

登入 Azure CLI,並使用 az ad sp show 命令:

az ad sp show --id aaaaaaaa-bbbb-cccc-1111-222222222222 --query 'id'

Azure PowerShell

登入 Azure PowerShell,並使用 Get-AzADServicePrincipal Cmdlet:

Get-AzADServicePrincipal -ApplicationId aaaaaaaa-bbbb-cccc-1111-222222222222 | Select-Object -Property Id

儲存命令傳回的 Id 值。

建立訂用帳戶

使用下列資訊,在來源租用戶中建立訂用帳戶。

取得來源應用程式存取權杖

{{placeholders}} 取代為實際的租用戶識別碼、應用程式 (用戶端) 識別碼,以及您先前建立來源租用戶應用程式時所儲存的應用程式祕密值。

叫用要求,並儲存回應的 access_token 值,以供下一個步驟使用。

POST https://login.microsoftonline.com/{{tenant_id}}/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id={{client_id}}&client_secret={{app_secret}}&resource=https%3A%2F%2Fmanagement.azure.com%2F

取得計費帳戶、設定檔和發票區段識別碼

使用尋找您有權存取的計費帳戶尋找帳單設定檔和發票區段的資訊,建立訂用帳戶區段,取得計費帳戶、設定檔和發票區段識別碼。

注意

我們建議將 REST 方法與先前取得的存取權杖搭配使用,以確認應用程式計費角色指派已成功在 [應用程式設定] 區段中建立。

建立訂用帳戶別名

使用計費帳戶、設定檔和發票區段識別碼時,您有建立訂用帳戶所需的所有資訊:

  • {{guid}}:可以是有效的 GUID。
  • {{access_token}}:先前取得的來源租用戶應用程式存取權杖。
  • {{billing_account}}:先前取得的計費帳戶識別碼。
  • {{billing_profile}}:先前取得的計費設定檔識別碼。
  • {{invoice_section}}:先前取得的發票區段識別碼。
  • {{destination_tenant_id}}:您先前建立目的地租用戶應用程式時,記下的目的地租用戶識別碼。
  • {{destination_service_principal_id}}:您先前從 [取得目的地應用程式服務主體的識別碼] 區段中取得的目的地租用戶服務主體識別碼。

傳送要求,並記下回應中 Location 標頭的值。

PUT https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01
Authorization: Bearer {{access_token}}
Content-Type: application/json

{
  "properties": {
    "displayName": "{{subscription_name}}",
    "workload": "Production",
    "billingScope": "/billingAccounts/{{billing_account}}/billingProfiles/{{billing_profile}}/invoiceSections/{{invoice_section}}",
    "subscriptionId": null,
    "additionalProperties": {
      "managementGroupId": null,
      "subscriptionTenantId": "{{destination_tenant_id}}",
      "subscriptionOwnerId": "{{destination_service_principal_id}}"
    }
  }
}

接受訂用帳戶所有權

完成此程序的最後一個階段是接受訂用帳戶擁有權。

取得目的地應用程式存取權杖

{{placeholders}} 取代為實際的租用戶識別碼、應用程式 (用戶端) 識別碼,以及您先前建立目的地租用戶應用程式時所儲存的祕密值。

叫用要求,並儲存回應的 access_token 值,以供下一個步驟使用。

POST https://login.microsoftonline.com/{{tenant_id}}/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id={{client_id}}&client_secret={{app_secret}}&resource=https%3A%2F%2Fmanagement.azure.com%2F

接受擁有權

使用下列資訊,以接受目的地租用戶中訂用帳戶的擁有權:

  • {{subscription_id}}:[建立訂用帳戶別名] 區段中所建立訂用帳戶的識別碼。 其包含在您記下的位置標頭中。
  • {{access_token}}:上一個步驟中建立的存取權杖。
  • {{subscription_display_name}}:在您的 Azure 環境中訂用帳戶的顯示名稱。
POST https://management.azure.com/providers/Microsoft.Subscription/subscriptions/{{subscription_id}}/acceptOwnership?api-version=2021-10-01
Authorization: Bearer {{access_token}}
Content-Type: application/json

{
  "properties": {
    "displayName": "{{subscription_display_name}}",
    "managementGroupId": null
  }
}

下一步