將 Azure 訂用帳戶移轉至不同的 Microsoft Entra 目錄

組織可能有數個 Azure 訂用帳戶。 每個訂用帳戶都與特定 Microsoft Entra 相關聯。 若要讓管理變得更容易,您可以將訂用帳戶轉移至不同的 Microsoft Entra 目錄。 當您將訂用帳戶移轉至不同的 Microsoft Entra 目錄時,部分資源並不會移轉至目標目錄。 例如,Azure 角色型訪問控制中的所有 角色指派和自定義角色都會從來源目錄永久 刪除,而且不會傳送至目標目錄。

本文說明您可以遵循的基本步驟,將訂用帳戶轉移至不同的 Microsoft Entra 目錄,並在傳輸之後重新建立一些資源。

如果您想要改為 封鎖 將訂用帳戶轉移至組織中的不同目錄,您可以設定訂用帳戶原則。 如需詳細資訊,請參閱管理 Azure 訂用帳戶原則

注意

對於 Azure 雲端解決方案提供者 (CSP) 訂用帳戶,不支援變更訂用帳戶的 Microsoft Entra 目錄。

概觀

將 Azure 訂用帳戶轉移至不同的 Microsoft Entra 目錄是必須謹慎規劃和執行的複雜程序。 許多 Azure 服務都需要安全性主體 (身分識別),才能正常運作或甚至管理其他 Azure 資源。 本文會嘗試涵蓋大部分依賴安全性主體但並不完整的 Azure 服務。

重要

在某些案例中,轉移訂用帳戶可能需要停機才能完成此程序。 您需要謹慎規劃,以評估您的轉移是否需要停機。

下圖顯示將訂用帳戶轉移至不同目錄時,必須遵循的基本步驟。

  1. 準備轉移

  2. 將 Azure 訂用帳戶轉移至不同目錄

  3. 重新建立目標目錄中的資源,例如角色指派、自訂角色和受控識別

    轉移訂用帳戶圖表

決定是否要將訂用帳戶轉移至不同的目錄

以下是您可能想要轉移訂用帳戶的一些原因:

  • 由於公司合併或收購,您想要在主要 Microsoft Entra 目錄中管理收購的訂用帳戶。
  • 組織中有人已建立訂用帳戶,而您想要將其管理工作合併至特定的 Microsoft Entra 目錄。
  • 您有相依於特定訂用帳戶識別碼或 URL 的應用程式,而要修改應用程式設定或程式碼並不容易。
  • 貴公司將一部分業務分割為不同公司,而您需要將部分資源移至不同的 Microsoft Entra 目錄。
  • 為了形成安全性隔離,您想要在不同的 Microsoft Entra 目錄中管理一些資源。

替代方法

轉移訂用帳戶需要停機才能完成此程式。 視您的案例而定,您可以考慮下列替代方法:

  • 重新建立資源,並將數據複製到目標目錄和訂用帳戶。
  • 採用多目錄架構,並將訂用帳戶保留在來源目錄中。 使用 Azure Lighthouse 委派資源,讓目標目錄中的使用者可以存取來源目錄中的訂用帳戶。 如需詳細資訊,請參閱 企業案例中的 Azure Lighthouse。

了解移轉訂用帳戶的影響

數個 Azure 資源相依於訂用帳戶或目錄。 根據您的情況,下表列出轉移訂用帳戶的已知影響。 藉由執行本文中的步驟,您可以重新建立訂用帳戶轉移之前存在的一些資源。

重要

本節列出相依於您訂用帳戶的已知 Azure 服務或資源。 由於 Azure 中的資源類型會不斷演進,因此此處可能未列出其他相依性,因而對您的環境造成重大變更。

