让 AWS Lambda 访问私有 S3 资源

Getting AWS Lambda access to private S3 resource

我们一直在努力解决与 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 资源。但当资源设置为 'private' 时,Lambda 失败。

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

存储在 Amazon S3 存储桶中的对象默认私有。没有必要使用 Deny 政策,除非您希望覆盖另一个授予内容访问权限的政策。

我会推荐:

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

随意添加 存储桶策略 以供正常使用,但这不应影响通过角色授予的 Lambda 函数访问权限。