首页 > 解决方案 > S3 AccessDenied 的任何地方都有真实的日志吗?

问题描述

使用无服务器框架。我正在使用 python 在 lambda 中进行一些图像处理,并将结果放入 S3 存储桶中,以便通过 URL 公开访问。

我花了几个小时阅读我能找到的每个堆栈溢出答案、示例代码等,以展示这是如何完成的。但没有骰子。我根本无法创建有效的最低权限。对于这个 python 代码:

with open("/tmp/" + filename, "rb") as f:
    s3_client.upload_fileobj(f, bucket_name, filename)

使用这个大锤子获得权限可以正常工作:

iamRoleStatements:
- Effect: 'Allow'
  Action:
    - 's3:*'
  Resource: "arn:aws:s3:::*"

但我不能让它与激光聚焦的最小权限一起工作:

iamRoleStatements:
- Effect: 'Allow'
  Action:
    - 's3:PutObject'
    - 's3:PutObjectAcl'
    - 's3:GetObject'
    - 's3:GetObjectAcl'
  Resource: "arn:aws:s3:::mah-bucket/*"
- Effect: 'Allow'
  Action:
    - 's3:ListBucket'
  Resource: "arn:aws:s3:::mah-bucket"

堆栈跟踪没有帮助。AccessDenied 仅此而已。任何地方似乎都没有有用的日志。有什么明显的我做错了,或者在某个地方我可以看到关于写入失败的好信息?

标签: pythonamazon-s3aws-lambdaamazon-iamserverless-framework

解决方案


这些天iamRoleStatements:已被弃用,而是使用我是文档作为参考

示例用于写入需要的存储桶的细粒度策略listing and put permission

iam:
    role:
      statements:
        - Effect: "Allow"
          Action:
            - "s3:ListBucket"
          Resource:
            Fn::Join:
              - ""
              - - "arn:aws:s3:::"
                - "bucket-name"
        - Effect: "Allow"
          Action:
            - "s3:PutObject"
          Resource:
            Fn::Join:
              - ""
              - - "arn:aws:s3:::"
                - "bucket name"
                - "/*"

没有加入

provider:
    iam:
     role:
      statements:
       - Effect: "Allow"
         Action:
          - "s3:ListBucket"
         Resource: "arn:aws:s3:::bucket-name"
       -  Effect: "Allow"
          Action:
           - "s3:PutObject"
          Resource: "arn:aws:s3:::buket-name/*"

推荐阅读