保护对托管 HSM 的访问

本教程提供了 Azure Key Vault 托管 HSM 访问控制的实际实现示例。 你将学习如何通过实际场景使用 Azure RBAC 和托管 HSM 本地 RBAC 实现职责分离。

重要

在继续学习本教程之前,请确保了解托管 HSM 访问控制模型,包括控制平面和数据平面访问之间的差异。 有关此概念基础,请参阅托管 HSM 访问控制

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,可注册一个试用版订阅
  • Azure CLI 版本 2.25.0 或更高版本。 运行 az --version 即可查找版本。 如需进行安装或升级,请参阅安装 Azure CLI
  • 订阅中的托管 HSM。 请参阅快速入门:使用 Azure CLI 预配和激活托管 HSM,了解如何预配和激活托管 HSM。

登录到 Azure

若要使用 CLI 登录到 Azure,请输入:

az login

有关通过 CLI 进行身份验证选项的详细信息,请参阅 使用 Azure CLI 登录

了解示例方案

本例中,我们正在开发一个应用程序,该应用程序使用 RSA 2048 位密钥进行签名操作。 我们的应用程序在具有托管标识的 Azure 虚拟机 (VM) 中运行。 用于签名的 RSA 密钥存储在托管 HSM 中。

定义角色和职责

确定管理、部署和审核应用程序的角色:

  • 安全团队:CSO(首席安全官)办公室中的 IT 人员或类似参与者。 安全团队负责妥善保管密钥。 密钥包括用于签名的 RSA 或 EC 密钥,以及用于数据加密的 RSA 或 oct 密钥。
  • 开发人员和操作人员:开发应用程序并在 Azure 中进行部署的人员。 此团队的成员不属于安全人员。 他们不应有权访问 RSA 密钥等敏感数据。 仅他们部署的应用程序才应有权访问此敏感数据。
  • 审核员:不是开发团队或常规 IT 团队成员的贡献者。 他们评审证书、密钥和机密的使用及维护,确保符合安全标准。

应用程序范围之外还有另一个角色:订阅(或资源组)管理员。 订阅管理员为安全团队设置初始访问权限。 他们通过使用具有应用程序所需资源的资源组来授予安全团队访问权限。

定义每个角色所需的操作

为每个角色授权以下操作:

安全团队

  • 创建托管 HSM
  • 下载托管型 HSM 安全域以进行灾难恢复
  • 启用日志
  • 生成或导入密钥
  • 创建用于灾难恢复的托管 HSM 备份
  • 设置托管 HSM 本地 RBAC,向用户和应用程序授予执行特定操作的权限
  • 定期更新密钥

开发人员和操作人员

  • 从安全团队获取用于签名的 RSA 密钥的参考(密钥 URI)
  • 开发和部署以编程方式访问密钥的应用程序

审核人员

  • 查看密钥到期日期,确保密钥保持最新
  • 监视角色分配,确保只有经过授权的用户和应用程序才能访问密钥
  • 查看托管 HSM 日志,确认正确使用符合数据安全标准的密钥

分配适当的角色

下表总结了为访问托管 HSM 而对团队和资源进行的角色分配。

角色 控制平面角色 数据平面角色
安全团队 托管 HSM 参与者 托管 HSM 管理员
开发人员和操作员 没有 没有
审核人员 没有 托管 HSM 加密审核者
应用程序所用 VM 的托管标识 没有 托管 HSM 加密用户
应用程序所用存储帐户的托管标识 没有 托管 HSM 加密服务加密

三个团队角色需要访问其他资源的权限以及托管 HSM 权限。 若要部署 VM(或 Azure 应用服务的 Web 应用功能),开发人员和操作人员需要对这些资源类型的 Contributor 访问权限。 审核员需要具有对存储托管 HSM 日志的存储帐户的“读取”访问权限。

使用 Azure CLI 实现

若要分配控制平面角色(Azure RBAC),请使用 Azure 门户或任何其他管理接口,例如 Azure CLI 或 Azure PowerShell。 若要分配托管 HSM 数据平面角色,请使用 Azure CLI 或 Azure REST API。

有关控制平面角色的详细信息,请参阅 Azure 内置角色。 有关托管 HSM 数据平面角色的详细信息,请参阅 托管 HSM 的本地 RBAC 内置角色

以下 Azure CLI 代码片段演示如何实现前面所述的角色分配:

假设

  • Microsoft Entra 管理员创建了安全组来表示三个角色:Contoso 安全团队、Contoso App DevOps 和 Contoso 应用审核员。 管理员将用户添加到了各自的组。
  • 所有资源都位于 ContosoAppRG 资源组中。
  • 托管 HSM 日志存储在 contosologstorage 存储帐户中。
  • ContosoMHSM” 托管 HSM 和 “contosologstorage” 存储帐户位于同一 Azure 位置。

分配控制平面角色

订阅管理员将 Managed HSM Contributor 角色分配给安全团队。 此角色授予安全团队管理现有托管 HSM 和创建新 HSM 的权限。

