0

我可以像这样使用 aws cli 下载 s3 文件夹:

aws s3 cp --recursive s3://bucketname/custom-folder /tmp

但我无法列出 boto3 库中的文件夹文件:

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
for obj in bucket.objects.all():
    print(obj.key)

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied

但是,如果我知道特定路径,我可以下载特定文件,我知道这是因为 bash 命令正常工作:

s3.download_file(Bucket='mybucket',Key='custom-folder/1.gz',Filename='/tmp/1.gz')

我的问题是:

如何在没有读取/列出 S3 存储桶中文件的权限的情况下在 Boto3 中递归下载一个文件夹??????

谢谢!

4

1 回答 1

1

--recursive命令实际上需要列出文件才能知道要复制哪些文件。因此,您似乎被授予列出文件的权限,但仅限于custom-folder.

您可以使用以下方法进行测试:

aws s3 ls s3://bucketname/custom-folder

如果可行,您可以使用以下方法修改您的 Python 应用程序:

for obj in bucket.objects.filter(Prefix='custom-folder/'):

这应该将列表请求限制为该文件夹。

如果这有问题,您可能需要使用 API 调用的客户端版本而不是资源版本。

于 2020-01-03T00:25:34.883 回答