限制对S3 Lambda函数的S3存储桶访问

时间:2016-03-09 16:21:45

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

我在S3存储桶中有一个文件,我想限制访问,因此只能从特定的Lambda函数中访问它。我尝试编写一个Bucket策略(在我的区域,帐户等信息中进行修改)来完成此任务:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1457474835965",
      "Action": "s3:*",
      "Principal": "*",
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::my-bucket/file.txt",
      "Condition": {
        "ArnNotEquals": {
          "aws:SourceArn": "arn:aws:lambda:region:account:function:FunctionName"
        }
      }
    }
  ]
}

但是,在调用Lambda函数时,仍然拒绝访问该文件。我怎样才能完成我想做的事情?

3 个答案:

答案 0 :(得分:3)

您的lambda函数将以特定角色运行。创建一个策略,授予对s3资源的访问权限并将其添加到角色中。

示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::my-bucket/file.txt"
    }
  ]
}

答案 1 :(得分:0)

{
    "Version": "2012-10-17",
    "Id": "Policy1592828725895",
    "Statement": [
        {
            "Sid": "ListRelevantDirectories20150907",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": [
                    "arn:aws:iam::123456789999:role/LamdaRole",
                    "arn:aws:iam::123456789999:root",
                    "arn:aws:iam::123456789999:user/John"
                ]
            },
            "Action": "s3:*",
             "Resource": [
                "arn:aws:s3:::bucket_name",
                "arn:aws:s3:::bucket_name/*"
            ]
        }
    ]
}

答案 2 :(得分:0)

您也可以尝试。

from yourapp import User
me = User('admin', 'admin@example.com')
db.session.add(me)
db.session.commit()

Principal元素指定允许或拒绝访问资源的用户,帐户,服务或其他实体。 因此,为“主体”对象中的lambda函数提供iam角色。您可以从

获得

lambda的控制台->权限->执行角色。

有关更多信息,请查看以下页面: https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html