Amazon web services 不能';getObject';当对象由另一个帐户创建时,从s3 bucket上的lambda
我有3个帐户,我将称为帐户AA,BB和CC AA向BB中的s3 bucket发送一个putObject,CC有一个lambda,当在BB中创建一个对象时会触发该lambda 当我从帐户BB在s3 bucket中创建一个对象时,lambda按预期工作。我可以通过控制台或S3API来实现这一点 当对象从帐户AA放入其中时,我能够读取lambda中的事件,但在尝试执行Amazon web services 不能';getObject';当对象由另一个帐户创建时,从s3 bucket上的lambda,amazon-web-services,amazon-s3,aws-lambda,amazon-iam,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Iam,我有3个帐户,我将称为帐户AA,BB和CC AA向BB中的s3 bucket发送一个putObject,CC有一个lambda,当在BB中创建一个对象时会触发该lambda 当我从帐户BB在s3 bucket中创建一个对象时,lambda按预期工作。我可以通过控制台或S3API来实现这一点 当对象从帐户AA放入其中时,我能够读取lambda中的事件,但在尝试执行s3:GetObject 有一次我在BB中使用了lambda,它能够对AA创建的对象执行s3:GetObject。只有当我将lambda
s3:GetObject
有一次我在BB中使用了lambda,它能够对AA创建的对象执行s3:GetObject
。只有当我将lambda移动到CC时,我才开始遇到AA创建的对象的问题
这是我的政策
{
"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",
}
lambda执行角色对帐户BB具有s3:get*
的完全权限
事实上,它是由另一个帐户写入的,这不应该影响读取该对象,因为我可以将从AA写入其中的同一个对象再次写入BB,CC lambda将能够很好地读取它。当从其他帐户将对象写入Amazon S3时(即,对于不拥有S3 bucket的帐户),建议将ACL设置为
bucket owner full control
。这允许bucket owner控制对象
奇怪的是,在一个bucket中创建一个所有者帐户无法访问的对象是可能的
请参阅:当从其他帐户(即,从不拥有S3 bucket的帐户)向Amazon S3写入对象时,建议将ACL设置为
bucket owner full control
。这允许bucket owner控制对象
奇怪的是,在一个bucket中创建一个所有者帐户无法访问的对象是可能的
见: