【问题标题】:AWS - ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access DeniedAWS - ClientError:调用 GetObject 操作时发生错误 (AccessDenied):访问被拒绝
【发布时间】: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


【解决方案1】:

您的资源需要为"arn:aws:s3:::my_bucket/*",因为您获得的是一个对象,而不是存储桶本身。 S3 Permissions

【讨论】:

  • 谢谢,但我仍然遇到同样的错误。可能是存储桶权限吗?我相信我有相当标准的权限。没有外部访问权限
  • 除非您对存储桶策略有明确的拒绝,否则这无关紧要。从更新策略到再次运行代码,您是否给它一点时间?有时会有延迟,特别是如果它不在 us-east-1 中。除此之外,您还需要查看是否有任何权限边界或 SCP 限制访问。上述策略应该足以获得一个对象。您可以尝试将错误消息添加到您的问题中。
  • 现在又试了一次,可惜还是不行。添加了 s3:::my_bucket 和 s3:::my_bucket/* 但仍然无法访问
  • 如果您可以包含实际的错误消息(您可以屏蔽存储桶名称和对象名称),那将很有帮助。该错误通常会提供更多信息。底线是您的权限在某个地方有误。
  • 当然,我现在在 OP 中添加了错误。不幸的是,它并没有说太多
【解决方案2】:

问题是我试图获取的文件不存在

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 2018-07-12
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2021-12-19
    相关资源
    最近更新 更多