python - 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 仅此而已。任何地方似乎都没有有用的日志。有什么明显的我做错了,或者在某个地方我可以看到关于写入失败的好信息?
解决方案
这些天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/*"
推荐阅读
- excel - EXCEL, Bloomberg : 如何从股票代码中获取 CDS 代码
- angular - Angular 2~6:与“组件”通信的最有效方式是什么?
- glassfish - 下载 Glassfish 服务器 3.1.2.15
- laravel - 如何在 Voyager 中更改文件上传路径
- python-3.x - 恢复后的张量流批量标准化
- electron - 在关闭回调时访问远程窗口内的窗口
- c# - 依赖注入刷新缓存
- authentication - Hyperledger Composer Rest Server 与 Cloudant 的连接
- c++11 - 带有while循环c ++的Isalpha()函数
- java - Spark 以不同的 TTL 写入 Cassandra