服務或資源 影響 追 討 您會受到影響嗎? 您可以採取的方法
角色指派 Yes Yes 列出角色指派 所有角色指派都會永久刪除。 您必須將使用者、群組和服務主體對應至目標目錄中的對應物件。 您必須重新建立角色指派。
自訂角色 Yes Yes 列出自定義角色 所有自定義角色都會永久刪除。 您必須重新建立自定義角色和任何角色指派。
系統指派的受控識別 Yes Yes 列出受控識別 您必須停用並重新啟用受控識別。 您必須重新建立角色指派。
使用者指派的受控識別 Yes Yes 列出受控識別 您必須刪除、重新建立及將受控識別附加至適當的資源。 您必須重新建立角色指派。
Azure Key Vault Yes Yes 列出 金鑰保存庫 存取原則 您必須更新與金鑰保存庫相關聯的租使用者識別碼。 您必須移除並新增存取原則。
已啟用 Microsoft Entra 驗證整合的 Azure SQL 資料庫 No 使用 Microsoft Entra 驗證檢查 Azure SQL 資料庫 您無法將已啟用 Microsoft Entra 驗證的 Azure SQL 資料庫傳輸至不同的目錄。 如需詳細資訊,請參閱 使用 Microsoft Entra 驗證
已啟用 Microsoft Entra 驗證整合的適用於 MySQL 的 Azure 資料庫 No 您無法將已啟用 Microsoft Entra 驗證的適用於 MySQL 的 Azure 資料庫(單一和彈性伺服器)傳輸到不同的目錄。
Azure 儲存體 和 Azure Data Lake 儲存體 Gen2 Yes Yes 您必須重新建立任何 ACL。
Azure Data Lake Storage Gen1 Yes Yes 您必須重新建立任何 ACL。
Azure 檔案 Yes Yes 您必須重新建立任何 ACL。
Azure 檔案同步 Yes Yes 記憶體同步服務和/或記憶體帳戶可以移至不同的目錄。 如需詳細資訊,請參閱關於 Azure 檔案儲存體的常見問題 (FAQ)
Azure 受控磁碟 Yes Yes 如果您使用磁碟加密集來使用客戶管理的金鑰來加密 受控磁碟,您必須停用並重新啟用與磁碟加密集相關聯的系統指派身分識別。 您必須重新建立角色指派,也就是再次將所需的許可權授與 金鑰保存庫 中的磁碟加密集。
Azure Kubernetes Service No 您無法將 AKS 叢集及其相關聯的資源傳輸到不同的目錄。 如需詳細資訊,請參閱 關於 Azure Kubernetes Service 的常見問題 (AKS)
Azure 原則 No 所有 Azure 原則 物件,包括自定義定義、指派、豁免和合規性數據。 您必須 匯出、匯入和重新指派定義。 然後,建立新的原則指派和任何必要的 原則豁免
Microsoft Entra 網域服務 No 您無法將 Microsoft Entra Domain Services 受控網域傳輸到不同的目錄。 如需詳細資訊,請參閱 Microsoft Entra Domain Services 的常見問題 (常見問題)
應用程式註冊 Yes Yes
Microsoft 開發箱 No 您無法將開發方塊及其相關聯的資源傳輸至不同的目錄。 訂用帳戶移至另一個租用戶之後,您將無法在開發方塊上執行任何動作
Azure 部署環境 No 您無法將環境及其相關聯的資源傳輸至不同的目錄。 訂用帳戶移至另一個租用戶之後,您將無法在環境中執行任何動作
Azure Service Fabric No 您必須重新建立叢集。 如需詳細資訊,請參閱 SF 叢集常見問題SF 受控叢集常見問題
Azure 服務匯流排 Yes Yes 您必須刪除、重新建立及將受控識別附加至適當的資源。 您必須重新建立角色指派。
Azure Synapse Analytics 工作區 Yes Yes 您必須更新與 Synapse Analytics 工作區相關聯的租用戶識別碼。 如果工作區與 Git 存放庫相關聯,您必須更新 工作區的 Git 組態。 如需詳細資訊,請參閱 將訂用帳戶轉移至不同的 Microsoft Entra 目錄(租使用者)之後復原 Synapse Analytics 工作區。
Azure Databricks No 目前,Azure Databricks 不支援將工作區移至新的租使用者。 如需詳細資訊,請參閱 管理您的 Azure Databricks 帳戶

警告

