<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article HTTP Monitors: How to sign a request for AWS Signature Version 4 in Troubleshooting</title>
    <link>https://community.dynatrace.com/t5/Troubleshooting/HTTP-Monitors-How-to-sign-a-request-for-AWS-Signature-Version-4/ta-p/219868</link>
    <description>&lt;H2&gt;Summary&lt;/H2&gt;
&lt;DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Dynatrace &lt;STRONG&gt;HTTP Monitors&lt;/STRONG&gt; do not currently provide an out‑of‑the‑box option for &lt;STRONG&gt;AWS Signature Version 4 (SigV4) authentication&lt;/STRONG&gt;.&lt;BR /&gt;When monitoring AWS services that require signed API requests, you can use a &lt;STRONG&gt;pre‑execution script&lt;/STRONG&gt; to generate a signed &lt;STRONG&gt;Authorization header&lt;/STRONG&gt; for your HTTP Monitor request.&lt;/DIV&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;This article explains how to &lt;STRONG&gt;sign HTTP Monitor requests using AWS Signature Version 4&lt;/STRONG&gt; in Dynatrace Synthetic Monitoring.&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;BR /&gt;You can find more information on how to c&lt;SPAN&gt;reate a signed AWS API request, using&amp;nbsp;&lt;/SPAN&gt;AWS Signature Version 4, &lt;A href="https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html" target="_blank"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;LI-TOC indent="15" liststyle="disc" maxheadinglevel="2"&gt;&lt;/LI-TOC&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;
&lt;H2&gt;When Do You Need AWS Signature Version 4 with HTTP Monitors?&lt;/H2&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;You need to sign HTTP Monitor requests with &lt;STRONG&gt;AWS Signature Version 4&lt;/STRONG&gt; when:&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Calling AWS APIs that require authenticated requests&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Monitoring AWS services protected by SigV4&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Validating AWS endpoints from Dynatrace Synthetic Monitoring&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;
&lt;H2&gt;How to Sign an HTTP Monitor Request Using AWS Signature Version 4&lt;/H2&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Dynatrace supports &lt;A href="https://docs.dynatrace.com/docs/observe/digital-experience/synthetic-monitoring/http-monitors-classic/pre-and-post-scripting-for-http-monitors-classic#define-pre-and-post-execution-scripts" target="_self"&gt;&lt;STRONG&gt;pre‑execution scripts&lt;/STRONG&gt;&lt;/A&gt; for HTTP Monitors, which allow you to modify requests before execution.&lt;BR /&gt;This capability can be used to dynamically generate a signed AWS Authorization header.&lt;/DIV&gt;
&lt;H3&gt;High‑level approach&lt;/H3&gt;
&lt;OL&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Create an &lt;STRONG&gt;HTTP Monitor&lt;/STRONG&gt; for the AWS endpoint you want to monitor.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Enable a &lt;STRONG&gt;pre‑execution script&lt;/STRONG&gt; for the request.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Use a JavaScript snippet to calculate and inject the &lt;STRONG&gt;AWS Signature Version 4 Authorization header&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Update the script with your AWS credentials and request details.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Save and test the monitor.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;&amp;nbsp;&lt;/H2&gt;
&lt;H2&gt;Required Configuration&lt;/H2&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;To successfully generate a signed request, ensure the following values are provided in the pre‑execution script:&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;&lt;STRONG&gt;Access Key&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;&lt;STRONG&gt;Secret Key&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;&lt;STRONG&gt;Identity ID&lt;/STRONG&gt; (if applicable)&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;&lt;STRONG&gt;Target hostname&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;All required HTTP headers for the AWS API request&lt;/LI&gt;
&lt;/UL&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;Credentials can be sourced from:&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;A previous request&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;The &lt;STRONG&gt;Dynatrace Credential Vault&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;H2&gt;&amp;nbsp;&lt;/H2&gt;
&lt;DIV&gt;
&lt;H2&gt;Pre‑Execution Script for AWS Signature Version 4&lt;/H2&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;The following JavaScript snippet generates a signed &lt;STRONG&gt;Authorization header&lt;/STRONG&gt; for an AWS HTTP request using &lt;STRONG&gt;AWS Signature Version 4&lt;/STRONG&gt;.&lt;/DIV&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;&lt;span class="lia-unicode-emoji" title=":locked_with_key:"&gt;🔐&lt;/span&gt; This script follows the AWS SigV4 signing process as documented by AWS.&lt;/DIV&gt;
&lt;/BLOCKQUOTE&gt;
&lt;/DIV&gt;
&lt;LI-CODE lang="markup"&gt;/*
This code generates a signed Authorization header for an HTTP request for AWS
See the following for how to sign a request for AWS Signature Version 4:
https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
 */

// CryptoJS rollup code for HMACSha256 and Sha256
var CryptoJS=CryptoJS||function(h,s){var f={},g=f.lib={},q=function(){},m=g.Base={extend:function(a){q.prototype=this;var c=new q;a&amp;amp;&amp;amp;c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&amp;amp;&amp;amp;(this[c]=a[c]);a.hasOwnProperty("toString")&amp;amp;&amp;amp;(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},r=g.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||k).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e&amp;lt;a;e++)c[b+e&amp;gt;&amp;gt;&amp;gt;2]|=(d[e&amp;gt;&amp;gt;&amp;gt;2]&amp;gt;&amp;gt;&amp;gt;24-8*(e%4)&amp;amp;255)&amp;lt;&amp;lt;24-8*((b+e)%4);else if(65535&amp;lt;d.length)for(e=0;e&amp;lt;a;e+=4)c[b+e&amp;gt;&amp;gt;&amp;gt;2]=d[e&amp;gt;&amp;gt;&amp;gt;2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c&amp;gt;&amp;gt;&amp;gt;2]&amp;amp;=4294967295&amp;lt;&amp;lt;32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d&amp;lt;a;d+=4)c.push(4294967296*h.random()|0);return new r.init(c,a)}}),l=f.enc={},k=l.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b&amp;lt;a;b++){var e=c[b&amp;gt;&amp;gt;&amp;gt;2]&amp;gt;&amp;gt;&amp;gt;24-8*(b%4)&amp;amp;255;d.push((e&amp;gt;&amp;gt;&amp;gt;4).toString(16));d.push((e&amp;amp;15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b&amp;lt;c;b+=2)d[b&amp;gt;&amp;gt;&amp;gt;3]|=parseInt(a.substr(b,2),16)&amp;lt;&amp;lt;24-4*(b%8);return new r.init(d,c/2)}},n=l.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b&amp;lt;a;b++)d.push(String.fromCharCode(c[b&amp;gt;&amp;gt;&amp;gt;2]&amp;gt;&amp;gt;&amp;gt;24-8*(b%4)&amp;amp;255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b&amp;lt;c;b++)d[b&amp;gt;&amp;gt;&amp;gt;2]|=(a.charCodeAt(b)&amp;amp;255)&amp;lt;&amp;lt;24-8*(b%4);return new r.init(d,c)}},j=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},u=g.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&amp;amp;&amp;amp;(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var g=0;g&amp;lt;a;g+=e)this._doProcessBlock(d,g);g=d.splice(0,a);c.sigBytes-=b}return new r.init(g,b)},clone:function(){var a=m.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});g.Hasher=u.extend({cfg:m.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){u.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&amp;amp;&amp;amp;this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(c,d){return(new a.init(d)).finalize(c)}},_createHmacHelper:function(a){return function(c,d){return(new t.HMAC.init(a,d)).finalize(c)}}});var t=f.algo={};return f}(Math);(function(h){for(var s=CryptoJS,f=s.lib,g=f.WordArray,q=f.Hasher,f=s.algo,m=[],r=[],l=function(a){return 4294967296*(a-(a|0))|0},k=2,n=0;64&amp;gt;n;){var j;a:{j=k;for(var u=h.sqrt(j),t=2;t&amp;lt;=u;t++)if(!(j%t)){j=!1;break a}j=!0}j&amp;amp;&amp;amp;(8&amp;gt;n&amp;amp;&amp;amp;(m[n]=l(h.pow(k,0.5))),r[n]=l(h.pow(k,1/3)),n++);k++}var a=[],f=f.SHA256=q.extend({_doReset:function(){this._hash=new g.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],j=b[3],h=b[4],m=b[5],n=b[6],q=b[7],p=0;64&amp;gt;p;p++){if(16&amp;gt;p)a[p]=c[d+p]|0;else{var k=a[p-15],l=a[p-2];a[p]=((k&amp;lt;&amp;lt;25|k&amp;gt;&amp;gt;&amp;gt;7)^(k&amp;lt;&amp;lt;14|k&amp;gt;&amp;gt;&amp;gt;18)^k&amp;gt;&amp;gt;&amp;gt;3)+a[p-7]+((l&amp;lt;&amp;lt;15|l&amp;gt;&amp;gt;&amp;gt;17)^(l&amp;lt;&amp;lt;13|l&amp;gt;&amp;gt;&amp;gt;19)^l&amp;gt;&amp;gt;&amp;gt;10)+a[p-16]}k=q+((h&amp;lt;&amp;lt;26|h&amp;gt;&amp;gt;&amp;gt;6)^(h&amp;lt;&amp;lt;21|h&amp;gt;&amp;gt;&amp;gt;11)^(h&amp;lt;&amp;lt;7|h&amp;gt;&amp;gt;&amp;gt;25))+(h&amp;amp;m^~h&amp;amp;n)+r[p]+a[p];l=((e&amp;lt;&amp;lt;30|e&amp;gt;&amp;gt;&amp;gt;2)^(e&amp;lt;&amp;lt;19|e&amp;gt;&amp;gt;&amp;gt;13)^(e&amp;lt;&amp;lt;10|e&amp;gt;&amp;gt;&amp;gt;22))+(e&amp;amp;f^e&amp;amp;g^f&amp;amp;g);q=n;n=m;m=h;h=j+k|0;j=g;g=f;f=e;e=k+l|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+j|0;b[4]=b[4]+h|0;b[5]=b[5]+m|0;b[6]=b[6]+n|0;b[7]=b[7]+q|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;d[e&amp;gt;&amp;gt;&amp;gt;5]|=128&amp;lt;&amp;lt;24-e%32;d[(e+64&amp;gt;&amp;gt;&amp;gt;9&amp;lt;&amp;lt;4)+14]=h.floor(b/4294967296);d[(e+64&amp;gt;&amp;gt;&amp;gt;9&amp;lt;&amp;lt;4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=q.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=q._createHelper(f);s.HmacSHA256=q._createHmacHelper(f)})(Math);(function(){var h=CryptoJS,s=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(f,g){f=this._hasher=new f.init;"string"==typeof g&amp;amp;&amp;amp;(g=s.parse(g));var h=f.blockSize,m=4*h;g.sigBytes&amp;gt;m&amp;amp;&amp;amp;(g=f.finalize(g));g.clamp();for(var r=this._oKey=g.clone(),l=this._iKey=g.clone(),k=r.words,n=l.words,j=0;j&amp;lt;h;j++)k[j]^=1549556828,n[j]^=909522486;r.sigBytes=l.sigBytes=m;this.reset()},reset:function(){var f=this._hasher;f.reset();f.update(this._iKey)},update:function(f){this._hasher.update(f);return this},finalize:function(f){var g=this._hasher;f=g.finalize(f);g.reset();return g.finalize(this._oKey.clone().concat(f))}})})();

/*
Build a signature key that is used to sign data
https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
 */
function getSignatureKey(key, dateStamp, regionName, serviceName) {
    var kDate = CryptoJS.HmacSHA256(dateStamp, "AWS4" + key);
    var kRegion = CryptoJS.HmacSHA256(regionName, kDate);
    var kService = CryptoJS.HmacSHA256(serviceName, kRegion);
    var kSigning = CryptoJS.HmacSHA256("aws4_request", kService);
    return kSigning;
}

AccessKey = api.getValue("AccessKey");
SecretKey = api.getValue("SecretKey");
awsService = "execute-api";
awsRegion = api.getValue("IdentityId").split(':')[0];
now = new Date();
dateStamp = now.getUTCFullYear() + (now.getUTCMonth() &amp;lt; 9 ? '0' : '') + (now.getUTCMonth() + 1);
dateStamp += (now.getUTCDate() &amp;lt; 10 ? '0' : '') + now.getUTCDate();
signKey = getSignatureKey(SecretKey, dateStamp, awsRegion, awsService);
api.info('Signing key: ' + signKey);

/*
All the headers that need to be signed (non-default headers) and in
alphabetical order by name.  I manually sorted the header order, but
this code should have a function to sort them by name in lowercase.
 */

host = '&amp;lt;some hostname: e.g. - www.d5.google.com&amp;gt;';

amzDate = dateStamp + 'T' + now.toUTCString().split(/ /)[4].replace(/\:/g, '') + 'Z';
SessionToken = api.getValue("SessionToken");

// this section must list all the headers that will be added to the request
headers = [{
        "clientrequestid": "P123456789"
    }, {
        "content-type": "application/json"
    }, {
        "deviceid": "5555555"
    }, {
        "Host": host
    }, {
        "X-Amz-Date": amzDate
    }, {
        "X-Amz-Security-Token": SessionToken
    }, {
        "x-api-key": "abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd123"
    }, {
        "x-clientapp-version": "1.2"
    }, {
        "x-device-id": "89406"
    }, {
        "x-originator-type": "app"
    }
];

/*
Building the canonical request and adding the headers to the HTTP request
https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
 */

// HTTP Request parameters
method = "GET";
path = '/v1/accounts/vehicles';
queryStr = '';
payload = '';
payloadHash = CryptoJS.SHA256(payload).toString();

signedHeads = "";
canonReq = method + "\
    " + path + "\
    " + queryStr + "\
    ";
for (i = 0; i &amp;lt; headers.length; i++) {
    name = Object.keys(headers[i])[0];
    value = headers[i][name];
    signedHeads += name.toLowerCase() + ";";
    canonReq += name.toLowerCase() + ':' + value + '\
    ';
    request.addHeader(name, value);
}
signedHeads = signedHeads.substr(0, signedHeads.length - 1); // remove last semi-colon
canonReq += "\
" + signedHeads + "\
" + payloadHash;

// Hash of the canonical request
canonHash = CryptoJS.SHA256(canonReq).toString();
api.info('Hash of Canonical request: ' + canonHash);

/*
Building the string to sign
https://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html
 */
signStr = "AWS4-HMAC-SHA256\
    " + amzDate + "\
    " + dateStamp + "/";
signStr += awsRegion + "/" + awsService + "/aws4_request\
" + canonHash;
api.info('String to sign: ' + signStr);

/*
Signing the string
https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
 */
sig = CryptoJS.HmacSHA256(signStr, signKey).toString();

authString = 'AWS4-HMAC-SHA256 Credential=' + AccessKey + '/' + dateStamp + '/' + awsRegion + '/' + awsService + '/aws4_request, SignedHeaders=' + signedHeads + ', Signature=' + sig;
api.info('authString: ' + authString);

request.addHeader("Authorization", authString);
&lt;/LI-CODE&gt;
&lt;DIV&gt;&lt;span class="lia-unicode-emoji" title=":warning:"&gt;⚠️&lt;/span&gt; Make sure all required request headers are present and correctly configured before saving the monitor.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;
&lt;H2&gt;Validation and Testing&lt;/H2&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;After configuring the pre‑execution script:&lt;/DIV&gt;
&lt;OL&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Save the HTTP Monitor.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Execute a test run.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Verify that the request completes successfully and returns the expected response.&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="paragraph-in-scc-markdown-text ___1ngh792 ftgm304 f1iaxwol"&gt;If the request fails, double‑check:&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Header values&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Credential configuration&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Hostname and endpoint details&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;
&lt;H2&gt;Important Notes&lt;/H2&gt;
&lt;UL&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;AWS Signature Version 4 signing is &lt;STRONG&gt;not available out of the box&lt;/STRONG&gt; for HTTP Monitors.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;The signing logic must be maintained in the pre‑execution script.&lt;/LI&gt;
&lt;LI class="___ccc16d0 fje8fi8 f1ng9h0j f1bwykku f18jd3zf"&gt;Any changes to the request (headers, method, endpoint) may require updating the script.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;H2&gt;What's Next&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;If none of the previous steps resolved the issue, you can &lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;open a chat, or support ticket, and provide a link to the affected monitor and the troubleshooting steps you have already completed. Support can help spot errors in applying this snippet or give you pointers. &lt;BR /&gt;or&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;talk to your Customer Success Manager, or account team, and discuss getting some scripting assistance.&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Related reading&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":open_book:"&gt;📖&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;A class="" href="https://community.dynatrace.com/t5/Troubleshooting/Synthetic-Troubleshooting-Map/ta-p/250426" target="_blank" rel="noopener"&gt;Synthetic Troubleshooting Map&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":open_book:"&gt;📖&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;A href="https://docs.dynatrace.com/docs/observe/digital-experience/synthetic-monitoring/http-monitors-classic/pre-and-post-scripting-for-http-monitors-classic#define-pre-and-post-execution-scripts" target="_self"&gt;pre‑ and post‑execution scripts for HTTP Monitors&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":open_book:"&gt;📖&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;A href="https://docs.dynatrace.com/docs/observe/digital-experience/synthetic-monitoring/general-information/synthetic-authentication" target="_self"&gt;Supported authentication methods in Synthetic Monitoring&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":open_book:"&gt;📖&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;A href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-create-signed-request.html" target="_self"&gt;Create a signed AWS API request&lt;/A&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 29 Apr 2026 12:43:23 GMT</pubDate>
    <dc:creator>HannahM</dc:creator>
    <dc:date>2026-04-29T12:43:23Z</dc:date>
    <item>
      <title>HTTP Monitors: How to sign a request for AWS Signature Version 4</title>
      <link>https://community.dynatrace.com/t5/Troubleshooting/HTTP-Monitors-How-to-sign-a-request-for-AWS-Signature-Version-4/ta-p/219868</link>
      <description>&lt;P&gt;&lt;LI-TOC indent="15" liststyle="disc" maxheadinglevel="2"&gt;&lt;/LI-TOC&gt;&lt;/P&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;*&lt;EM&gt;Use a table of contents for longer articles.&amp;nbsp;&lt;/EM&gt;&lt;/P&gt;
&lt;H1&gt;Summary&lt;/H1&gt;
&lt;P&gt;&lt;EM&gt;*This is a mandatory section.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Short description of which part of the Dynatrace platform the article refers to and what kind of problem it will help resolve / task it will describe.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Problem&lt;/H1&gt;
&lt;P&gt;&lt;EM&gt;*This is a mandatory section.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Provide a precise description of the problem / task to be described.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Troubleshooting steps&lt;/H1&gt;
&lt;P&gt;&lt;EM&gt;*This section can be omitted.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Resolution&lt;/H1&gt;
&lt;P&gt;&lt;EM&gt;*This section can be omitted for ticket‑creation articles.&lt;/EM&gt;&lt;/P&gt;
&lt;H1&gt;What's next&lt;/H1&gt;
&lt;P&gt;&lt;EM&gt;*This is a mandatory section.&lt;/EM&gt;&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Wed, 29 Apr 2026 12:43:23 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Troubleshooting/HTTP-Monitors-How-to-sign-a-request-for-AWS-Signature-Version-4/ta-p/219868</guid>
      <dc:creator>HannahM</dc:creator>
      <dc:date>2026-04-29T12:43:23Z</dc:date>
    </item>
    <item>
      <title>Re: HTTP Monitors: How to sign a request for AWS Signature Version 4</title>
      <link>https://community.dynatrace.com/t5/Troubleshooting/HTTP-Monitors-How-to-sign-a-request-for-AWS-Signature-Version-4/tac-p/220774#M284</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have just tried ant returns a 403:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;"healthStatusCode": 6,
"healthStatus": "INVALID_CODE",
"responseBody": "The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details"&lt;/LI-CODE&gt;&lt;P&gt;I have just tried it using Postman and no problem. AWS keys are correct.&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Best regards&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 16 Aug 2023 12:30:41 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Troubleshooting/HTTP-Monitors-How-to-sign-a-request-for-AWS-Signature-Version-4/tac-p/220774#M284</guid>
      <dc:creator>AntonPineiro</dc:creator>
      <dc:date>2023-08-16T12:30:41Z</dc:date>
    </item>
    <item>
      <title>Re: HTTP Monitors: How to sign a request for AWS Signature Version 4</title>
      <link>https://community.dynatrace.com/t5/Troubleshooting/HTTP-Monitors-How-to-sign-a-request-for-AWS-Signature-Version-4/tac-p/220776#M285</link>
      <description>&lt;P&gt;Thanks Anton. Can you create a ticket? I think we would need to check the exact code being used in each case.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 16 Aug 2023 12:33:21 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Troubleshooting/HTTP-Monitors-How-to-sign-a-request-for-AWS-Signature-Version-4/tac-p/220776#M285</guid>
      <dc:creator>HannahM</dc:creator>
      <dc:date>2023-08-16T12:33:21Z</dc:date>
    </item>
  </channel>
</rss>

