你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 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 租户中生成。 用户分配的托管标识可用于任意数量的试验。
在 Azure 门户中创建混沌试验时,可以选择使用 Azure 内置角色或自定义角色来启用自动角色分配,此操作适用于系统分配或用户分配的托管标识选择。 启用此功能后,Chaos Studio 可以创建一个包含任何必要的试验操作功能的Azure 内置角色或自定义角色并将其分配给试验的标识(该角色在选择标识时不存在)。 如果混沌试验使用用户分配的托管标识,则在删除试验后,Chaos Studio 分配给试验标识的所有自定义角色都将保留。
如果选择手动授予试验权限,则必须向其标识授予对所有目标资源的适当权限。 如果试验标识对某个资源没有适当的权限,它将无法针对该资源执行故障。
最后,每个资源必须作为启用了相应功能的目标加入 Chaos Studio。 如果正在执行的故障的目标或功能不存在,则试验将会失败且不影响资源。
用户分配的托管标识
混沌试验可以利用用户分配的托管标识来获取足够的权限,以在试验的目标资源上注入错误。 此外,用户分配的托管标识可用于 Chaos Studio 中任意数量的试验。 若要利用此功能,必须:
- 首先在托管标识服务中创建用户分配的托管标识。 此时,可以分配用户分配的托管标识所需的权限来运行混沌试验。
- 其次,在 Azure 门户中创建混沌试验时,请从订阅中选择用户分配的托管标识。 可以在此步骤选择 使用 Azure 内置角色或自定义角色启用自动角色分配。 启用此功能后,系统会根据试验中包含的故障向你选择的标识授予任何所需权限。
- 第三,将所有故障添加到混沌试验后,请检查标识配置是否包含成功运行混沌试验所需的所有操作。 如果没有,请联系系统管理员以访问或编辑试验的故障选择。
代理身份验证
运行基于代理的故障时,必须在虚拟机 (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 | 获取混沌试验运行的执行详细信息(每个操作的状态和错误)。 |
若要按粒度分配这些权限,可以创建自定义角色。 也可以使用以下 Azure 内置角色来管理对 Chaos Studio 的访问权限:
- Chaos Studio 试验参与者:可以创建、运行和查看试验详细信息和载入目标,以及管理功能。
- Chaos Studio 操作员:可以运行和查看试验的详细信息,但无法创建试验或管理目标和功能。
- Chaos Studio 阅读器:可以查看目标、能力、实验和实验详细信息。
- Chaos Studio 目标参与者:可以载入目标和管理功能,但无法创建、运行或查看试验的详细信息。
有关这些执行 Chaos Studio 操作的内置角色的详细信息,请参阅 RBAC DevOps 角色。
网络安全
用户与 Chaos Studio 之间的所有交互都是通过 Azure 资源管理器发生的。 如果用户启动某个试验,该试验可以根据故障与除资源管理器以外的终结点进行交互:
- 服务导向的故障:大多数服务导向的故障是通过 Azure 资源管理器执行的,不需要任何已列入允许列表的网络终结点。
- 服务导向的 AKS Chaos Mesh 故障:使用 Chaos Mesh 的 Azure Kubernetes 服务的服务导向故障需要访问 AKS 群集的 Kubernetes API 服务器。 授权 AKS 群集的 Chaos Studio IP 地址中介绍了添加所需 IP 的几种方法。
- 基于代理的故障:若要使用基于代理的故障,代理需要访问 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 客户密码箱详细信息
后续步骤
既然您已经了解如何保护您的混沌实验,现在您就可以: