Kohei Sugihara created HDDS-7961:
------------------------------------

             Summary: Anonymous scope in Ozone ACL does not grant rights to 
non-logged-in users
                 Key: HDDS-7961
                 URL: https://issues.apache.org/jira/browse/HDDS-7961
             Project: Apache Ozone
          Issue Type: Bug
          Components: OM, S3
            Reporter: Kohei Sugihara


h2. Overview

A key in the S3 bucket cannot access without authentication, even though each 
bucket/volume allows anonymous reading and listing in its ACLs.
h2. Configuraiton

Create a bucket in a volume, make it accessible from S3, and then put the ACL 
{{anonymous::rl}} to them.

{{# create a bucket accessible via S3 and put a key}}
{{ozone sh bucket create /volume/bucket-for-anonymous}}
{{ozone sh bucket link /volume/bucket-for-anonymous /s3v/bucket-for-anonymous}}
{{aws s3 --endpoint ... cp README s3://bucket-for-anonymous}}
{{# set ACLs for anonymous access to the source/s3v buckets, the source/s3v 
volumes and the key}}
{{ozone sh bucket addacl volume/bucket-for-anonymous -a anonymous::rl}}
{{ozone sh bucket addacl s3v/bucket-for-anonymous -a anonymous::rl}}
{{ozone sh volume addacl volume -a anonymous::rl}}
{{ozone sh volume addacl s3v -a anonymous::rl}}
{{# set ACL for the key}}
{{ozone sh key addacl volume/bucket-for-anonymous/README -a anonymous::r}}
h2. Case: Access without authentication using wget will fail with 403

Attempting to access to the key, but it fails with 403.

{{% wget -qO- https://HOST/bucket-for-anonymous/README -S}}
{{  HTTP/1.1 403 Forbidden}}
{{  Date: Mon, 13 Feb 2023 07:55:58 GMT}}
{{  Cache-Control: no-cache}}
{{  Expires: Mon, 13 Feb 2023 07:55:58 GMT}}
{{  Pragma: no-cache}}
{{  Content-Type: text/plain}}
{{  X-Content-Type-Options: nosniff}}
{{  X-XSS-Protection: 1; mode=block}}
{{  X-FRAME-OPTIONS: SAMEORIGIN}}
{{  Server: Ozone}}
{{  x-amz-id-2: gT8na4osJZlG}}
{{  x-amz-request-id: c139bbcf-3d93-4f4f-a6a2-43f75bc0de83}}
{{  Content-Length: 187}}

S3G outputs an error message: "Malformed s3 header" as a DEBUG-level message 
from OzoneClientProducer. This situation means that S3G rejects the access at 
S3 secrets validation checks.
{quote}...

2023-02-13 15:00:05,079 [qtp731829978-166] DEBUG 
org.eclipse.jetty.servlet.ServletHandler: 
chain=Chain@68772dce(NoCacheFilter==org.apache.hadoop.hdds.server.http.NoCacheFilter@740d2e78\{inst=true,async=true,src=EMBEDDED:null})->Chain@286a9870(safety==org.apache.hadoop.hdds.server.http.HttpServer2$QuotingInputFilter@6aa3a905\{inst=true,async=true,src=EMBEDDED:null})->Chain@2232456a(optional-content-type==org.apache.hadoop.ozone.s3.EmptyContentTypeFilter@d4ab71a\{inst=true,async=false,src=DESCRIPTOR:file:///tmp/jetty-0_0_0_0-9879-ozone-s3gateway-1_2_9995006_jar-_-any-17931241039680298355/webapp/WEB-INF/web.xml})->Chain@2629e2cc(info-page-redirect==org.apache.hadoop.ozone.s3.RootPageDisplayFilter@3b4ef7\{inst=true,async=false,src=DESCRIPTOR:file:///tmp/jetty-0_0_0_0-9879-ozone-s3gateway-1_2_9995006_jar-_-any-17931241039680298355/webapp/WEB-INF/web.xml})->ChainEnd@7761a29a(jaxrs==org.glassfish.jersey.servlet.ServletContainer@603a422\{jsp=null,order=1,inst=true,async=false,src=DESCRIPTOR:file:///tmp/jetty-0_0_0_0-9879-ozone-s3gateway-1_2_9995006_jar-_-any-17931241039680298355/webapp/WEB-INF/web.xml,STARTED})
*2023-02-13 15:00:05,085 [qtp731829978-166] DEBUG 
org.apache.hadoop.ozone.s3.OzoneClientProducer: Malformed s3 header. 
awsAccessID:*
*2023-02-13 15:00:05,314 [qtp731829978-166] DEBUG 
org.apache.hadoop.ozone.s3.OzoneClientProducer: Error during Client Creation:*
*2023-02-13 15:00:05,378 [qtp731829978-166] DEBUG 
org.apache.hadoop.ozone.s3.exception.OS3Exception: toXml val is <Error>*
2023-02-13 15:00:05,392 [qtp731829978-166] DEBUG 
org.eclipse.jetty.server.HttpOutput: write(array 
HeapByteBuffer@5fe2ddf1[p=0,l=187,c=8192,r=187]=\{<<<<?xml version="1.0" 
encod... 
<RequestId/>\n</Error>\n>>>\x00\x00\x00\x00\x00\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00})
2023-02-13 15:00:05,392 [qtp731829978-166] DEBUG 
org.eclipse.jetty.server.HttpOutput: write(array) 
s=CLOSING,api=BLOCKED,sc=false,e=null last=true agg=false flush=true 
async=false, len=187 null
2023-02-13 15:00:05,392 [qtp731829978-166] DEBUG 
org.eclipse.jetty.server.HttpChannel: sendResponse info=null 
content=HeapByteBuffer@354f401a[p=0,l=187,c=8192,r=187]=\{<<<<?xml 
version="1.0" encod... 
<RequestId/>\n</Error>\n>>>\x00\x00\x00\x00\x00\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00}
 complete=true committing=true callback=Blocker@56ca79aa\{null}
2023-02-13 15:00:05,394 [qtp731829978-166] DEBUG 
org.eclipse.jetty.server.HttpChannel: COMMIT for /bucket-for-anonymous/README 
on HttpChannelOverHttp@43f236bf\{s=HttpChannelState@340e7dcf{s=HANDLING 
rs=BLOCKING os=COMMITTED is=IDLE awp=false se=false i=true 
al=0},r=1,c=false/false,a=HANDLING,uri=https://HOST/bucket-for-anonymous/README,age=321}
2023-02-13 15:00:05,394 [qtp731829978-166] DEBUG 
org.eclipse.jetty.server.HttpConnection: generate: NEED_HEADER for 
SendCallback@322df2c9[PROCESSING][i=HTTP/1.1\{s=403,h=12,cl=187},cb=org.eclipse.jetty.server.HttpChannel$SendCallback@7b69ac28]
 (null,[p=0,l=187,c=8192,r=187],true)@START
2023-02-13 15:00:05,394 [qtp731829978-166] DEBUG 
org.eclipse.jetty.http.HttpGenerator: generateHeaders 
HTTP/1.1\{s=403,h=12,cl=187} last=true 
content=HeapByteBuffer@354f401a[p=0,l=187,c=8192,r=187]=\{<<<<?xml 
version="1.0" encod... 
<RequestId/>\n</Error>\n>>>\x00\x00\x00\x00\x00\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00}

...
{quote}
 

One possible solution is relaxing S3 secrets validation when ACL has the 
anonymous scope. So requires fetching ACLs before processing S3 secrets at 
S3G-side or offloading S3 token validation to OM.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to