如果您針對記憶體帳戶或 SQL 資料庫等資源使用待用加密,而該資源相依於傳輸的密鑰保存庫,可能會導致無法復原的情況。 如果您有這種情況,您應該採取步驟使用不同的密鑰保存庫,或暫時停用客戶管理的金鑰,以避免這種情況無法復原。

若要取得傳輸訂用帳戶時受影響的一些 Azure 資源清單,您也可以在 Azure Resource Graph執行查詢。 如需範例查詢,請參閱 在傳輸 Azure 訂用帳戶時列出受影響的資源。

必要條件

若要完成這些步驟,您需要:

  • Azure Cloud Shell 中的 BashAzure CLI
  • 您想要在來源目錄中轉移之訂用帳戶的計費帳戶擁有者
  • 變更目錄的使用者的來源目錄和目標目錄中的使用者帳戶

步驟 1:準備傳輸

登入來源目錄

  1. 以系統管理員身分登入 Azure。

  2. 使用 az account list 命令取得訂用帳戶的清單。

    az account list --output table
    
  3. 使用 az account set 來設定您想要轉移的作用中訂用帳戶。

    az account set --subscription "Marketing"
    

安裝 Azure Resource Graph 擴充功能

Azure Resource Graph 的 Azure CLI 延伸模組 resource-graph 可讓您使用 az graph 命令來查詢 Azure Resource Manager 所管理的資源。 您將在後續步驟中使用此命令。

  1. 使用 az extension list 來查看您是否 已安裝 resource-graph 延伸模組。

    az extension list
    
  2. 如果您使用預覽版本或舊版 的 resource-graph 延伸模組,請使用 az extension update 來更新 延伸模組。

    az extension update --name resource-graph
    
  3. 如果未安裝 resource-graph 延伸模組,請使用 az extension add 來安裝延伸模組。

    az extension add --name resource-graph
    

儲存所有角色指派

  1. 使用 az role assignment list 列出所有角色指派(包括繼承的角色指派)。

    若要更輕鬆地檢閱清單,您可以將輸出匯出為 JSON、TSV 或數據表。 如需詳細資訊,請參閱 使用 Azure RBAC 和 Azure CLI 列出角色指派。

    az role assignment list --all --include-inherited --output json > roleassignments.json
    az role assignment list --all --include-inherited --output tsv > roleassignments.tsv
    az role assignment list --all --include-inherited --output table > roleassignments.txt
    
  2. 儲存角色指派的清單。

    當您轉移訂用帳戶時,所有角色指派都會 永久 刪除,因此請務必儲存複本。

  3. 檢閱角色指派的清單。 目標目錄中可能不需要角色指派。

儲存自定義角色

  1. 使用 az role definition list 來列出您的自定義角色。 如需詳細資訊,請參閱 使用 Azure CLI 建立或更新 Azure 自定義角色。

    az role definition list --custom-role-only true --output json --query '[].{roleName:roleName, roleType:roleType}'
    
  2. 將目標目錄中所需的每個自定義角色儲存為個別的 JSON 檔案。

    az role definition list --name <custom_role_name> > customrolename.json
    
  3. 製作自定義角色檔案的複本。

  4. 修改每個復本以使用下列格式。

    您稍後會使用這些檔案,在目標目錄中重新建立自定義角色。

    {
      "Name": "",
      "Description": "",
      "Actions": [],
      "NotActions": [],
      "DataActions": [],
      "NotDataActions": [],
      "AssignableScopes": []
    }
    

判斷使用者、群組和服務主體對應

  1. 根據您的角色指派清單,決定您要對應至目標目錄中的使用者、群組和服務主體。

    您可以查看 principalType 每個角色指派中的 屬性來識別主體類型。

  2. 如有必要,請在目標目錄中建立您需要的任何使用者、群組或服務主體。

列出受控識別的角色指派

