Aktuell teste ich zuhause eine Anwendung, die in der AWS-Infrastruktur gehostet wird, mit JMeter.  Bei dem für jede ausgelöste Anfrage ein von AWS signierter Header mit der Anforderung zur Validierung der Anforderung auf der IAM-Ebene in AWS übergeben werden muss. Den secret key habe ich in der AWS Konsole erstellt und er liegt mir vor.

Gibt es in JMeter einen Beanshell-Code, der beim Generieren einer AWS-Signatur mithilfe des Zugriffsschlüssels und des secret keys für jede Anforderung in JMeter hilft? Aber sicher gibt es dazu passende Hilfe.

Der Code ist auf der AWS-Dokumentwebsite verfügbar. Schaut euch dazu Deriving the Signing Key with Java an:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
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; }
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;
}

HINWEIS

Beachtet trotzdem, dass ab JMeter Version 3.1 empfohlen wird, JSR223 Elements und Groovy für das Scripting zu verwenden, da es moderner ist (unterstützt alle neuen Java SDK-Funktionen), eine Menge „Syntax Sugar“ zusätzlich zum „normalen“ Java SDK hat und Groovy-Leistung ist im Vergleich zu Beanshell, JavaScript und anderen verfügbaren Optionen viel besser.