amazon-web-services - 当对象由另一个帐户创建时,无法从 s3 存储桶上的 lambda 获取对象
问题描述
我有 3 个帐户,我将其称为帐户 AA、BB 和 CC。
AA 对 BB 中的 s3 桶做 putObject,CC 有一个 lambda,当在 BB 中创建对象时触发
当我从账户 BB 在 s3 存储桶中创建一个对象时,lambda 按预期工作。我可以通过控制台或 s3 api 做到这一点。
当对象从帐户 AA 放入时,我可以在 lambda 中读取事件,但Access Denied
在尝试执行s3:GetObject
在某一时刻,我在 BB 中有 lambda,它能够执行s3:GetObject
AA 创建的对象。只有当我将 lambda 移动到 CC 时,我才开始遇到 AA 创建的对象的问题。
这是我的 s3 存储桶策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AA:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::BUCKET_NAME/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::CC:role/LAMBDA_ARN"
},
"Action": "s3:Get*",
"Resource": "arn:aws:s3::BUCKET_NAME/*"
}
]
}
这是我来自 CC lambda 的声明,它允许访问 s3
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::BUCKET_NAME*",
"arn:aws:s3:::BUCKET_NAME*/*"
],
"Effect": "Allow",
}
s3:get*
lambda 执行角色对账户 BB具有完全权限。
它是由另一个帐户写入的事实不应影响读取该对象,因为我可以从 AA 中取出写入其中的相同对象,再次将其写入 BB,CC lambda 将能够很好地读取它。
解决方案
从其他账户(即从不拥有 S3 存储桶的账户)将对象写入 Amazon S3 时,建议将 ACL 设置为bucket-owner-full-control
. 这允许存储桶所有者控制对象。
看起来很奇怪,可以在拥有帐户无法访问的存储桶中创建对象!
推荐阅读
- java - Java for 循环变量无处可指
- angular - 订阅内的功能 - Angular 4
- c# - 如何搜索导航属性的属性
- gcc - 未找到 GNU 汇编器,安装/更新气体预处理器
- javascript - 如何在 HTML 表格排序中保持序列号不变
- fiware - Orion 响应 RequestEntityTooLarge 的问题
- c - 使用 Park&Miller RNG 制作大样本?
- python-3.x - python将set.result块插入文本框
- iis-8 - IIS 8.5 和 Tomcat,重写条件不起作用
- sequelize.js - Sequelize:我怎样才能得到我用 Create 保存的实体