限制AWS Lambda函数访问S3存储桶

3

我有一个文件在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个回答

4

您的Lambda函数将在特定角色下运行。创建一个授权访问s3资源的策略并将其添加到角色中。

示例:

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

这个能用拒绝语句或类似的方式来实现吗?就像我之前尝试过的那样?一个拥有完全S3访问权限的用户仍然可以查看文件的内容。 - nnnm
1
当然可以。除非您为用户/组添加了明确拒绝所需资源的S3操作的附加策略,否则无法阻止具有完全S3访问权限的某人查看任何文件。 - mickzer
看起来他们在“角色”页面上的验证不像网站其他地方那么严格。我把 "Resource":"arn:aws:s3:::/my-bucket/file.txt" 改成了 "Resource":"arn:aws:s3:::my-bucket/file.txt",这样就解决了我的访问问题。 - user393219

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/*"
            ]
        }
    ]
}

0

你也可以试试。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1457474835965",
      "Action": "s3:*",
      "Effect": "Allow",
      "Principal": {
         "AWS": "arn:aws:iam::${Id}:role/${lambdaName}-${region}-lambdaRole"
       },
      "Resource": "arn:aws:s3:::my-bucket/file.txt"
    }
  ]
}

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接