你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Chaos Studio 中的权限和安全性
使用 Azure Chaos Studio,可以通过系统性地将故障注入 Azure 资源来提高服务的复原能力。 故障注入是提高服务复原能力的高效方法,但也可能带来风险。 在应用程序中造成故障所产生的影响,可能比恶意行动者最初有针对性地找到潜入你应用程序的机会的影响还要大。
Chaos Studio 提供一个可靠的权限模型,可以防止无意中运行或者由恶意行动者运行故障。 本文介绍如何使用 Chaos Studio 来保护作为故障注入目标的资源。
如何使用 Chaos Studio 限制注入故障的能力?
Chaos Studio 有三个安全级别,可帮助你控制针对资源注入故障的方式和时机:
首先,混沌试验是部署到区域、资源组和订阅的 Azure 资源。 用户必须拥有适当的 Azure 资源管理器权限才能创建、更新、启动、取消、删除或查看试验。
每个权限都是一个资源管理器操作,可按粒度分配给某个标识,或分配为拥有通配符权限的角色的一部分。 例如,Azure 中的参与者角色在分配的范围内拥有
*/write
权限,包括Microsoft.Chaos/experiments/write
权限。尝试控制针对资源注入故障的能力时,要限制的最重要操作是
Microsoft.Chaos/experiments/start/action
。 此操作启动一个混沌试验,用于注入故障。其次,混沌试验具有可对资源执行故障的系统分配的托管标识和用户分配的托管标识。 如果选择对试验使用系统分配的托管标识,则会在 Microsoft Entra 租户中创建试验时创建标识。 用户分配的托管标识可用于任意数量的试验。
在混沌试验中,可以在选择系统分配的托管标识或用户分配的托管标识时选择启用自定义角色分配。 启用此功能后,Chaos Studio 可以创建一个包含任何必要的试验操作功能的自定义角色并将其分配给试验的标识(该角色在选择标识时不存在)。 如果混沌试验使用用户分配的托管标识,则在删除试验后,Chaos Studio 分配给试验标识的所有自定义角色都将保留。
如果选择手动授予试验权限,则必须向其标识授予对所有目标资源的适当权限。 如果试验标识对某个资源没有适当的权限,它将无法针对该资源执行故障。
最后,每个资源必须作为启用了相应功能的目标加入 Chaos Studio。 如果正在执行的故障的目标或功能不存在,则试验将会失败且不影响资源。
用户分配的托管标识
混沌试验可以利用用户分配的托管标识来获取足够的权限,以在试验的目标资源上注入错误。 此外,用户分配的托管标识可用于 Chaos Studio 中任意数量的试验。 若要利用此功能,必须:
- 首先在托管标识服务中创建用户分配的托管标识。 此时,可以分配用户分配的托管标识所需的权限来运行混沌试验。
- 其次,在创建混沌试验时,请从订阅中选择用户分配的托管标识。 可以选择在此步骤中启用自定义角色分配。 启用此功能后,系统会根据试验中包含的故障向你选择的标识授予任何所需权限。
- 第三,将所有故障添加到混沌试验后,请检查标识配置是否包含成功运行混沌试验所需的所有操作。 如果没有,请联系系统管理员以访问或编辑试验的故障选择。
代理身份验证
运行基于代理的故障时,必须在虚拟机 (VM) 或虚拟机规模集上安装 Chaos Studio 代理。 代理使用用户分配的托管标识向 Chaos Studio 进行身份验证,并使用代理配置文件来与特定的 VM 资源建立关系。
为基于代理的故障加入 VM 或虚拟机规模集时,需要先创建代理目标。 针对用于身份验证的用户分配的托管标识,代理目标必须具有其引用。 代理目标包含代理配置文件 ID,该 ID 是在安装代理时作为配置提供的。 代理配置文件对于每个目标是唯一的,而目标对于每个资源是唯一的。
Azure 资源管理器操作和角色
Chaos Studio 具有以下操作:
操作 | 说明 |
---|---|
Microsoft.Chaos/targets/[Read,Write,Delete] | 获取、创建、更新或删除目标。 |
Microsoft.Chaos/targets/capabilities/[Read,Write,Delete] | 获取、创建、更新或删除功能。 |
Microsoft.Chaos/locations/targetTypes/Read | 获取所有目标类型。 |
Microsoft.Chaos/locations/targetTypes/capabilityTypes/Read | 获取所有功能类型。 |
Microsoft.Chaos/experiments/[Read,Write,Delete] | 获取、创建、更新或删除混沌试验。 |
Microsoft.Chaos/experiments/start/action | 启动混沌试验。 |
Microsoft.Chaos/experiments/cancel/action | 停止混沌试验。 |
Microsoft.Chaos/experiments/executions/Read | 获取混沌试验运行的执行状态。 |
Microsoft.Chaos/experiments/executions/getExecutionDetails/action | 获取混沌试验运行的执行详细信息(每个操作的状态和错误)。 |
若要按粒度分配这些权限,可以创建自定义角色。
网络安全性
用户与 Chaos Studio 之间的所有交互都是通过 Azure 资源管理器发生的。 如果用户启动某个试验,该试验可以根据故障与除资源管理器以外的终结点进行交互:
- 服务导向的故障:大多数服务导向的故障是通过 Azure 资源管理器执行的,不需要任何已列入允许列表的网络终结点。
- 服务导向的 AKS Chaos Mesh 故障:使用 Chaos Mesh 的 Azure Kubernetes 服务的服务导向故障需要访问 AKS 群集的 Kubernetes API 服务器。
- 可在此处了解如何仅限一组 IP 范围访问 AKS 网络。 若要获取 Chaos Studio 的 IP 范围,可使用服务标记发现 API 或可下载的 JSON 文件来查询
ChaosStudio
服务标记。 - 目前,如果 AKS 群集已禁用本地帐户,则 Chaos Studio 无法执行 Chaos Mesh 故障。
- 可在此处了解如何仅限一组 IP 范围访问 AKS 网络。 若要获取 Chaos Studio 的 IP 范围,可使用服务标记发现 API 或可下载的 JSON 文件来查询
- 基于代理的故障:若要使用基于代理的故障,代理需要访问 Chaos Studio 代理服务。 VM 或虚拟机规模集必须能够出站访问代理服务终结点,这样才能使代理成功建立连接。 代理服务终结点为
https://acs-prod-<region>.chaosagent.trafficmanager.net
。 必须将<region>
占位符替换为部署 VM 的区域。 例如,https://acs-prod-eastus.chaosagent.trafficmanager.net
表示美国东部的 VM。 - 基于代理的专用网络:Chaos Studio 代理现在支持专用网络。 请参阅 Chaos Agent 的专用网络。
服务标记
服务标记是一组 IP 地址前缀,可以分配给网络安全组的入站和出站规则。 它无需任何干预即可自动处理 IP 地址前缀组的更新。 由于服务标记只是初步启用 IP 地址筛选,因此单靠服务标记不足以确保流量安全。
你可以使用服务标记显式地允许来自 Chaos Studio 的入站流量,而不需要知道平台的 IP 地址。 Chaos Studio 的服务标记为 ChaosStudio
。
服务标记的限制在于,它们只能与具有公共 IP 地址的应用程序一起使用。 如果资源只有专用 IP 地址,则服务标记无法将流量路由到该地址。
用例
Chaos Studio 对多个用例使用服务标记。
- 若要使用基于代理的故障,客户虚拟机中运行的 Chaos Studio 代理必须与 Chaos Studio 后端服务进行通信。 使用服务标记,客户可以将从虚拟机到 Chaos Studio 服务的流量置于允许列表中。
- 若要使用某些需要
management.azure.com
命名空间外部的通信的故障,例如 Azure Kubernetes 服务的 Chaos Mesh 故障,则流量从 Chaos Studio 服务流向客户资源。 使用服务标记,客户可以将从 Chaos Studio 服务到目标资源的流量置于允许列表中。 - 客户可以将其他服务标记用作网络安全组规则故障的一部分来影响流向/来自某些 Azure 服务的流量。
通过在安全规则中指定 ChaosStudio
服务标记,可以允许或拒绝 Chaos Studio 服务的流量,而无需指定个体 IP 地址。
安全注意事项
在评估和使用服务标记时,需要注意的是,它们不能提供对个体 IP 地址的细粒度控制,不应当只依赖它们来保护网络安全。 它们不能替代适当的网络安全措施。
数据加密
Chaos Studio 默认会加密所有数据。 Chaos Studio 仅接受系统属性的输入,例如托管标识对象 ID、试验/步骤/分支名称和故障参数。 例如,在网络断开连接故障中要阻止的网络端口范围。
不应使用这些属性来存储敏感数据,例如付款信息或密码。 有关 Chaos Studio 如何保护数据的详细信息,请参阅 Azure 客户数据保护。
客户密码箱
通过密码箱,可以在支持请求期间批准或拒绝 Microsoft 工程师的试验数据访问请求。
如果启用了密码箱,则可以为混沌试验信息启用密码箱,并在订阅级别向客户授予数据访问权限。
了解有关 Microsoft Azure 客户密码箱详细信息
后续步骤
了解如何保护混沌试验后,接下来可以: