ClientError: 调用 PutObject 操作时发生错误 (AccessDenied):拒绝访问

Man*_*rek 1 amazon-s3 amazon-web-services amazon-cloudwatch

我正在尝试调用一个 lambda 函数,它将一些消息推送到 s3 存储桶中。但是每次我调用 lambda 函数时,我都会收到以下错误

 ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Run Code Online (Sandbox Code Playgroud)

下面是我的 lambda 代码

import json
import boto3

def lambda_handler(event, context):
s3 = boto3.client("s3")
#data = json.loads(event["Records"][0]["body"])
data = event["Records"][0]["body"]

s3.put_object(Bucket="sqsmybucket",Key="data.json", Body=json.dumps(data))
#print(event) 
return {
    'statusCode': 200,
    'body': json.dumps('Hello from Lambda!')     
}
Run Code Online (Sandbox Code Playgroud)

我使用的用户帐户也具有访问 S3 的角色 在此处输入图片说明

我已经检查了 s3 存储桶权限,并且所有公共访问权限都已为其打开

在此处输入图片说明

但是我在 cloudwatch 日志中反复收到以下错误消息

2020-06-05T23:48:20.920+05:30

[ERROR] ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Traceback (most recent call last):
 File "/var/task/lambda_function.py", line 9, in lambda_handler
  s3.put_object(Bucket="sqsmybucket",Key="data.json", Body=json.dumps(data))
 File "/var/runtime/botocore/client.py", line 316, in _api_call
 return self._make_api_call(operation_name, kwargs)
 File "/var/runtime/botocore/client.py", line 626, in _make_api_call
  raise error_class(parsed_response, operation_name)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 在此处输入图片说明

请帮助我对这种情况真的一无所知。提前致谢。

jel*_*csc 6

请确保附加到 lambda 函数的角色具有s3:PutObject权限。

例如,所需的最小特权/权限是

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<bucket-name>/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • “/*”是关键 (3认同)