【发布时间】:2021-09-23 14:08:41
【问题描述】:
我刚刚使用无服务器部署了一个 lambda,但不允许我访问我想要的 s3 存储桶。这段代码有什么明显被破坏的地方吗?
service: handler
frameworkVersion: '2'
provider:
name: aws
runtime: python3.8
lambdaHashingVersion: 20201221
iam:
role:
statements:
- Effect: 'Allow'
Action:
- 's3:GetObject'
- 's3:PutObject'
Resource: "arn:aws:s3:::my_bucket"
plugins:
- serverless-python-requirements
package:
exclude:
- node_modules/**
functions:
login:
handler: handler.login
events:
- httpApi:
path: /login
method: post
这是尝试访问 s3 的函数
def check_s3(user):
s3 = boto3.client('s3')
obj = s3.get_object(Bucket="my_bucket", Key=user)
data = json.loads(obj['Body'].read())
return data
我得到的错误:
[ERROR] ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
Traceback (most recent call last):
File "/var/task/handler.py", line 11, in login
d = check_s3(username)
File "/var/task/handler.py", line 34, in check_s3
obj = s3.get_object(Bucket="my_bucket", Key=user)
File "/var/runtime/botocore/client.py", line 386, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/runtime/botocore/client.py", line 705, in _make_api_call
raise error_class(parsed_response, operation_name)
【问题讨论】:
-
您是否验证了您要获取的对象是否存在?当没有具有指定键的对象时,S3 将返回拒绝访问。仔细检查存储桶和密钥以确定。
标签: python python-3.x amazon-web-services amazon-s3