diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 8adac5fa58..de851637d2 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -19,6 +19,7 @@ The following tip changes can be tested by building VictoriaMetrics components f * BUGFIX: do not export stale metrics via [/federate api](https://docs.victoriametrics.com/#federation) after the staleness markers. Previously such metrics were exported with `NaN` values. this could break some setups. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3185). * BUGFIX: [vmauth](https://docs.victoriametrics.com/vmauth.html): properly handle request paths ending with `/` such as `/vmui/`. Previously `vmui` was dropping the traling `/`, which could prevent from using `vmui` via `vmauth`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1752). +* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly encode query params for aws signed requests, use `%20` instead of `+` as api requires. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3171). ## [v1.79.3](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.79.3) diff --git a/lib/awsapi/sign.go b/lib/awsapi/sign.go index d56890f124..88d1823745 100644 --- a/lib/awsapi/sign.go +++ b/lib/awsapi/sign.go @@ -41,6 +41,9 @@ func signRequestWithTime(req *http.Request, service, region, payloadHash string, datestamp := t.Format("20060102") canonicalURL := uri.Path canonicalQS := uri.Query().Encode() + // Replace "%20" with "+" according to AWS requirements. + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3171 + canonicalQS = strings.ReplaceAll(canonicalQS, "+", "%20") canonicalHeaders := fmt.Sprintf("host:%s\nx-amz-date:%s\n", uri.Host, amzdate) signedHeaders := "host;x-amz-date"