Azure Monitor 客户管理的密钥

使用 Azure 管理的密钥对 Azure Monitor 中的数据进行加密。 可以使用自己的加密密钥来保护工作区中的数据和保存的查询。 Azure Monitor 中的客户管理的密钥使你能够更灵活地管理对日志的访问控制。 配置后,链接工作区的新数据将使用存储在 Azure Key Vault 中的密钥进行加密。

建议在配置之前,查看下方的限制和约束

客户管理的密钥概述

静态加密是组织中常见的隐私和安全要求。 你可以让 Azure 完全管理静态加密,同时可以使用各种选项严格管理加密和加密密钥。

Azure Monitor 确保使用 Azure 管理的密钥静态加密所有数据和保存的查询。 你还可以选择在 Azure 密钥保管库中使用自己的密钥加密数据,控制密钥生命周期并随时撤销对数据的访问权限。 Azure Monitor 进行加密的操作与Azure 存储加密的操作相同。

客户管理的密钥在专用的群集上提供,可提供更高的保护级别和控制。 专用群集的数据进行两次加密,一次在服务级别使用 Azure 管理的密钥或客户管理的密钥,一次在基础结构级别使用两种不同的加密算法和两个不同的密钥。 双重加密可以在其中一种加密算法或密钥可能被泄露的情况下提供保护。 在这种情况下,附加的加密层会继续保护你的数据。

过去 14 天内引入的数据或最近在查询中使用的数据保存在热缓存(受 SSD 支持)中,以提高查询效率。 SSD 数据将使用 Microsoft 密钥进行加密,而不管客户管理的密钥的配置如何,但你对 SSD 访问的控制将遵循密钥吊销规定

Log Analytics 专用群集定价模型要求承诺层始于 500 GB/天,其值可以为 500、1000、2000 或 5000 GB/天。

客户管理的密钥在 Azure Monitor 中的操作方式

Azure Monitor 使用托管标识授予对 Azure Key Vault 的访问权限。 在群集级别支持 Log Analytics 群集的标识。 为了允许在多个工作区上使用客户管理的密钥,一个 Log Analytics 群集资源将用作 Key Vault 和 Log Analytics 工作区之间的中间标识连接。 群集的存储使用与群集资源关联的托管标识,通过 Azure Active Directory 对 Azure Key Vault 进行身份验证。

可以将客户管理的密钥配置应用于新群集或已将工作区与其中引入的数据链接的现有群集。 引入到链接工作区的新数据使用密钥进行加密,在配置之前引入的旧数据仍使用 Azure 密钥进行加密。 查询不受客户管理的密钥配置的影响,并且会跨旧数据和新数据无缝执行查询。 可以随时从群集中取消链接工作区,取消链接后引入的新数据使用 Microsoft 密钥进行加密,并且会跨旧数据和新数据无缝执行查询。

重要

客户管理的密钥功能是区域性的。 Azure Key Vault、群集和链接的工作区必须位于同一区域,但可以位于不同订阅。

客户管理的密钥概述

  1. Key Vault
  2. Log Analytics 群集资源具有拥有 Key Vault 权限的托管标识,此标识可传播到基础专用群集存储
  3. 专用群集
  4. 链接到专用群集的工作区

加密密钥操作

存储数据加密涉及 3 种类型的密钥:

  • “KEK”- 密钥加密密钥(你的客户管理的密钥)
  • “AEK”- 帐户加密密钥
  • “DEK”- 数据加密密钥

下列规则适用:

  • 群集存储对每个存储帐户都有唯一的加密密钥,称为“AEK”。
  • AEK 用于派生 DEK 密钥,后者用于对写入磁盘的每个数据块进行加密。
  • 当你在 Key Vault 中配置密钥并更新群集中的密钥详细信息时,群集存储会执行“包装”和“解包”“AEK”请求以进行加密和解密。
  • KEK 永不离开 Key Vault。
  • Azure 存储使用与群集资源关联的托管标识进行身份验证。 它通过 Azure Active Directory 访问 Azure Key Vault。

客户管理的密钥的预配步骤

  1. 创建 Azure Key Vault 和存储密钥
  2. 创建群集
  3. 向 Key Vault 授予权限
  4. 为群集更新密钥标识符详细信息
  5. 链接工作区

Azure 门户中当前不支持客户管理的密钥的配置,可以通过 PowerShellCLIREST 请求执行预配。

存储加密密钥 (KEK)

在计划群集的区域中创建 Azure 密钥保管库,或使用现有 Azure 密钥保管库,然后生成或导入用于日志加密的密钥。 必须将 Azure Key Vault 配置为可恢复,以保护密钥以及对 Azure Monitor 中的数据的访问权限。 可以验证是否应启用 Key Vault 中“软删除”和“清除保护”属性下的此配置 。

“软删除”和“清除保护”设置

