管理员用户的Boto3 ListObject Forbiden

时间:2018-05-10 09:51:07

标签: python-3.x amazon-web-services amazon-s3 permissions

我一直在尝试编写一个小脚本来下载到lambda / tmp S3文件夹的所有内容。为此,我需要列出特定存储桶中的所有对象。不幸的是,我一直收到以下错误;

An error occurred (403) when calling the HeadObject operation: Forbidden

以下是我尝试从文件夹下载所有文件的方法:

#initialize S3
try:
        s3 = boto3.resource('s3',
        aws_access_key_id=os.getenv('S3USERACCESSKEY'),
        aws_secret_access_key=os.getenv('S3USERSECRETKEY')
    )
    s3_client = boto3.client('s3',
        aws_access_key_id=os.getenv('S3USERACCESSKEY'),
        aws_secret_access_key=os.getenv('S3USERSECRETKEY')
    )
except Exception as e:
    logger.error("Could not connect to s3 bucket: " + str(e))

#Function to download whole folders from s3
for s3_key in s3_client.list_objects(Bucket=os.getenv('S3BUCKETNAME'))['Contents']:
    s3_object = s3_key['Key']
    if not s3_object.endswith("/"):
        s3_client.download_file('bucket', s3_object, s3_object)
    else:
        import os
        if not os.path.exists(s3_object):
            os.makedirs(s3_object)

上述访问密钥具有完全管理权限: enter image description here

修改

删除我的手动密钥后仍然没有成功,这是我附加到Lambda的权利:

enter image description here

以下是来自cloudwatch的实际错误:

enter image description here

现在代码如下:

#initialize S3
    try:
            s3 = boto3.resource('s3')
        s3_client = boto3.client('s3')
    except Exception as e:
          [....]

似乎“禁止”可能是另一个问题,然后许可,但我找不到任何文档。

1 个答案:

答案 0 :(得分:0)

确保访问密钥属于具有访问s3存储桶权限的IAM角色的用户。 如果你从lambda运行,那么就不需要使用访问密钥,只需将IAM角色附加到lambda

https://docs.aws.amazon.com/lambda/latest/dg/accessing-resources.html

你导入boto了吗? 尝试仅运行执行:

<强>更新

import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
  print(bucket.name)