您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

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

备注

本文已经过更新,以便使用 Azure Az PowerShell 模块。 若要与 Azure 交互,建议使用的 PowerShell 模块是 Az PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

概述

重要

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

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

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

有关 Azure Key Vault 和 Azure Active Directory 的详细信息,请参阅

限制

重要

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

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

先决条件

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

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

  1. 通过 https://portal.azure.com 登录到 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                                                          #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 资源的托管标识,则还需要将其更新为新的 Azure Active Directory 租户。 有关托管标识的详细信息,请参阅托管标识概述

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

后续步骤