Azure Monitor 客户管理的密钥
使用 Azure 管理的密钥对 Azure Monitor 中的数据进行加密。 可以使用自己的加密密钥来保护工作区中的数据和保存的查询。 Azure Monitor 中的客户管理的密钥使你能够更灵活地管理对日志的访问控制。 配置后,引入到链接工作区的新数据会使用 Azure 密钥保管库或 Azure 密钥保管库托管的“HSM”中存储的密钥进行加密。
请在配置之前查看限制和约束。
客户管理的密钥概述
静态加密是组织中常见的隐私和安全要求。 你可以让 Azure 完全管理静态加密,也可以使用各种选项严格管理加密和加密密钥。
Azure Monitor 确保使用 Azure 管理的密钥 (MMK) 静态加密所有数据和保存的查询。 Azure Monitor 进行加密的操作与Azure 存储加密的操作相同。
若要管理密钥生命周期并能够撤销对数据的访问权限,可以通过 Azure Key Vault 使用自己的密钥加密数据。
客户管理的密钥在专用群集上提供,并提供更高级别的保护和控制。 数据在存储中加密两次,一次是在服务级别使用 Azure 管理的密钥或客户管理的密钥加密的,一次是在基础结构级别使用两种不同的加密算法和两个不同的密钥加密的。 双重加密可以在其中一种加密算法或密钥可能被泄露的情况下提供保护。
过去 14 天内引入的数据或最近在查询中使用的数据保存在热缓存(受 SSD 支持)中,以提高查询效率。 SSD 数据将使用 Microsoft 密钥进行加密,而不管你是否配置客户管理的密钥,但你对 SSD 访问的控制将遵循密钥吊销规定。
重要
专用群集使用承诺层级定价模型,该模型至少为 100 GB/天。
客户管理的密钥在 Azure Monitor 中的工作原理
Azure Monitor 使用托管标识授予对 Azure Key Vault 的访问权限。 在群集级别支持 Log Analytics 群集的标识。 为了允许在多个工作区上使用客户管理的密钥,一个 Log Analytics 群集资源将用作 Key Vault 和 Log Analytics 工作区之间的中间标识连接。 群集的存储使用与群集关联的托管标识,通过 Microsoft Entra ID 对 Azure Key Vault 进行身份验证。
群集支持两种托管标识类型:系统分配的标识和用户分配的标识,而单一标识可根据自己的场景在群集中进行自定义。
- 当标识
type
设置为SystemAssigned
时,系统分配的托管标识会更加简单,并在创建群集时自动生成。 此标识稍后可用于授予对 Key Vault 的存储访问权限,以便进行包装和展开操作。 - 用户分配的托管标识让你可以在创建群集时配置客户管理的密钥(如果在创建群集之前在密钥库中向其授予权限)。
可以在新群集上配置客户管理的密钥,也可以在链接到工作区和已引入数据的现有群集上配置。 引入到链接工作区的新数据使用密钥进行加密,在配置之前引入的旧数据仍使用 Microsoft 密钥进行加密。 客户管理的密钥配置并不影响查询,可继续无缝地运行新旧数据。 可以随时取消工作区与群集的链接。 取消链接后引入的新数据使用 Microsoft 密钥进行加密,而查询可以无缝地跨旧数据和新数据执行。
重要
客户管理的密钥功能是区域性的。 Azure Key Vault、群集和链接的工作区必须位于同一区域,但可以位于不同订阅。
- 密钥保管库
- Log Analytics 群集资源具有拥有 Key Vault 权限的托管标识,此标识可传播到基础专用群集存储
- 专用群集
- 链接到专用群集的工作区
加密密钥操作
存储数据加密涉及 3 种类型的密钥:
- “KEK”- 密钥加密密钥(你的客户管理的密钥)
- “AEK”- 帐户加密密钥
- “DEK”- 数据加密密钥
下列规则适用:
- 群集存储对每个存储帐户都有唯一的加密密钥,称为“AEK”。
- AEK 用于派生 DEK 密钥,后者用于对写入磁盘的每个数据块进行加密。
- 当你在 Key Vault 中配置密钥并更新群集中的密钥详细信息时,群集存储会执行“包装”和“解包”“AEK”请求以进行加密和解密。
- KEK 绝不会离开 Key Vault,如果使用的是托管的 HSM,则绝不会离开硬件。
- Azure 存储使用与群集资源关联的托管标识进行身份验证。 它通过 Microsoft Entra ID 访问 Azure Key Vault。
客户管理的密钥的预配步骤
- 创建 Azure Key Vault 和存储密钥
- 创建群集
- 向 Key Vault 授予权限
- 为群集更新密钥标识符详细信息
- 链接工作区
Azure 门户中当前不支持客户管理的密钥的配置,可以通过 PowerShell、CLI 或 REST 请求执行预配。
存储加密密钥 (KEK)
Azure 密钥管理产品组合列出了可以使用的保管库和托管 HSM。
在计划群集的区域中创建或使用现有的 Azure Key Vault。 在 Key Vault 中,生成或导入用于日志加密的密钥。 必须将 Azure Key Vault 配置为可恢复,以保护密钥以及对 Azure Monitor 中的数据的访问权限。 可以验证是否应启用 Key Vault 中“软删除”和“清除保护”属性下的此配置 。
可以通过 CLI 和 PowerShell 在 Key Vault 中更新这些设置:
创建群集
群集使用托管标识对 Key Vault 进行数据加密。 在创建群集时,将标识 type
属性配置为 SystemAssigned
以允许访问 Key Vault 进行“包装”和“解包”操作。
群集中系统分配的托管标识的标识设置
{
"identity": {
"type": "SystemAssigned"
}
}
请遵循“专用群集”一文中说明的过程。
授予 Key Vault 权限
Azure 密钥保管库中有两种权限模型用于向群集和底层存储授予权限,分别是基于 Azure 角色的访问控制 (Azure RBAC) 和保管库访问策略(旧版)。
分配你控制的 Azure RBAC(建议做法)
若要添加角色分配,你必须具有一个拥有
Microsoft.Authorization/roleAssignments/write
和Microsoft.Authorization/roleAssignments/delete
权限的角色,例如用户访问管理员或所有者。在 Azure 门户中打开 Key Vault,然后选择“设置”>“访问配置”>“基于 Azure 角色的访问控制”。 然后输入“访问控制 (IAM)”并添加“密钥保管库加密服务加密用户”角色分配。
分配保管库访问策略(旧版)
在 Azure 门户中打开 Key Vault,然后选择“访问策略”>“保管库访问策略”>“+ 添加访问策略”以使用以下设置创建策略:
- 密钥权限 — 选择“获取”、“包装密钥”和“解包密钥”。
- 选择主体 - 具体取决于群集中使用的标识类型(系统或用户分配的托管标识)
- 系统分配的托管标识 - 输入群集名称或群集主体 ID
- 用户分配的托管标识 - 输入标识名称
需要“获取”权限,才能验证是否已将 Key Vault 配置为可恢复以保护密钥以及对 Azure Monitor 数据的访问。
为群集更新密钥标识符详细信息
群集的所有操作都需要 Microsoft.OperationalInsights/clusters/write
操作权限。 可以通过包含 */write
操作的所有者或参与者或包含 Microsoft.OperationalInsights/*
操作的 Log Analytics 参与者角色授予此权限。
此步骤使用用于“AEK”打包和解包的密钥和版本更新专用群集存储。
重要
- 密钥轮换可以是自动的,也可以要求显式密钥更新,请参阅密钥轮换以确定适合的方法,然后再更新群集中的密钥标识符详细信息。
- 群集更新不应在同一个操作中同时包含标识和密钥标识符详细信息。 如果需要对两者进行更新,则更新应为两个连续操作。
为群集中的 KeyVaultProperties 更新密钥标识符详细信息。
该操作是异步操作,可能需要一段时间才能完成。
将工作区链接到群集
重要
此步骤应仅在群集配置之后执行。 如果在预配前链接工作区并引入数据,则引入的数据将被删除,并且无法恢复。
你需要对工作区具有“写入”权限,并且需要群集才能执行此操作。 它包括 Microsoft.OperationalInsights/workspaces/write
和 Microsoft.OperationalInsights/clusters/write
。
请遵循“专用群集”一文中说明的过程。
密钥吊销
重要
- 若要撤销对数据的访问,建议禁用密钥,或删除 Key Vault 中的访问策略。
- 如果将群集的
identity
type
设置为None
,还可撤销数据访问权,但不建议使用此方法,因为如果不联系支持人员就无法将其还原。
群集存储在一小时或更短时间内将始终遵循关键权限的更改,并且存储将变得不可用。 引入到链接工作区的新数据将被删除且不可恢复。 这些工作空间上的数据无法访问,并且查询失败。 只要不删除群集和工作区,之前引入的数据就会保留在存储中。 不可访问的数据由数据保留策略管理,并在保留期截止时被清除。 过去 14 天内引入的数据和最近在查询中使用的数据也保存在热缓存(受 SSD 支持)中,以提高查询效率。 SSD 上的数据将在密钥吊销操作后被删除,并且变得不可访问。 群集存储会定期尝试访问 Key Vault 进行包装和解包,一旦启用密钥,解包就会成功,SSD 数据将从存储中重新加载,并在 30 分钟内恢复数据引入和查询。
密钥轮换
密钥轮换具有两种模式:
- 自动旋转 — 使用
"keyVaultProperties"
更新你的群集,但会忽略"keyVersion"
属性,或将其设置为""
。 存储会自动使用最新的密钥版本。 - 显式密钥版本更新 - 使用
"keyVersion"
属性中的密钥版本更新你的群集。 密钥的轮换需要在群集中进行显式"keyVaultProperties"
更新。 有关详细信息,请参阅为群集更新密钥标识符详细信息。 如果在 Key Vault 中生成了新的密钥版本但未在群集中更新密钥,群集存储将继续使用之前的密钥。 如果在更新群集中的新密钥之前禁用或删除了旧密钥,则你将进入密钥吊销状态。
在密钥轮换操作之后,你的所有数据仍然可以访问。 数据始终使用帐户加密密钥 (AEK) 加密,该密钥使用 Key Vault 中的新密钥加密密钥 (KEK) 版本进行加密。
适用于已保存查询和日志搜索警报的客户管理的密钥
Log Analytics 中使用的查询语言可以实现丰富的表达,并且可以在注释中或查询语法中包含敏感信息。 某些组织要求将此类信息按照客户管理的密钥的策略进行保护,因此你需要保存使用密钥加密的查询。 使用 Azure Monitor,可以在链接到工作区时将使用密钥加密的已保存查询和日志搜索警报存储在自己的存储帐户中。
工作簿的客户管理的密钥
使用 Azure Monitor,可以在工作簿“保存”操作中选择“将内容保存到 Azure 存储帐户”时,将使用密钥加密的工作簿查询存储在自己的存储帐户中,但需留意所提及的有关用于已保存查询和日志搜索警报的客户管理的密钥的注意事项。
注意
在以下方案中,仍使用 Microsoft 密钥 (MMK) 对查询加密,而不考虑客户管理的密钥的配置:Azure 仪表板、Azure 逻辑应用、Azure Notebooks 和自动化 Runbook。
当链接到已保存查询的“存储帐户”后,服务会将已保存查询和日志搜索警报查询存储在存储帐户中。 掌握对存储帐户“encryption-at-rest 策略”的控制权后,可以使用客户管理的密钥来保护所保存的查询和日志搜索警报。 但需支付与该存储帐户相关的费用。
设置用于查询的客户管理的密钥之前需要注意的事项
- 需拥有对工作区和存储帐户的“写入”权限。
- 确保在 Log Analytics 工作区所在区域创建存储帐户,且使用客户管理的密钥加密。 这一点很重要,因为保存的查询将存储在表存储中,并且只能在创建存储帐户时对其进行加密。
- 保存在查询包中的查询不会使用客户管理的密钥进行加密。 请在保存查询时改为选择“另存为旧查询”,以使用客户管理的密钥对其进行保护。
- 存储中的保存查询被视为服务项目,并且其格式可能会发生变化。
- 链接用于查询的存储帐户将会从工作区中移除现有的保存查询。 复制你在此配置之前需要的保存查询。 可以使用 PowerShell 查看保存的查询。
- 链接存储帐户进行查询时,不支持查询“历史记录”和“固定到仪表板”。
- 你可以将单个存储帐户链接到同时用于所保存查询和日志搜索警报查询的工作区。
- 日志搜索警报将保存在 Blob 存储中,而且可以在创建存储帐户时或稍后配置客户管理的密钥加密。
- 触发的日志搜索警报将不会包含搜索结果或警报查询。 可以使用警报维度获取触发警报中的上下文。
为保存的查询配置 BYOS
为查询链接存储帐户以在你的存储帐户中保留已保存的查询。
完成配置后,所有新的已存搜索查询将保存在存储中。
为日志搜索警报查询配置 BYOS
链接警报的存储帐户,以在你的存储帐户中保留日志搜索警报查询。
完成配置后,所有新的日志警报查询将保存在存储中。
客户管理的密钥的操作
客户管理的密钥在专用群集上提供,并且专用群集文章中引用了这些操作
- 获取资源组中的所有群集
- 获取订阅中的所有群集
- 更新群集中的容量预留
- 更新群集中的 billingType
- 从群集中取消与工作区的链接
- 删除群集
限制和约束
每个区域和订阅中最多可以创建两个活动群集。
每个区域和订阅中最多可以存在 7 个保留群集(活动或最近删除的群集)。
最多可以将 1,000 个 Log Analytics 工作区链接到一个群集。
在 30 天内最多允许对特定工作区进行两次工作区链接操作。
当前不支持将群集移到另一个资源组或订阅。
群集更新不应在同一操作中同时包含标识和密钥标识符详细信息。 如果两者都需要更新,则应在两次连续操作中进行更新。
当前不能在中国使用密码箱。
对于受支持区域中自 2020 年 10 月开始创建的群集,系统会自动为其配置双重加密。 可以通过在群集上发送 GET 请求并观察启用了双重加密的群集的
isDoubleEncryptionEnabled
值是否为true
来验证是否为你的群集配置了双重加密。- 如果你创建群集并收到错误“区域名称不支持对群集进行双重加密。”,则你仍可通过在 REST 请求正文中添加
"properties": {"isDoubleEncryptionEnabled": false}
来创建无双重加密的群集。 - 创建群集后,无法再更改双重加密设置。
- 如果你创建群集并收到错误“区域名称不支持对群集进行双重加密。”,则你仍可通过在 REST 请求正文中添加
客户管理的密钥的加密应用于在配置后新引入的数据。 在配置前引入的数据仍将使用 Microsoft 密钥进行加密。 你可以无缝查询在配置客户管理的密钥前后引入的数据。
Azure Key Vault 必须配置为可恢复。 默认情况下,这些属性不会启用,并且应使用 CLI 或 PowerShell 对其进行配置:
Azure Key Vault、群集和工作区必须位于同一区域和同一 Microsoft Entra 租户,但可以位于不同订阅。
如果将群集的
identity
type
设置为None
,还可撤销数据访问权,但不建议使用此方法,因为如果不联系支持人员就无法将其还原。 建议通过密钥吊销来撤销对你的数据的访问权限。如果密钥保管库位于专用链接 (vNet) 中,则不能将客户管理的密钥与用户分配的托管标识一起使用。 在这种情况下,可以使用系统分配的托管标识。
故障排除
依据 Key Vault 可用性的行为:
正常操作 — 存储会缓存 AEK 一小段时间,并返回 Key Vault 定期进行解包。
Key Vault 连接错误 -- 存储通过允许密钥在缓存中保留一段时间(保留时间与可用性问题的持续时间相同)来处理暂时性错误(超时、连接失败、DNS 问题),这可以克服暂时性的问题和可用性问题。 查询和引入功能将继续运行而不会中断。
Key Vault 访问速率(群集存储为实现包装和解包而访问 Key Vault 的频率)介于 6 到 60 秒之间。
如果在群集处于预配或更新状态时对其进行更新,则更新将失败。
如果在创建集群时遇到冲突错误,则具有相同名称的集群可能在过去 14 天内已被删除并保留。 删除的群集名称在删除后会保留 14 天。
如果工作区已链接到另一个群集,则将工作区链接到群集将失败。
如果创建群集并立即指定 KeyVaultProperties,操作可能会失败,除非为群集分配标识并向该标识授予对 Key Vault 的访问权限。
如果使用 KeyVaultProperties 更新现有的群集,并且 Key Vault 中缺少“Get”密钥访问策略,则该操作将失败。
如果无法部署群集,请验证 Azure Key Vault、群集和链接的工作区是否位于同一区域。 可以位于不同的订阅。
如果在 Key Vault 中轮换密钥,但未更新群集中的新密钥标识符详细信息,则群集将继续使用之前的密钥,并且数据将变得不可访问。 更新群集中的新密钥标识符详细信息以恢复数据引入和查询功能。 可以使用“''”更新密钥版本,让存储始终自动使用最新密钥版本。
部分操作较为耗时,可能需要一段时间才能完成,包括群集创建、群集密钥更新和群集删除。 可以通过将 GET 请求发送到群集或工作区来检查操作状态,并观察响应。 例如,未链接的工作区在“功能”下没有 clusterResourceId 。
错误消息
群集更新
- 400 - 群集处于正在删除状态。 正在执行异步操作。 群集必须完成其操作,才能执行任意更新操作。
- 400 - KeyVaultProperties 不为空,但格式错误。 请参阅密钥标识符更新。
- 400 - 无法验证 Key Vault 中的密钥。 可能是由于权限不足或密钥不存在。 验证是否在 Key Vault 中设置密钥和访问策略。
- 400 - 密钥不可恢复。 Key Vault 必须设置为“软删除”和“清除保护”。 请参阅 Key Vault 文档
- 400 - 现在无法执行操作。 等待异步操作完成,然后重试。
- 400 - 群集处于正在删除状态。 等待异步操作完成,然后重试。
群集获取
- 404 -- 找不到群集,群集可能已删除。 如果尝试使用该名称创建群集但发生冲突,则该群集正处于删除过程中。