[ 
https://issues.apache.org/jira/browse/ARROW-15892?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17503868#comment-17503868
 ] 

Weston Pace commented on ARROW-15892:
-------------------------------------

I can reproduce this and I agree that the permission in question is probably 
{{ListBucket}}.  In this case it isn't the logic around checking bucket 
existence exactly that is causing the problem.  In the datasets module we 
always call `CreateDir` since the function succeeds if the directory already 
exists.

In s3fs, if the directory is a bucket (e.g. if it is `foo` and not 
`foo/my_dataset`), we call `CreateBucket` without doing any existence checking 
at all (then if we get a "bucket already exists" error we just return ok).  
That explains why the error you are getting is {{"OSError: When creating 
bucket"}} and not {{"OSError: When testing for existence of bucket"}}

It should be straightforward to add an option to completely disable `CreateDir` 
calls in datasets.  This would be a little bizarre from a local filesystem 
perspective but makes perfect sense in an object store where directories don't 
need to be created.  You would also need to make sure you specify 
{{existing_data_behavior=overwrite_or_ignore}}


> [C++] Dataset APIs require s3:ListBucket Permissions
> ----------------------------------------------------
>
>                 Key: ARROW-15892
>                 URL: https://issues.apache.org/jira/browse/ARROW-15892
>             Project: Apache Arrow
>          Issue Type: Bug
>            Reporter: Jonny Fuller
>            Priority: Minor
>
> Hi team, first time posting an issue so I apologize if the format is lacking. 
> My original comment is on ARROW-13685 Github Issue 
> [here|https://github.com/apache/arrow/pull/11136#issuecomment-1062406820]. 
> Long story short, our environment is super locked down, and while my 
> application has permission to write data against an s3 prefix, I do not have 
> the {{ListBucket}} permission nor can I add it. This does not prevent me from 
> using the "individual" file APIs like {{pq.write_table}} but the bucket 
> validation logic in the "dataset" APIs breaks when trying to test for the 
> bucket's existence. 
> {code:java}
> pq.write_to_dataset(pa.Table.from_batches([data]), location, 
> filesystem=s3fs){code}
> {code:java}
> OSError: When creating bucket '<my bucket>': AWS Error [code 15]: Access 
> Denied{code}
> The same is true for the generic {{pyarrow.dataset}} APIs. My understanding 
> is the bucket validation logic is part of the C++ code, not the Python API. 
> As a Pythonista who knows nothing of C++ I am not sure how to resolve this 
> problem.
>  
> Would it be possible to disable the bucket existence check with an optional 
> key word argument? Thank you for your time!
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to