你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

对机密 VM 使用安全密钥发放的操作指南

以下文章介绍当应用程序在基于 AMD SEV-SNP 的机密虚拟机上运行时,如何从 Azure Key Vault 执行安全密钥发放。 若要详细了解安全密钥发放和 Azure 机密计算,请转到此处

SKR 要求执行 SKR 的应用程序应使用 Microsoft Azure 证明 (MAA) 通过远程来宾证明流,如此处所述。

整体流和体系结构

若要允许 Azure Key Vault 将密钥发放到经过证明的机密虚拟机,需要执行一些步骤:

  1. 将托管标识分配给机密虚拟机。 支持系统分配的托管标识或用户分配的托管标识。
  2. 设置 Key Vault 访问策略以授予托管标识“发放”密钥权限。 策略允许机密虚拟机访问 Key Vault 并执行发放操作。 如果使用 Key Vault 托管 HSM,请分配“托管 HSM 加密服务发放用户”角色成员身份。
  3. 创建标记为可导出且具有关联发放策略的 Key Vault 密钥。 密钥发放策略会将密钥关联到经过证明的机密虚拟机,并且密钥只能用于所需目的。
  4. 若要执行发放,请从机密虚拟机将 HTTP 请求发送到 Key Vault。 HTTP 请求必须在请求正文中包含经机密 VM 证明的平台报告。 经过证明的平台报告将用于验证已启用受信任执行环境的平台(如机密 VM)状态的可信度。 Microsoft Azure 证明服务可用于创建经证明的平台报告并将其包含在请求中。

应该执行的上述操作的示意图。

部署 Azure Key Vault

为 AKV Premium 或 AKV mHSM 设置可导出密钥。 按照此处的详细说明设置 SKR 可导出密钥

Bicep

@description('Required. Specifies the Azure location where the key vault should be created.')
param location string = resourceGroup().location

@description('Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet.')
param tenantId string = subscription().tenantId

resource keyVault 'Microsoft.KeyVault/vaults@2021-11-01-preview' = {
  name: 'mykeyvault'
  location: location
  properties: {
    tenantId: tenantId
    sku: {
      name: 'premium'
      family: 'A'
    }
  }
}

ARM 模板

    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2021-11-01-preview",
      "name": "mykeyvault",
      "location": "[parameters('location')]",
      "properties": {
        "tenantId": "[parameters('tenantId')]",
        "sku": {
          "name": "premium",
          "family": "A"
        }
      }
    }

部署机密虚拟机

按照快速入门说明操作,了解如何“使用 ARM 模板部署机密 VM

启用系统分配的托管标识

Azure 资源的托管标识在 Microsoft Entra ID 中为 Azure 服务提供了一个自动托管标识。 可以使用此标识向支持 Microsoft Entra 身份验证的任何服务进行身份验证,这样就无需在代码中插入凭据了。

若要在 CVM 上启用系统分配的托管标识,你的帐户需要虚拟机参与者角色分配。 不需要其他 Microsoft Entra 目录角色分配。

  1. 无论是在本地登录到 Azure 还是通过 Azure 门户登录,请使用与包含 VM 的 Azure 订阅关联的帐户。

  2. 若要启用系统分配的托管标识,请将模板加载到编辑器中,找到所关注的 Microsoft.Compute/virtualMachines 资源,并在与 "identity" 属性相同的级别添加 name: vmName 属性。 使用以下语法:

       identity:{
         type: 'SystemAssigned'
       }
    
  3. resource 详细信息添加到模板。

     resource confidentialVm 'Microsoft.Compute/virtualMachines@2021-11-01' = {
       name: vmName
       location: location
       identity:{
         type: 'SystemAssigned'
       }
       // other resource provider properties
     }