可以通过 CLI 和 PowerShell 在 Key Vault 中更新这些设置:

创建群集

群集使用托管标识通过 Key Vault 来加密数据。 在创建群集时,将标识 type 属性配置为 SystemAssigned 以允许访问 Key Vault 进行“包装”和“解包”操作。

群集中系统分配的托管标识的标识设置

{
  "identity": {
    "type": "SystemAssigned"
    }
}

请遵循“专用群集”一文中说明的过程。

授予 Key Vault 权限

Key Vault 中有两种权限模型用于向群集和底层存储授予权限——Vault 访问策略和 Azure 基于角色的访问控制。

  1. 保管库访问策略

    在 Azure 门户中打开 Key Vault,单击“访问策略”,选择“Vault 访问策略”,然后单击“+ 添加访问策略”以使用以下设置创建策略:

    • 密钥权限 — 选择“获取”、“包装密钥”和“解包密钥”。
    • 选择主体,具体取决于群集中使用的身份类型(系统或用户分配的托标识)
      • 系统分配的托管标识 - 输入群集名称或群集主体 ID
      • 用户分配的托管标识 - 输入标识名称

    授予 Key Vault 权限

    需要“获取”权限,才能验证是否已将 Key Vault 配置为可恢复以保护密钥以及对 Azure Monitor 数据的访问。

  2. Azure 基于角色的访问控制 在 Azure 门户中打开 Key Vault,单击“访问策略”,选择“Azure 基于角色的访问控制”,然后输入“访问控制(IAM)”并添加“Key Vault 加密服务加密用户”角色分配。

为群集更新密钥标识符详细信息

