在 JMeter 中生成 AWS 签名

Generating AWS signature in JMeter

我正在使用 JMeter 工具测试托管在 AWS 基础设施上的应用程序,其中触发的每个请求都需要将 AWS 签名 header 与请求一起传递,以在 AWS 的 IAM 级别验证请求.我拥有与在 AWS 控制台中创建的用户角色相关的访问密钥和密钥。

JMeter 中是否有可用的 beanshell 代码来帮助使用 JMeter 中的每个请求的访问密钥和密钥生成 AWS 签名?

该代码可在 AWS 文档网站上获得,例如,请参阅 Deriving the Signing Key with Java。这是以防万一的最小清单:

static byte[] HmacSHA256(String data, byte[] key) throws Exception {
    String algorithm="HmacSHA256";
    Mac mac = Mac.getInstance(algorithm);
    mac.init(new SecretKeySpec(key, algorithm));
    return mac.doFinal(data.getBytes("UTF8"));
}

static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName) throws Exception {
    byte[] kSecret = ("AWS4" + key).getBytes("UTF8");
    byte[] kDate = HmacSHA256(dateStamp, kSecret);
    byte[] kRegion = HmacSHA256(regionName, kDate);
    byte[] kService = HmacSHA256(serviceName, kRegion);
    byte[] kSigning = HmacSHA256("aws4_request", kService);
    return kSigning;
}

请注意 starting from JMeter version 3.1 it is recommended to use JSR223 Elements and Groovy language for scripting as it is more modern (supports all new Java SDK features), has a lot of "syntax sugar" on top of "normal" Java SDK and Groovy performance is much better comparing to Beanshell, JavaScript and other available options. See Apache Groovy - Why and How You Should Use It 文章了解更多详情。