當訂用帳戶轉移至另一個目錄時,受控識別不會更新。 因此,系統指派或使用者指派的任何現有受控身分識別都會中斷。 傳輸之後,您可以重新啟用任何系統指派的受控識別。 針對使用者指派的受控識別,您必須在目標目錄中重新建立並附加它們。

  1. 檢閱 支援受控識別 的 Azure 服務清單,以記下您可能使用受控識別的位置。

  2. 使用 az ad sp list 列出系統指派和使用者指派的受控識別。

    az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"
    
  3. 在受控識別清單中,判斷哪些是系統指派,哪些是使用者指派。 您可以使用下列準則來判斷類型。

    準則 受控識別類型
    alternativeNames 屬性包含 isExplicit=False 系統指派
    alternativeNames 屬性不包含 isExplicit 系統指派
    alternativeNames 屬性包含 isExplicit=True 使用者指派

    您也可以使用 az identity list 只列出使用者指派的受控識別。 如需詳細資訊,請參閱 使用 Azure CLI 建立、列出或刪除使用者指派的受控識別。

    az identity list
    
  4. 取得受控識別的值清單 objectId

  5. 搜尋您的角色指派清單,以查看受控識別是否有任何角色指派。

列出金鑰保存庫

當您建立金鑰保存庫時,會自動繫結至建立金鑰保存庫之訂用帳戶的預設 Microsoft Entra 租使用者識別碼。 所有存取原則專案也會系結至此租用戶標識碼。 如需詳細資訊,請參閱將 Azure 金鑰保存庫 移至另一個訂用帳戶

警告

如果您針對記憶體帳戶或 SQL 資料庫等資源使用待用加密,而該資源相依於傳輸的密鑰保存庫,可能會導致無法復原的情況。 如果您有這種情況,您應該採取步驟使用不同的密鑰保存庫,或暫時停用客戶管理的金鑰,以避免這種情況無法復原。

使用 Microsoft Entra 驗證列出 Azure SQL 資料庫

  • 使用 az sql server ad-admin listaz graph 延伸模組來查看您是否使用已啟用 Microsoft Entra 驗證整合的 Azure SQL 資料庫。 如需詳細資訊,請參閱 使用 SQL 設定和管理 Microsoft Entra 驗證。

    az sql server ad-admin list --ids $(az graph query -q "resources | where type == 'microsoft.sql/servers' | project id" --query data[*].[id] -o tsv)
    

列出 ACL

  1. 如果您使用 Azure Data Lake 儲存體 Gen1,請使用 Azure 入口網站 或 PowerShell 列出套用至任何檔案的 ACL。

  2. 如果您使用 Azure Data Lake 儲存體 Gen2,請使用 Azure 入口網站 或 PowerShell 列出套用至任何檔案的 ACL。

  3. 如果您使用 Azure 檔案儲存體,請列出套用至任何檔案的 ACL。

列出其他已知資源

  1. 使用 az account show 取得您的訂用帳戶標識碼(在 中 bash)。

    subscriptionId=$(az account show --output tsv --query id)
    
  2. 使用 az graph 延伸模組列出具有已知 Microsoft Entra 目錄相依性的其他 Azure 資源(在 中bash)。

    az graph query -q 'resources 
        | where type != "microsoft.azureactivedirectory/b2cdirectories" 
        | where  identity <> "" or properties.tenantId <> "" or properties.encryptionSettingsCollection.enabled == true 
        | project name, type, kind, identity, tenantId, properties.tenantId' --subscriptions $subscriptionId --output yaml
    

步驟 2:轉移訂用帳戶

在此步驟中,您會將訂用帳戶從來源目錄轉移至目標目錄。 視您是否也想要轉移帳單擁有權而定,這些步驟會有所不同。

警告

當您轉移訂用帳戶時,來源目錄中的所有角色指派都會 永久 刪除,且無法還原。 轉移訂用帳戶之後,就無法返回。 執行此步驟之前,請務必先完成上述步驟。

  1. 決定您是否也要將帳單擁有權移轉給另一個帳戶。

  2. 將訂用帳戶移轉至不同目錄。

  3. 完成轉移訂用帳戶之後,請返回本文,以在目標目錄中重新建立資源。

步驟 3:重新建立資源

登入目標目錄

  1. 在目標目錄中,以接受傳輸要求的使用者身分登入。

    只有新帳戶中接受轉移要求的使用者才能存取管理資源。

  2. 使用 az account list 命令取得訂用帳戶的清單。

    az account list --output table
    
  3. 使用 az account set 來設定您想要使用的作用中訂用帳戶。

    az account set --subscription "Contoso"
    

