将 Azure Key Vault 移动到另一个订阅

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

概述

重要

将密钥保管库移动到另一个订阅会导致环境发生中断性变更。 在决定将密钥保管库移动到新订阅之前,请确保你了解此变更的影响,并仔细遵循本文中的指导。 如果使用的是托管服务标识 (MSI),请阅读此文档末尾的移动后说明。

Azure Key Vault 会自动绑定到创建它的订阅的默认 Microsoft Entra ID 租户 ID。 可以按照本指南查找与订阅关联的租户 ID。 所有访问策略条目和角色分配也都绑定到此租户 ID。 如果将 Azure 订阅从租户 A 移到租户 B,租户 B 中的服务主体(用户和应用程序)将无法访问现有的密钥保管库。若要解决此问题,需执行以下操作:

注意

如果 Key Vault 是通过 Azure Lighthouse 创建的,则它与管理租户 ID 相关联。 Azure Lighthouse 仅受保管库访问策略权限模型支持。 有关 Azure Lighthouse 中租户的详细信息,请参阅 Azure Lighthouse 中的租户、用户和角色

  • 将与订阅中所有现有密钥保管库关联的租户 ID 更改到租户 B。
  • 删除所有现有的访问策略条目。
  • 添加与租户 B 关联的新访问策略条目。

有关 Azure Key Vault 和 Microsoft Entra ID 的详细信息,请参阅

限制

重要

无法移动用于磁盘加密的密钥保管库 如果为 VM 使用带磁盘加密的密钥保管库,则在启用磁盘加密时,无法将密钥保管库移动到其他资源组或订阅。 在将密钥保管库移动到新的资源组或订阅之前,必须禁用磁盘加密。

某些服务主体(用户和应用程序)绑定到特定的租户。 如果将密钥保管库移动到其他租户中的订阅,则可能无法还原对特定服务主体的访问权限。 请进行检查,确保在要将密钥保管库移动到其中的租户中存在所有基本的服务主体。

先决条件

可以使用 Azure 门户PowerShellAzure CLIREST API 来检查现有角色。

将密钥保管库移动到新的订阅

  1. 登录 Azure 门户
  2. 导航到密钥保管库
  3. 选择“概述”选项卡
  4. 选择“移动”按钮
  5. 从下拉选项中选择“移动到另一个订阅”
  6. 选择要将密钥保管库移动到其中的资源组
  7. 确认有关移动资源的警告
  8. 选择“确定”

订阅在新租户中时的其他步骤

如果已将包含密钥保管库的订阅移到新租户,则需要手动更新租户 ID 并删除旧的访问策略和角色分配。 下面是通过 PowerShell 和 Azure CLI 执行这些步骤的教程。 如果使用的是 PowerShell,可能需要运行 Clear-AzContext 命令,这样就能查看当前所选范围外的资源。

更新密钥保管库中的租户 ID

Select-AzSubscription -SubscriptionId <your-subscriptionId>                # Select your Azure Subscription
$vaultResourceId = (Get-AzKeyVault -VaultName myvault).ResourceId          # Get your key vault's Resource ID 
$vault = Get-AzResource -ResourceId $vaultResourceId -ExpandProperties     # Get the properties for your key vault
$vault.Properties.TenantId = (Get-AzContext).Tenant.TenantId               # Change the Tenant that your key vault resides in
$vault.Properties.AccessPolicies = @()                                     # Access policies can be updated with real
                                                                           # applications/users/rights so that it does not need to be                             # done after this whole activity. Here we are not setting 
                                                                           # any access policies. 
Set-AzResource -ResourceId $vaultResourceId -Properties $vault.Properties  # Modifies the key vault's properties.

Clear-AzContext                                                            #Clear the context from PowerShell
Connect-AzAccount -Environment AzureChinaCloud                                                          #Log in again to confirm you have the correct tenant id
az account set -s <your-subscriptionId>                                    # Select your Azure Subscription
$tenantId=$(az account show --query tenantId)                               # Get your tenantId
az keyvault update -n myvault --remove Properties.accessPolicies           # Remove the access policies
az keyvault update -n myvault --set Properties.tenantId=$tenantId          # Update the key vault tenantId

更新访问策略和角色分配

注意

如果 Key Vault 使用的是 Azure RBAC 权限模型。 还需要删除密钥保管库角色分配。 可以使用 Azure 门户Azure CLIPowerShell 来删除角色分配。

现在,保管库已与正确的租户 ID 关联,并且旧的访问策略条目或角色分配已删除,请设置新的访问策略条目或角色分配。

有关分配策略,请参阅:

有关添加角色分配,请参阅:

更新托管标识

如果要传输整个订阅并使用 Azure 资源的托管标识,则还需要将其更新为新的 Microsoft Entra 租户。 有关托管标识的详细信息,请参阅托管标识概述

如果使用的是托管标识,则还必须更新标识,因为旧标识将不再位于相应的 Microsoft Entra 租户中。 参阅下述有助于解决此问题的文档。

后续步骤