# This role assignment allows Contoso Security Team to create new Managed HSMs
az role assignment create --assignee-object-id $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --assignee-principal-type Group --role "Managed HSM Contributor"

分配数据平面角色

对于现有的受管 HSM,请将 Managed HSM Administrator 角色分配给安全团队,以便他们能够管理这些设备:

# This role assignment allows Contoso Security Team to become administrator of existing managed HSM
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --scope / --role "Managed HSM Administrator"

配置日志记录并分配其他角色

安全团队设置日志记录并将角色分配给审核员和 VM 应用程序:

# Enable logging
hsmresource=$(az keyvault show --hsm-name ContosoMHSM --query id -o tsv)
storageresource=$(az storage account show --name contosologstorage --query id -o tsv)
az monitor diagnostic-settings create --name MHSM-Diagnostics --resource $hsmresource --logs '[{"category": "AuditEvent","enabled": true}]' --storage-account $storageresource

# Assign the "Crypto Auditor" role to Contoso App Auditors group. It only allows them to read.
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso App Auditors' --query 'id' -o tsv) --scope / --role "Managed HSM Crypto Auditor"

# Grant the "Crypto User" role to the VM's managed identity. It allows to use keys.
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az vm identity show --name "vmname" --resource-group "ContosoAppRG" --query principalId -o tsv) --scope / --role "Managed HSM Crypto User"

# Assign "Managed HSM Crypto Service Encryption User" role to the Storage account identity
storage_account_principal=$(az storage account show --id $storageresource --query identity.principalId -o tsv)
# (if no identity exists), then assign a new one
[ "$storage_account_principal" ] || storage_account_principal=$(az storage account update --assign-identity --id $storageresource --query identity.principalId -o tsv)

az keyvault role assignment create --hsm-name ContosoMHSM --role "Managed HSM Crypto Service Encryption User" --assignee $storage_account_principal

为实时访问配置 Privileged Identity Management

对于高度敏感的环境,请使用 Microsoft Entra Privileged Identity Management (PIM) 强制实施托管 HSM 管理员角色的实时访问。 PIM 通过消除长期管理特权来减少攻击面。

PIM 集成的先决条件

  • Microsoft Entra ID P2 或 Microsoft Entra ID Governance 许可证
  • Microsoft Entra ID 中的管理员角色:特权角色管理员或全局管理员

为托管 HSM 管理员角色启用 PIM

  1. 登录到 Microsoft Entra 管理中心

  2. 导航到 标识治理>特权身份管理>Microsoft Entra 角色

  3. 选择角色并搜索包含“托管 HSM”的角色。 虽然数据平面角色(托管 HSM 管理员、加密用户等)通过托管 HSM 本地 RBAC 进行管理,但可以将 PIM 用于控制平面 托管 HSM 参与者 角色。

  4. 选择角色并配置:

    • 激活最长持续时间:设置为有限的时间窗口(例如 4-8 小时)
    • 需要理由:启用要求用户提供激活原因
    • 需要审批:启用此功能并从安全团队中指定审批者
    • 需要 MFA:启用其他安全层

将 Microsoft Entra 安全组与 PIM 配合使用

对于通过托管 HSM 的本地 RBAC 管理的数据平面角色,请结合使用 PIM 和 Microsoft Entra 安全组:

  1. 为 HSM 管理员创建Microsoft Entra 安全组(例如“Contoso HSM 管理员”)。

  2. 将托管 HSM 管理员角色分配给此安全组:

    az keyvault role assignment create --hsm-name ContosoMHSM \
      --assignee $(az ad group show -g 'Contoso HSM Admins' --query 'id' -o tsv) \
      --scope / --role "Managed HSM Administrator"
    
  3. 在 Microsoft Entra 管理中心中将安全组配置为符合 PIM 条件:

    • 导航到 标识治理>增强身份管理>
    • 选择查找组,并添加“Contoso HSM 管理员”
    • 配置激活设置(持续时间、审批、MFA)
  4. 当管理员需要访问权限时,他们通过 PIM 激活其组成员身份,从而暂时向其授予托管 HSM 管理员角色。

监视 PIM 激活

为 PIM 角色激活配置警报,以保持可见性:

  1. 在 Microsoft Entra 管理中心中,导航到 Privileged Identity Management>Microsoft Entra 角色>警报

  2. 配置以下项目的警报:

    • 角色被激活过于频繁
    • PIM 系统外分配的角色
    • 正在创建符合条件的分配

若要进行全面的安全监视,请将这些警报与 Microsoft Sentinel 一起集成到托管 HSM 审核日志中。

生产环境的注意事项

本教程演示了一个简化的方案,演示了访问控制实现。

根据特定要求调整托管 HSM 的权限。 在此示例中,我们假设安全团队向 DevOps 员工提供密钥和机密引用(URI 和指纹),以便在其应用程序中使用。 开发人员和运营人员不需要直接访问数据平面。 虽然本教程重点介绍如何保护托管 HSM,但对其他 Azure 资源(例如 虚拟机存储帐户和其他资源)应用类似的安全措施。

后续步骤