群集的所有操作都需要 Microsoft.OperationalInsights/clusters/write 操作权限。 可以通过包含 */write 操作的所有者或参与者或包含 Microsoft.OperationalInsights/* 操作的 Log Analytics 参与者角色授予此权限。

此步骤使用用于“AEK”打包和解包的密钥和版本更新专用群集存储。

重要

  • 密钥轮换可以是自动的,也可以要求显式密钥更新,请参阅密钥轮换以确定适合的方法,然后再更新群集中的密钥标识符详细信息。
  • 群集更新不应在同一个操作中同时包含标识和密钥标识符详细信息。 如果需要对两者进行更新,则更新应为两个连续操作。

授予 Key Vault 权限

为群集中的 KeyVaultProperties 更新密钥标识符详细信息。

该操作是异步操作,可能需要一段时间才能完成。

不可用

重要

此步骤应仅在群集配置之后执行。 如果在预配前链接工作区并引入数据,则引入的数据将被删除,并且无法恢复。

你需要对工作区具有“写入”权限,并且需要群集才能执行此操作。 它包括 Microsoft.OperationalInsights/workspaces/writeMicrosoft.OperationalInsights/clusters/write

请遵循“专用群集”一文中说明的过程。

密钥吊销

重要

  • 若要撤销对数据的访问,建议禁用密钥,或删除 Key Vault 中的访问策略。
  • 如果将群集的 identitytype 设置为 None,还可撤销数据访问权,但不建议使用此方法,因为如果不联系支持人员就无法将其还原。

群集存储在一小时或更短时间内将始终遵循关键权限的更改,并且存储将变得不可用。 摄取到链接工作区的新数据将被删除且不可恢复。 这些工作空间上的数据无法访问,并且查询失败。 只要不删除群集和工作区,之前引入的数据就会保留在存储中。 不可访问的数据由数据保留策略管理,并在保留期截止时被清除。 过去 14 天内引入的数据和最近在查询中使用的数据也保存在热缓存(受 SSD 支持)中,以提高查询效率。 SSD 上的数据将在密钥吊销操作后被删除,并且变得不可访问。 群集存储尝试到达你的 Key Vault 以定期解包加密,启用密钥后,解包成功,SSD 数据从存储重新加载,数据摄取和查询在 30 分钟内恢复。

密钥轮换

密钥轮换具有两种模式:

  • 自动旋转 — 使用 "keyVaultProperties" 更新你的群集,但会忽略 "keyVersion" 属性,或将其设置为 ""。 存储将自动使用最新版本。
  • 显式密钥版本更新 - 使用 "keyVersion" 属性中的密钥版本更新你的群集。 密钥的轮换需要在群集中进行显式 "keyVaultProperties" 更新,请参阅使用密钥标识符详细信息更新群集。 如果在 Key Vault 中生成了新的密钥版本但未在群集中更新它,群集存储将继续使用之前的密钥。 如果在更新群集中的新密钥之前禁用或删除旧密钥,则你将进入密钥吊销状态。

在密钥轮换操作之后,你的所有数据仍然可以访问。 数据始终使用帐户加密密钥 (AEK) 加密,该密钥使用 Key Vault 中的新密钥加密密钥 (KEK) 版本进行加密。

用于已保存的查询和日志警报的客户托管的密钥

Log Analytics 中使用的查询语言可以实现丰富的表达,并且可以在注释中或查询语法中包含敏感信息。 某些组织要求将此类信息按照客户管理的密钥的策略进行保护,因此你需要保存使用密钥加密的查询。 使用 Azure Monitor 可以在连接到工作区时将采用密钥加密的已存搜索查询和日志警报查询存储到你自己的存储帐户。

注意

根据所使用的方案,可将 Log Analytics 查询保存到各种存储。 在以下方案中,仍使用 Microsoft 密钥 (MMK) 对查询加密,而不考虑客户管理的密钥的配置:Azure Monitor 中的工作簿、Azure 仪表板、Azure 逻辑应用、Azure Notebooks 和自动化 runbook。

将你自己的存储 (BYOS) 链接到工作区时,该服务会将保存的搜索和日志警报查询存储到你的存储帐户。 通过对存储帐户和静态加密策略的控制,你可以使用客户管理的密钥保护已保存的搜索和日志警报。 但需支付与该存储帐户相关的费用。

设置用于查询的客户管理的密钥之前需要注意的事项

  • 需拥有对工作区和存储帐户的“写入”权限。
  • 确保在 Log Analytics 工作区所在区域创建存储帐户。
  • 存储中的保存搜索视为服务项目,并且其格式可能会发生变化。
  • 从工作区删除现有的保存搜索。 复制配置之前需要的所有保存搜索。 可以使用 PowerShell 查看保存的搜索。
  • 链接存储帐户进行查询时,不支持查询“历史记录”和“固定到仪表板”。
  • 你可以将单个存储帐户链接到工作区,该工作区可用于保存的搜索和日志警报查询。
  • 触发的日志警报不包含搜索结果或警报查询。 可以使用警报维度获取触发警报中的上下文。

为已存搜索查询配置 BYOS

为查询链接存储帐户以在你的存储帐户中保留已保存的搜索查询。

不可用

完成配置后,所有新的已存搜索查询将保存在存储中。

为日志警报查询配置 BYOS

为警报链接存储帐户以在你的存储帐户中保留日志警报查询。

不可用

完成配置后,所有新的日志警报查询将保存在存储中。

客户管理的密钥的操作

客户管理的密钥在专用群集上提供,并且专用群集文章中引用了这些操作

  • 获取资源组中的所有群集
  • 获取订阅中的所有群集
  • 更新群集中的容量预留
  • 更新群集中的 billingType
  • 从群集中取消与工作区的链接
  • 删除群集

限制和约束

  • 每个区域和订阅中最多可以创建两个活动群集。

  • 每个区域和订阅中最多可以存在 7 个保留群集(活动或最近删除的群集)。

  • 最多可以将 1,000 个 Log Analytics 工作区链接到一个群集。

  • 在 30 天内最多允许对特定工作区进行两次工作区链接操作。

  • 当前不支持将群集移到另一个资源组或订阅。

  • 群集更新不应在同一个操作中同时包含标识和密钥标识符详细信息。 如果两者都需要更新,则应在两次连续操作中进行更新。

  • 当前不能在中国使用密码箱。

  • 对于受支持区域中自 2020 年 10 月开始创建的群集,系统会自动为其配置双重加密。 可以通过在群集上发送 GET 请求并观察启用了双重加密的群集的 isDoubleEncryptionEnabled 值是否为 true 来验证是否为你的群集配置了双重加密。

    • 如果你创建群集并收到错误“区域名称不支持对群集进行双重加密。”,则你仍可通过在 REST 请求正文中添加 "properties": {"isDoubleEncryptionEnabled": false} 来创建无双重加密的群集。
    • 创建群集后,无法更改双重加密设置。

可在关联到群集时删除关联的工作区。 如果你决定在软删除期间恢复工作区,则工作区会返回到以前的状态,并保持与群集关联。

  • 客户管理的密钥的加密应用于在配置后新引入的数据。 在配置前引入的数据仍将使用 Microsoft 密钥进行加密。 你可以无缝查询在配置客户管理的密钥前后引入的数据。

  • Azure Key Vault 必须配置为可恢复。 默认情况下,这些属性不会启用,并且应使用 CLI 或 PowerShell 对其进行配置:

  • Azure Key Vault、群集和工作区必须位于同一区域和同一 Azure Active Directory (Azure AD) 租户,但可以位于不同订阅。

  • 如果将群集的 identitytype 设置为 None,还可撤销数据访问权,但不建议使用此方法,因为如果不联系支持人员就无法将其还原。 建议通过密钥吊销来撤销对你的数据的访问权限。

  • 如果密钥保管库位于专用链接 (vNet) 中,则不能将客户管理的密钥与用户分配的托管标识一起使用。 在这种情况下,可以使用系统分配的托管标识。

疑难解答

  • 依据 Key Vault 可用性的行为:

    • 正常操作 — 存储会缓存 AEK 一小段时间,并返回 Key Vault 定期进行解包。

    • Key Vault 连接错误 — 存储通过允许密钥在缓存中保留一段时间(保留时间与可用性问题的持续时间相同)来处理暂时性错误(超时、连接失败、DNS 问题),这可以克服暂时性的问题和可用性问题。 查询和引入功能将继续运行而不会中断。

  • Key Vault 访问速率 — 群集存储为实现包装和解包而访问 Key Vault 的频率介于 6 到 60 秒之间。

  • 如果在群集处于预配或更新状态时对其进行更新,则更新将失败。

  • 如果创建群集时出现冲突错误,原因可能是你在过去 14 天内删除了群集,并且它处于软删除状态。 软删除期间,群集名称保持为预留,并且无法新建同名群集。 永久删除群集时,名称将在软删除期结束后释放。

  • 将工作区链接到群集时,如果是链接到其他群集,则链接会失败。

  • 如果创建群集并立即指定 KeyVaultProperties,则操作可能会失败,因为将系统标识分配给群集后才能定义访问策略。

  • 如果使用 KeyVaultProperties 更新现有的群集,并且 Key Vault 中缺少“Get”密钥访问策略,则该操作将失败。

  • 如果无法部署群集,请验证 Azure Key Vault、群集和链接的工作区是否位于同一区域。 可以位于不同的订阅。

  • 如果在 Key Vault 中更新密钥版本,但未更新群集中的新密钥标识符详细信息,则群集将继续使用之前的密钥,并且数据将变得不可访问。 更新群集中的新密钥标识符详细信息以恢复数据引入和数据查询功能。

  • 部分操作较为耗时,可能需要一段时间才能完成 - 包括群集创建、群集密钥更新和群集删除。 可以通过将 GET 请求发送到群集或工作区来检查操作状态,并观察响应。 例如,未链接的工作区在“功能”下没有 clusterResourceId 。

  • 错误消息

    群集创建

    • 400 — 群集名称无效。 群集名称可包含字符 a-z、A-Z、0-9,且长度为 3-63。
    • 400 — 请求的正文为 Null 或格式错误。
    • 400 — SKU 名称无效。 将 SKU 名称设置为 CapacityReservation。
    • 400 — 提供了容量,但 SKU 不是 capacityReservation。 将 SKU 名称设置为 CapacityReservation。
    • 400 — SKU 容量不足。 将容量值设置为 500、1000、2000 或 5000 GB/天。
    • 400 — 容量锁定 30 天。 更新后 30 天内允许减少容量。
    • 400 — 未设置 SKU。 将 SKU 名称设置为 capacityReservation 并将容量值设置为 500、1000、2000 或 5000 GB/天。
    • 400 — 标识为 Null 或为空。 设置具有 systemAssigned 类型的标识。
    • 400 — KeyVaultProperty 是创建时设置的。 创建群集后更新 KeyVaultProperties。
    • 400 — 现在无法执行操作。 异步操作处于非成功状态。 群集必须完成其操作,才能执行任意更新操作。

    群集更新

    • 400 — 群集处于正在删除状态。 正在执行异步操作。 群集必须完成其操作,才能执行任意更新操作。
    • 400 — KeyVaultProperties 不为空,但格式错误。 请参阅密钥标识符更新
    • 400 — 无法验证 Key Vault 中的密钥。 可能是由于权限不足或密钥不存在。 验证是否在 Key Vault 中设置密钥和访问策略
    • 400 — 密钥不可恢复。 Key Vault 必须设置为“软删除”和“清除保护”。 请参阅 Key Vault 文档
    • 400 — 现在无法执行操作。 等待异步操作完成,然后重试。
    • 400 — 群集处于正在删除状态。 等待异步操作完成,然后重试。

    群集获取

    • 404 — 找不到群集,群集可能已删除。 如果尝试使用该名称创建群集但发生冲突,则该群集将处于软删除状态,为期 14 天。 可以联系支持人员将其恢复,也可以使用其他名称创建新群集。

    群集删除

    • 409 — 处于预配状态时无法删除群集。 等待异步操作完成,然后重试。

    工作区链接

    • 404 — 未找到工作区。 指定的工作区不存在或已被删除。
    • 409 — 正在执行工作区链接或取消链接操作。
    • 400 — 找不到群集,指定的群集不存在或已被删除。 如果尝试使用该名称创建群集但发生冲突,则该群集将处于软删除状态,为期 14 天。 可以联系支持人员将其恢复。

    工作区取消链接

    • 404 — 未找到工作区。 指定的工作区不存在或已被删除。
    • 409 — 正在执行工作区链接或取消链接操作。

后续步骤