通过


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

保护对托管 HSM 的访问

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

重要

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

先决条件

Azure Cloud Shell

Azure 托管 Azure Cloud Shell,这是一个可以通过浏览器使用的交互式 shell 环境。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用,以使用 Azure 服务。 可以使用 Cloud Shell 预安装命令运行本文中的代码,而无需在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的试一试。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 屏幕截图,其中显示了“试用 Azure Cloud Shell”的示例。
转到 https://shell.azure.com,或选择“启动 Cloud Shell”按钮,在浏览器中打开 Cloud Shell。 用于启动 Azure Cloud Shell 的按钮。
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 显示 Azure 门户中的 Cloud Shell 按钮的屏幕截图

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 通过在 Windows 和 Linux 上按 Ctrl+Shift+V,或者在 macOS 上按 Cmd+Shift+V,将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择 Enter 以运行代码或命令。

登录到 Azure

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

az login

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

了解示例方案

在此示例中,你正在开发使用 RSA 2,048 位密钥进行签名作的应用程序。 应用程序使用 托管标识在 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 的托管 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

生产环境的注意事项

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

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

后续步骤