Amazon web services 不能';getObject';当对象由另一个帐户创建时,从s3 bucket上的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

我有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移动到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中创建一个所有者帐户无法访问的对象是可能的

见: