Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 管理员用户禁止使用Boto3 ListObject_Python 3.x_Amazon Web Services_Amazon S3_Permissions - Fatal编程技术网

Python 3.x 管理员用户禁止使用Boto3 ListObject

Python 3.x 管理员用户禁止使用Boto3 ListObject,python-3.x,amazon-web-services,amazon-s3,permissions,Python 3.x,Amazon Web Services,Amazon S3,Permissions,我一直在尝试编写一个小脚本,将S3文件夹的所有内容下载到lambda/tmp。为此,我需要列出特定bucket中的所有对象。不幸的是,我一直得到以下错误 调用HeadObject操作时发生错误(403):禁止 以下是我如何尝试从文件夹下载所有文件: #initialize S3 try: s3 = boto3.resource('s3', aws_access_key_id=os.getenv('S3USERACCESSKEY'), aws_sec

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

调用HeadObject操作时发生错误(403):禁止

以下是我如何尝试从文件夹下载所有文件:

#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)
上述访问密钥具有完全的管理员权限:

编辑

移除手动钥匙后仍然没有成功,以下是我连接到Lambda的右侧:

以下是cloudwatch的实际错误:

代码现在看起来是这样的:

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

似乎“禁止”可能是权限的另一个问题,但我在上面找不到任何文档。

确保访问密钥属于具有访问s3存储桶权限的IAM角色的用户。 如果从lambda运行,则无需使用访问密钥,只需将IAM角色附加到lambda即可

你进口博托了吗? 尝试运行仅执行以下操作:

更新

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

这不是lambda,对吗?@Spiff它确实在lambdai中运行如果你看一下我在图片上附加的权限方案,我对aws上的所有内容都有完全的管理权限,并且我添加了对S3的完全访问权限。因为它在lambda中执行,所以不需要使用访问密钥,只需将IAM角色附加到lambdaSe我的更新应答。我已检查。我已将角色添加到lambda未成功,请参阅上面的编辑。如果未导入boto3,我将收到不同的错误消息,类似于“boto3未定义”的内容