仅允许从特定的 Lambda [s3] 访问文件

Allow access to file only from specific Lambda [s3]

一个 s3 存储桶(静态网络托管)有一个特定的策略,拒绝每个人访问某个文件。

如何才能只允许特定的 lambda 函数访问它? (仅使用存储桶策略)

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Sid": "Authentication",
          "Effect": "Allow",
          "Principal": "*",
          "Action": "s3:GetObject",
          "NotResource": "arn:aws:s3:::web/auth.html"
      }
  ]
}

UPDATE :用这个改变以前的政策给出了期望的结果

{
    "Version": "2012-10-17",
    "Id": "Policy1477651215159",
    "Statement": [
        {
            "Sid": "Console administration",
            "Effect": "Allow",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::XXXX:role/role_lambda"
            },
            "Action": "s3:GetObject",
            "NotResource": "arn:aws:s3:::web/auth.html"
        }
    ]
}

Lambda 在执行角色中运行 运行。您可以为您的 lambda 函数创建一个客户 IAM 角色。参见 this

然后您可以使用该 IAM 角色授予对该 S3 对象的访问权限。请参阅此 article 以了解要遵循的步骤。

这是一个 CloudFormation 片段。您可以使用以下 IAM 政策声明允许您的 Lambda 角色访问 S3

"LambdaRolePolicy" : {
    "Type": "AWS::IAM::Policy",
    "Properties": {
        "PolicyName": "Lambda",
        "PolicyDocument": {
            "Statement" : [ {
                "Action" : [
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Effect" : "Allow",
                "Resource" : {
                    "Fn::Join": [ "", [
                        "arn:aws:s3:::",
                        { "Ref": "S3Bucket" },
                        "/*"
                    ] ]
                }
            } ]
        },
        "Roles" : [ { "Ref": "RootRole" } ]
    }
}

S3Bucket 资源是您的 S3 存储桶,RootRoleLambda 角色。