建立自訂角色

  • 使用 az role definition create ,從您稍早建立的檔案建立每個自定義角色。 如需詳細資訊,請參閱 使用 Azure CLI 建立或更新 Azure 自定義角色。

    az role definition create --role-definition <role_definition>
    

指派角色

  • 使用 az role assignment create 將角色指派給使用者、群組和服務主體。 如需詳細資訊,請參閱使用 Azure CLI 指派 Azure 角色

    az role assignment create --role <role_name_or_id> --assignee <assignee> --scope "/subscriptions/<subscriptionId>/resourceGroups/<resource_group>"
    

更新系統指派的受控識別

  1. 停用並重新啟用系統指派的受控識別。

    Azure 服務 其他相關資訊
    虛擬機器 使用 Azure CLI 在 Azure VM 上設定 Azure 資源的受控識別
    虛擬機器擴展集 使用 Azure CLI 在虛擬機擴展集上設定 Azure 資源的受控識別
    其他服務 支援適用於 Azure 資源的受控識別服務 (機器翻譯)
  2. 使用 az role assignment create 將角色指派給系統指派的受控識別。 如需詳細資訊,請參閱 使用 Azure CLI 將受控識別存取權指派給資源。

    az role assignment create --assignee <objectid> --role '<role_name_or_id>' --scope "/subscriptions/<subscriptionId>/resourceGroups/<resource_group>"
    

更新使用者指派的受控識別

  1. 刪除、重新建立及附加使用者指派的受控識別。

    Azure 服務 其他相關資訊
    虛擬機器 使用 Azure CLI 在 Azure VM 上設定 Azure 資源的受控識別
    虛擬機器擴展集 使用 Azure CLI 在虛擬機擴展集上設定 Azure 資源的受控識別
    其他服務 支援適用於 Azure 資源的受控識別服務 (機器翻譯)
    使用 Azure CLI 建立、列出或刪除使用者指派的受控識別
  2. 使用 az role assignment create 將角色指派給使用者指派的受控識別。 如需詳細資訊,請參閱 使用 Azure CLI 將受控識別存取權指派給資源。

    az role assignment create --assignee <objectid> --role '<role_name_or_id>' --scope "/subscriptions/<subscriptionId>/resourceGroups/<resource_group>"
    

更新金鑰保存庫

本節說明更新金鑰保存庫的基本步驟。 如需詳細資訊,請參閱將 Azure 金鑰保存庫 移至另一個訂用帳戶

  1. 將訂用帳戶中所有現有金鑰保存庫相關聯的租用戶標識碼更新為目標目錄。

  2. 移除所有現有的存取原則項目。

  3. 新增與目標目錄相關聯的存取原則專案。

更新 ACL

  1. 如果您使用 Azure Data Lake 儲存體 Gen1,請指派適當的 ACL。 如需詳細資訊,請參閱在 Azure Data Lake Storage Gen1 中保護資料

  2. 如果您使用 Azure Data Lake 儲存體 Gen2,請指派適當的 ACL。 如需詳細資訊,請參閱 Azure Data Lake Storage Gen2 中的存取控制

  3. 如果您使用 Azure 檔案儲存體,請指派適當的 ACL。

檢閱其他安全性方法

即使在傳輸期間移除角色指派,原始擁有者帳戶中的使用者仍可能會透過其他安全性方法繼續存取訂用帳戶,包括:

如果您的意圖是要從來源目錄中的使用者移除存取權,讓他們在目標目錄中沒有存取權,您應該考慮輪替任何認證。 在更新認證之前,使用者會在傳輸之後繼續具有存取權。

  1. 輪替記憶體帳戶存取金鑰。 如需詳細資訊,請參閱管理儲存體帳戶存取金鑰

  2. 如果您將存取金鑰用於其他服務,例如 Azure SQL 資料庫 或 Azure 服務匯流排 傳訊,請輪替存取密鑰。

  3. 對於使用秘密的資源,請開啟資源的設定並更新秘密。

  4. 對於使用憑證的資源,請更新憑證。

下一步