你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本文中,你将了解如何将 Azure 负载测试与需要进行身份验证的应用程序终结点结合使用。 根据应用程序实现的不同,可以使用访问令牌、用户凭据、托管标识或客户端证书对请求进行身份验证。
Azure 负载测试支持对经过身份验证的终结点使用以下选项:
先决条件
使用共享机密或凭据进行身份验证
在这种情况下,应用程序终结点要求你使用共享机密(例如访问令牌、API 密钥或用户凭据)进行身份验证。
下图显示了如何在负载测试中使用共享机密或凭据向应用程序终结点进行身份验证。
使用共享密钥或用户凭据进行身份验证的流程如下:
- 安全存储机密或凭据,例如存储在 Azure 密钥保管库或 CI/CD 机密存储区。
- 在负载测试配置中引用机密。
- 对于基于 JMeter 的测试,请使用
GetSecret
函数检索机密值。 对于基于 Locust 的测试,请使用getenv
函数检索机密。 将机密值传递给应用程序请求。
安全存储机密
为了避免在测试脚本中存储和披露安全信息,可以在 Azure Key Vault 或 CI/CD 机密存储中安全地存储机密。
可以通过以下两种方式之一在机密存储区添加安全信息:
在 Azure 密钥保管库中添加机密信息。 按照使用机密参数化负载测试中的步骤存储机密并授权负载测试资源读取其值。
将机密信息添加为 CI/CD 中的机密(GitHub Actions 机密或 Azure Pipelines 机密变量)。
在负载测试配置中引用机密
在 JMeter 测试脚本中检索机密值之前,必须在负载测试配置中引用该机密。
在 Azure 门户中,可以引用存储在 Azure 密钥保管库中的机密。 若要在 Azure 门户中添加和配置负载测试机密,请执行以下操作:
在 JMeter 脚本中检索并使用机密值
现在,可以使用 GetSecret
自定义函数检索 JMeter 脚本中的机密值,并将其传递给应用程序请求。 例如,使用 Authorization
HTTP 标头将 OAuth 令牌传递给请求。
创建一个用户定义的变量,该变量使用自定义函数
GetSecret
来检索机密值:GetSecret
函数会将从 Azure 密钥保管库或 CI/CD 机密存储区中检索值的过程抽象化。更新 JMeter 采样器组件以在请求中传递机密。
例如,要提供 OAuth2 访问令牌,可以通过添加
Authorization
来配置HTTP Header Manager
HTTP 标头:
检索和使用 Locust 脚本中的机密值
现在可以检索 Locust 脚本中的机密值,并将其传递给应用程序请求。 例如,使用 Authorization
HTTP 标头将 OAuth 令牌传递给请求。
负载测试配置中配置的机密可作为环境变量进行访问。
- 使用负载测试配置中指定的机密 Name 通过机密值初始化变量。
my_secret = os.getenv("appToken")
- 引用测试脚本中的变量,以使用存储在 Azure KeyVault 中的机密值。
使用客户端证书进行身份验证
在这种情况下,应用程序终结点要求你使用客户端证书进行身份验证。 Azure 负载测试支持公钥证书标准 #12 (PKCS12) 类型的证书。 还可以在负载测试 中使用多个客户端证书 。
下图显示了如何在负载测试中使用客户端证书对应用程序终结点进行身份验证。
使用客户端证书进行身份验证的流程如下:
- 将客户端证书安全存储在 Azure 密钥保管库中。
- 在负载测试配置中引用该证书。
- 对于基于 JMeter 的测试,Azure 负载测试以透明方式将证书传递到所有应用程序。 对于基于 Locust 的测试,可以在测试脚本中检索证书并将其传递给请求。
将客户端证书存储在 Azure 密钥保管库中
为避免与 JMeter 脚本一起存储和披露客户端证书,请将证书存储在 Azure 密钥保管库中。
按照导入证书中的步骤将证书存储在 Azure 密钥保管库中。
重要
Azure 负载测试仅支持 PKCS12 证书。 以 PFX 文件格式上传客户端证书。
授予对 Azure Key Vault 的访问权限
在 Azure Key Vault 中存储负载测试机密或证书时,负载测试资源使用托管标识来访问密钥保管库。 配置管理标识后,需要向负载测试资源的托管标识授予从密钥保管库读取这些值的权限。
若要授予 Azure 负载测试资源从 Azure Key Vault 读取机密或证书的权限,请执行以下作:
在 Azure 门户中,转到 Azure Key Vault 资源。
如果你没有密钥保管库,请按照 Azure 密钥保管库快速入门中的说明创建一个。
在左侧窗格中,选择“访问策略”,然后选择“+ 创建”。
在“权限”选项卡上的“机密权限”下,选择“获取”,然后选择“下一步”。
注意
Azure 负载测试将证书作为机密检索,以确保证书的私钥可用。
在“主体”选项卡上,搜索并选择负载测试资源的托管标识,然后选择“下一步”。
如果使用系统分配的托管标识,托管标识的名称与 Azure 负载测试资源的名称匹配。
再次选择“下一步”。
测试运行时,与负载测试资源关联的托管标识现在可以从密钥保管库读取负载测试的机密或证书。
在负载测试配置中引用证书
若要将客户端证书传递给应用程序请求,需要在负载测试配置中引用该证书。
要将客户端证书添加到 Azure 门户中的负载测试:
导航到 Azure 门户中的负载测试资源。 如果你还没有负载测试,请使用 JMeter 脚本创建一个新的负载测试。
在左侧窗格中,选择“测试”以查看负载测试列表。
从列表中选择你的测试,然后选择“编辑”以编辑负载测试配置。
在“参数”选项卡上,输入证书的详细信息。
字段 值 名称 证书的名称。 值 匹配证书的 Azure 密钥保管库机密标识符。 选择“应用”以保存负载测试配置更改。
运行负载测试时,Azure 负载测试会从 Azure 密钥保管库中检索客户端证书,并自动将其注入每个 JMeter Web 请求中。
对于基于 Locust 的测试,可以检索证书并将其用于测试脚本。 负载测试配置中配置的证书在 ALT_CERTIFICATES_DIR
中可用。
cert_dir = os.getenv("ALT_CERTIFICATES_DIR")
cert_file = open(os.path.join(cert_dir), "cert_name_in_keyvault.pfx")
使用托管标识进行身份验证
在此方案中,应用程序终结点要求 使用托管标识进行身份验证。 可以使用系统分配的托管标识和用户分配的托管标识。
使用托管标识进行身份验证的流为:
- 将目标终结点所标识的托管标识分配给 Azure 负载测试资源。
- 在负载测试配置中选择托管标识。
需要设置负载测试脚本,以便 使用托管标识提取访问令牌 ,并使用令牌对目标终结点的请求进行身份验证。 例如,可以通过对 Azure 实例元数据服务(IMDS)终结点的 HTTP REST 调用获取令牌,然后使用 HTTP 标头将令牌传递给请求 Authorization
。
分配托管标识
将有权访问目标终结点的托管标识分配给 Azure 负载测试资源。 运行测试时,Azure 负载测试会将此标识分配给引擎实例。 这可确保使用托管标识提取访问令牌的请求成功。
可以使用系统分配的托管标识或用户分配的托管标识,
若要使用系统分配的托管标识,请先 将系统分配的托管标识分配给 Azure 负载测试资源。 启用它后,请在目标终结点上为此标识提供所需的 RBAC 权限。
若要使用用户分配的托管标识,请先 将用户分配的标识分配给 Azure 负载测试资源。 如果此身份在目标端点上没有所需的 RBAC 权限,请提供必要的权限。 如果测试脚本使用多个用户分配的多个标识,请将多个标识分配给资源并确保他们具有所需的 RBAC 权限。
在负载测试配置中选择托管标识
在 Azure 负载测试中创建或编辑测试时,请选择所需的托管标识。
若要在 Azure 门户中选择和配置用于身份验证的托管标识,请执行以下作:
重要
使用托管标识进行身份验证时,不会启用跨区域的负载分布。
相关内容
详细了解如何参数化负载测试。
详细了解 如何在负载测试中使用多个证书。