Compartilhar via

Azure Monitor 的客户管理密钥

Azure Monitor使用Azure管理的密钥加密数据。 可以使用自己的加密密钥来保护工作区中的数据。 通过在Azure Monitor中使用客户管理的密钥,可以控制加密密钥生命周期并访问日志。 在设置客户管理的密钥后,导入到链接工作区的新数据将使用存储在 Azure Key VaultAzure Key Vault 托管 HSM(硬件安全模块)中的密钥进行加密。

客户管理的密钥概述

静态数据加密是组织中常见的隐私和安全要求。 可以让Azure完全管理静态加密,或使用各种选项来密切管理加密和加密密钥。

Azure Monitor可确保使用Azure管理的密钥(MMK)对所有数据和保存的查询进行静态加密。 Azure Monitor加密的使用与Azure Storage加密运行的方式相同。

若要控制密钥生命周期并撤销对数据的访问,请在 Azure Key VaultAzure Key Vault 托管 HSM 中使用自己的密钥加密数据。 客户管理的密钥功能在 专用群集 上可用,并提供更高级别的保护和控制。

引入到专用群集的数据加密两次 - 使用Azure托管密钥或客户管理的密钥,在基础结构级别使用两种不同的加密算法和两个不同的密钥。 双重加密可以在其中一种加密算法或密钥被泄露的情况下提供保护。

过去 14 天内引入的数据或最近在查询中使用的数据保存在热缓存(受 SSD 支持)中,以提高查询效率。 无论是否配置客户管理的密钥,SSD 数据都使用Azure管理的密钥进行加密,但对 SSD 访问的控制遵循密钥吊销

重要

专用群集使用承诺层级定价模型,该模型至少为 100 GB/天。

Azure Monitor中客户管理密钥的工作原理

Azure Monitor 使用托管标识向 Azure Key Vault 中的密钥授予访问权限。 群集级别支持 Log Analytics 群集的身份功能。 若要在多个工作区上提供客户管理的密钥,Log Analytics专用群集资源充当Key Vault与Log Analytics工作区之间的中间标识连接。 群集的存储使用与群集关联的托管标识通过Microsoft Entra ID向Azure Key Vault进行身份验证。

群集支持两种 托管标识类型:系统分配和用户分配,而单个标识可以在群集中定义,具体取决于你的方案。

  • 当设置为 identitytypeSystemAssigned 时,系统分配的托管标识更简单,并在群集中自动生成。 稍后使用此标识符向群集存储授予对密钥保管库的访问权限,以便进行数据加密和解密。
  • 用户分配的托管标识允许在群集创建时配置客户管理的密钥,将 identitytype 设置为 UserAssigned,并在创建群集之前在Key Vault授予它权限。

在新群集上或具有链接的数据引入工作区的现有专用群集上配置客户管理的密钥。 您可以随时将工作区从集群中解除链接。 引入到链接工作区的新数据使用密钥进行加密,旧数据仍使用Azure管理的密钥进行加密。 配置不会中断引入或查询,查询可以无缝地跨新旧数据执行。 从群集取消链接工作区时,引入的新数据会使用Azure管理的密钥进行加密。

重要

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

客户管理的密钥概述的屏幕截图。

  1. 密钥保管库
  2. 具有 Key Vault 权限的托管标识的日志分析集群资源——该标识将传播到基础专用集群存储中。
  3. 专用群集
  4. 连接到专用群集的工作区

加密密钥类型

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

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

下列规则适用:

  • 群集存储为每个存储帐户都有唯一的加密密钥,称为 AEK
  • AEK 派生 DEKs,这是加密写入磁盘的每个数据块的密钥。
  • 在群集中配置客户管理的 KEK 时,群集存储会针对 wrap 加密和解密对Key Vault执行 unwrap 请求。
  • KEK永远不会离开密钥保管库。 如果将密钥存储在Azure Key Vault托管 HSM 中,则永远不会离开该硬件。
  • Azure Storage使用与群集关联的托管标识进行身份验证。 它通过Microsoft Entra ID访问Azure Key Vault。

所需的权限

若要执行为专用群集预配和管理客户管理的密钥所需的群集相关作,需要以下权限:

行动 所需的权限或角色
创建专用群集 Microsoft.Resources/deployments/*Microsoft.OperationalInsights/clusters/write 权限
例如,由Log Analytics 参与者内置角色提供的功能
更改群集属性 Microsoft.OperationalInsights/clusters/write 权限,例如由“Log Analytics Contributor”内置角色提供
将工作区链接到群集 Microsoft.OperationalInsights/clusters/writeMicrosoft.OperationalInsights/workspaces/writeMicrosoft.OperationalInsights/workspaces/linkedservices/write 权限,例如由Log Analytics 参与者内置角色提供的权限为例
检查工作区链接状态 Microsoft.OperationalInsights/workspaces/read访问工作区的权限,例如,内置角色中的Log Analytics读取者
获取群集或检查群集的预配状态 Microsoft.OperationalInsights/clusters/read 权限,例如由 日志分析读取者内置角色 提供的权限
更新群集中的承诺层级或计费类型 Microsoft.OperationalInsights/clusters/write 权限,例如由“Log Analytics Contributor”内置角色提供
授予所需权限 具有*/write权限的所有者或贡献者角色,或者具有Microsoft.OperationalInsights/*权限的Log Analytics贡献者内置角色
解除群集与工作区的关联 Microsoft.OperationalInsights/workspaces/linkedServices/delete 权限,例如由“Log Analytics Contributor”内置角色提供
删除专用群集 Microsoft.OperationalInsights/clusters/delete 权限,例如由“Log Analytics Contributor”内置角色提供

客户管理密钥配置步骤

按照以下步骤在专用群集上配置客户管理的密钥:

  1. 创建或分配 Azure Key Vault KEK (存储密钥)
  2. 将专用群集的托管标识类型与 Key Vault 访问进行匹配
  3. 授予托管标识Key Vault的权限
  4. 使用密钥标识符详细信息更新专用群集
  5. 验证专用群集预配
  6. 将工作区链接到专用群集

创建或分配 Azure Key Vault KEK (存储密钥)

Azure密钥管理产品的 portfolio列出了可以使用的保管库和托管 HSM。

在专用群集所在的区域中创建或使用现有Azure Key Vault,或者计划其驻留位置。 将密钥生成或导入Azure Key Vault以用于日志加密。 必须将Azure Key Vault配置为可恢复,以保护密钥和对Azure Monitor中的数据的访问。 可以在Key Vault中的属性下验证此配置。 启用 软删除清除保护

重要

若要有效响应即将到期的密钥等Azure Key Vault事件,请通过 Azure Event Grid 设置通知。 密钥过期时,引入和查询不会受到影响,但无法更新群集中的密钥。 请按照以下步骤解决:

  1. 在 Azure 门户中的群集概述页中,在 JSON View 下标识群集的概述页中使用的密钥。
  2. 在Azure Key Vault中延长密钥过期日期。
  3. 使用活动密钥更新群集,最好使用版本值'',以始终自动使用最新版本。

软删除和清除保护设置的屏幕截图。

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

将专用群集的托管身份类型与 Key Vault 的访问权限相匹配。

专用群集使用其托管标识访问 Key Vault KEK 来加密数据。 专用群集的托管标识类型必须与Key Vault角色分配标识匹配,以允许数据加密和解密作。

identitytype属性配置为SystemAssignedUserAssigned,以创建群集

例如,下面是在请求正文中添加的值,用于创建具有系统分配的托管标识的群集:

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

注意

可以在创建群集后更改标识类型,而无需中断引入或查询,但有以下注意事项:

  • 不能同时更新群集的标识和密钥。 在连续两次操作中更新它们。
  • SystemAssigned 更新为 UserAssigned 时,在 Key Vault 中授予 UserAssign 标识权限,然后在专用群集中更新 identity
  • UserAssigned 更新为 SystemAssigned 时,在 Key Vault 中授予 SystemAssigned 标识权限,然后在专用群集中更新 identity

有关创建专用群集的详细信息,请参阅 创建和管理专用群集

向托管标识授予 Key Vault 权限

Key Vault有两种权限模型,用于授予对专用群集和基础存储的访问权限:Azure基于角色的访问控制(Azure RBAC - 推荐)和保管库访问策略(旧版)。

  1. 分配Azure RBAC (建议)

    若要添加角色分配,你必须具有一个拥有 Microsoft.Authorization/roleAssignments/writeMicrosoft.Authorization/roleAssignments/delete 权限的角色,例如用户访问管理员所有者

    1. 在 Azure 门户中打开密钥保管库,然后选择设置>访问配置>Azure 基于角色的访问控制应用
    2. 选择 转到访问控制(IAM),然后添加角色分配 Key Vault Crypto Service Encryption User
    3. 在“成员”选项卡中选择“托管标识”,然后选择相应标识对应的订阅,从而将该标识作为成员

    授予 Key Vault RBAC 权限的截图。

  2. 分配保管库访问策略(旧版)

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

    • 密钥权限 - 选择“ 获取>包装密钥 ”和 “解包密钥”。
    • 根据群集中使用的标识类型(系统或用户分配的托管标识)选择主体
      • 系统分配的托管标识:输入群集名称或群集主体 ID
      • 用户分配的托管标识 - 输入标识名称

    授予 Key Vault 访问策略权限的截图。

    需要 Get 权限来验证是否已将Key Vault配置为可恢复,以保护密钥以及访问Azure Monitor数据。

使用密钥标识符详细信息更新专用群集

群集的所有操作都需要 Microsoft.OperationalInsights/clusters/write 操作权限。 所有者或参与者角色(包括 */write 操作)可以授予此权限。 Log Analytics 贡献者角色(其中包括 Microsoft.OperationalInsights/* 操作)也授予此权限。

此步骤更新专用群集存储的密钥和版本,以便用于 AEKwrapunwrap

重要

  • 密钥轮换可以是自动的,也可以针对每个明确的密钥版本进行。 请参阅 密钥轮换 ,在更新专用群集中的密钥标识符详细信息之前确定合适的方法。
  • 专用群集更新不得在同一操作中包含标识和键标识符详细信息。 如果需要更新这两个方面,更新必须在两个连续操作中进行。
  • 如果仅启用或更改 CMK,请使用 REST API 而不是 CLI。 即使命令中不使用该属性,专用群集更新 CLI 也会向容量发送更新。 此更新触发 30 天的更改阈值或 500 GB 承诺层最低检查。

授予 Key Vault 权限的截图。

使用密钥标识符详细信息在群集中更新 KeyVaultProperties

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

空值

验证专用群集预配

验证群集预配状态是否为Succeeded,然后再将工作区链接到群集。 如果在预配之前链接工作区和引入数据,则会删除引入的数据,并且无法恢复。

更新专用群集并包括密钥标识符详细信息部分中所述,通过 CLI、PowerShell 或 REST API 验证预配状态。

重要

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

若要链接工作区,请按照 创建和管理专用群集中的过程作。

密钥吊销

重要

  • 若要撤销对数据的访问权限,请在Key Vault中禁用密钥或删除访问策略。
  • 将群集 identitytype 设置为 None 还会撤销对数据的访问权限,但不要使用此方法,因为你无法在不联系支持人员的情况下还原它。

群集的存储始终遵循密钥权限的更改,如果禁用密钥或删除访问策略,则会在一小时内或更早地不可用。 引入到链接工作区的新数据将被删除且不可恢复。 这些工作空间上的数据无法访问,并且查询失败。 只要群集和工作区不会被删除,以前引入的数据就保持不变。 数据保留策略控制无法访问的数据,并在达到保留期时将其清除。 过去 14 天内引入的数据和最近在查询中使用的数据也保存在热缓存(受 SSD 支持)中,以提高查询效率。 SSD 上的数据在密钥吊销作上被删除,并且无法访问。 群集存储尝试定期访问 Key Vault 以执行 wrapunwrap 操作。 启用密钥并 unwrap 成功后,SSD 数据将从专用群集存储重新加载。 数据引入和查询功能将在 30 分钟内恢复。

密钥轮换

密钥轮换具有两种模式:

  • 自动调整 - 在群集中更新 "keyVaultProperties" 并省略 "keyVersion" 属性,或将其设置为 ''。 存储会自动使用最新的密钥版本。
  • 显式密钥版本更新 - 更新 "keyVaultProperties" 属性,并在 "keyVersion" 属性中更新密钥版本。 密钥轮换需要显式更新群集中的 "keyVersion" 属性。 有关详细信息,请参阅更新群集的密钥标识符详细信息。 如果在Key Vault中生成新的密钥版本,但不更新群集中的密钥,则群集存储会继续使用以前的密钥。 如果在更新群集中的新密钥之前禁用或删除旧密钥,请输入 密钥吊销 状态。

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

用于保存的查询和日志搜索警报的客户管理密钥

Log Analytics中使用的查询语言具有表达性,并且可以在查询语法或注释中包含敏感信息。 受严格法规和合规性要求约束的组织必须使用客户管理的密钥来加密此类信息。 Azure Monitor使你能够在链接到工作区时,将已保存的查询、函数和日志搜索警报使用你自己的存储帐户中的密钥进行加密存储。

工作簿的客户管理密钥

通过使用 客户托管密钥用于查询和日志搜索警报中提到的注意事项,在工作簿“保存”操作中选择将内容保存到 Azure 存储帐户时,Azure Monitor 允许您将使用您的密钥加密的工作簿查询存储在自己的存储帐户中。

工作簿“保存”操作的屏幕截图。

注意

无论客户管理的密钥配置如何,在以下情况下,查询都会使用 Microsoft 密钥 (MMK) 进行加密:Azure 仪表板、Azure 逻辑应用、Azure 笔记本和自动化运行手册。

将存储帐户链接到保存的查询时,该服务会将保存的查询和日志搜索警报查询存储在存储帐户中。 通过控制存储帐户 静态加密策略,可以使用客户管理的密钥保护保存的查询和日志搜索警报。 你负责与该存储帐户相关的所有成本。

为保存的查询设置客户管理的密钥之前注意事项

  • 需要对工作区和存储帐户具有“写入”权限。
  • 存储帐户必须是 StorageV2,并且与Log Analytics工作区位于同一区域中。
  • 链接已保存查询的存储帐户时,将从工作区中删除现有已保存的查询和函数,以便隐私。 如果需要这些查询,请复制配置之前保存的现有查询和函数。 可以使用 PowerShell 或在工作区中的自动化导出模板时查看已保存的查询。
  • 保存在 查询包中的查询 不会存储在链接的存储帐户上,并且不能使用客户管理的密钥进行加密。 建议 保存为旧查询 ,以使用客户管理的密钥保护查询。
  • 链接存储帐户中保存的查询和函数是服务项目,其格式可能会更改。
  • 链接已保存查询的存储帐户时,不支持查询“历史记录”和“固定至仪表板”。
  • 可以将保存的查询和日志搜索警报查询连接到单个或多个存储帐户。
  • 若要使用密钥保持查询和功能加密,请使用客户管理的密钥配置链接的存储帐户。 此操作可以在创建存储帐户时完成,也可以稍后完成。

为保存的查询配置链接存储帐户

链接用于保存的查询和函数的存储帐户,以将保存的查询保留在存储帐户中。

注意

操作将保存的查询和函数从工作区转移到存储帐户中的一个表。 可以取消链接已保存查询的存储帐户,以将保存的查询和函数移回工作区。 如果在作后Azure门户中未显示已保存的查询或函数,请刷新浏览器。

空值

配置后,任何新的 已保存搜索 查询将保存在存储中。

为日志搜索警报查询配置链接存储帐户

为已保存日志警报查询设置客户管理的密钥之前注意事项

  • 警报查询作为 Blob 保存在存储帐户中。
  • 触发的日志搜索警报不包含搜索结果或警报查询。 使用 警报维度 获取触发警报的上下文。
  • 若要使用密钥保持查询和功能加密,请使用客户管理的密钥配置链接的存储帐户。 此操作可以在创建存储帐户时完成,也可以稍后完成。

链接用于“警报”的存储帐户,以在存储帐户中保留日志搜索警报查询。

空值

配置后,任何新的警报查询将保存在存储中。

注意事项和限制

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

  • 每个区域和订阅最多可以有七个预留集群(活动的或最近删除的)。

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

  • 您可以在 30 天内对特定工作区执行最多两个工作区链接操作。

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

  • 群集更新不应在同一操作中包含标识和密钥标识符的详细信息。 若要更新这两个操作,请使用两个连续的操作。

  • 目前,Lockbox 在中国不可用。

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

  • 如果创建群集并收到错误“区域名称不支持群集双重加密”,则仍可以通过在 REST 请求正文中添加 "properties": {"isDoubleEncryptionEnabled": false} 来创建群集,而无需双重加密。

  • 创建群集后,无法更改双重加密设置。

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

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

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

  • Azure Key Vault、群集和工作区必须位于同一区域和同一 Microsoft Entra 租户中,但它们可以位于不同的订阅中。

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

  • 如果您的 Key Vault 位于 Private-Link(专用链接)虚拟网络中,则无法将用户分配的托管标识与客户管理的密钥一起使用。 在此应用场景中,使用系统分配的托管标识。

故障排除

  • 每个密钥保管库的可用性行为:

    • 在正常引入操作期间,专用群集存储会在短时间内缓存AEK,并会定期返回到 Key Vaultunwrap

    • 在Key Vault连接错误期间,专用群集存储通过允许密钥在问题期间保留在缓存中以克服故障和间歇性可用性来处理暂时性错误(超时、连接故障、DNS 故障)。 查询和引入功能将继续运行而不会中断。

  • Key Vault访问频率 - 集群存储访问 Key Vault 用于wrapunwrap操作的频率介于 6 到 60 秒之间。

  • 如果在群集处于预配状态或更新状态时更新群集,则更新会失败。

  • 如果在创建群集时遇到冲突错误,可能是因为在过去的 14 天内删除了一个具有相同名称的群集,其名称仍被保留。 删除后的群集名称在删除后 14 天内可用。

  • 如果工作区已链接到另一个群集,则将工作区链接到群集将失败。

  • 如果创建群集并立即指定 KeyVaultProperties,则操作可能会失败,直到分配标识给群集并授予密钥库。

  • 如果更新现有的群集并且 Key Vault 中缺少 KeyVaultPropertiesGet 密钥访问策略,操作将失败。

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

  • 如果在Key Vault轮换密钥,并且不会更新群集中的新密钥标识符详细信息,群集会继续使用以前的密钥,并且数据将不可访问。 更新群集中的新密钥标识符详细信息以恢复数据引入和查询功能。 使用 '' 表示法更新密钥版本,以确保专用群集存储始终自动使用最新的密钥版本。

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

  • 错误消息

    群集更新

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

    群集获取

    • 404 - 找不到群集,群集可能已被删除。 如果尝试使用该名称创建群集但发生冲突,则该群集正处于删除过程中。