获取AWS Lambda对私有S3资源的访问权限

时间:2017-01-31 01:00:26

标签: amazon-s3 aws-lambda amazon-iam

我们一直在努力解决与S3和Lambda相关的资源权限问题。

我们有一个root帐户,其中包含 - 帐户A - 桶主人 帐户B - 用于上传(通过CORS)并提供对S3图像的访问 ROLE L - 我们有一个lambda函数,它为此角色分配了完全S3访问

存储桶具有如下的访问策略 -

{
"Version": "2012-10-17",
"Id": "Policyxxxxxxxxx",
"Statement": [
    {
        "Sid": "Stmt44444444444",
        "Effect": "Deny",
        "NotPrincipal": {
            "AWS": [
                "arn:aws:iam::xxxxxxxxxxxx:user/account-A",
                "arn:aws:iam::xxxxxxxxxxxx:role/role-L"
            ]
        },
        "Action": [
            "s3:*",
        ],
        "Resource": [
            "arn:aws:s3:::bucket",
            "arn:aws:s3:::bucket/*"
        ]
    }
]

}

问题 - 仅当对象ACL设置为Public / read-only时,lambda才能访问S3资源。但是,当资源设置为“私有”时,Lambda会失败。

Bucket策略只允许访问存储桶。有没有办法给角色L读取资源访问权限?

1 个答案:

答案 0 :(得分:2)

存储在Amazon S3存储桶中的对象默认为私有。除非您希望覆盖授予对内容的访问权限的其他策略,否则无需使用Deny策略。

我建议:

  • 删除您的Deny政策
  • 为您的AWS Lambda函数创建 IAM角色,并授予访问该角色中的S3存储桶的权限。

根据需要随意添加 Bucket Policy 以供正常使用,但这不应影响您通过角色授予的Lambda函数访问权限。