Browse Source
S3: add s3: prefix to x-amz-* condition keys for AWS compatibility (#8765 )
AWS S3 policy conditions reference request headers with the s3: namespace
prefix (e.g., s3:x-amz-server-side-encryption). The extraction code was
storing these headers without the prefix, so bucket policy conditions
using the standard AWS key names would never match.
pull/8756/merge
Chris Lu
1 day ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with
6 additions and
5 deletions
weed/s3api/policy_engine/engine.go
weed/s3api/policy_engine/engine_test.go
@ -427,10 +427,11 @@ func ExtractConditionValuesFromRequest(r *http.Request) map[string][]string {
// HTTP method
values [ "s3:RequestMethod" ] = [ ] string { r . Method }
// Extract custom headers
// Extract custom headers with s3: prefix for AWS-compatible condition keys
for key , headerValues := range r . Header {
if strings . HasPrefix ( strings . ToLower ( key ) , "x-amz-" ) {
values [ strings . ToLower ( key ) ] = headerValues
lowerKey := strings . ToLower ( key )
if strings . HasPrefix ( lowerKey , "x-amz-" ) {
values [ "s3:" + lowerKey ] = headerValues
}
}
@ -444,8 +444,8 @@ func TestExtractConditionValuesFromRequest(t *testing.T) {
t . Errorf ( "Expected RequestMethod to be GET, got %v" , values [ "s3:RequestMethod" ] )
}
if len ( values [ "x-amz-copy-source" ] ) != 1 || values [ "x-amz-copy-source" ] [ 0 ] != "source-bucket/source-object" {
t . Errorf ( "Expected X-Amz-Copy-Source header to be extracted, got %v" , values [ "x-amz-copy-source" ] )
if len ( values [ "s3: x-amz-copy-source" ] ) != 1 || values [ "s3: x-amz-copy-source" ] [ 0 ] != "source-bucket/source-object" {
t . Errorf ( "Expected X-Amz-Copy-Source header to be extracted with s3: prefix , got %v" , values [ "s3: x-amz-copy-source" ] )
}
// Check that aws:CurrentTime is properly set