【问题标题】:Restricting S3 bucket access to an AWS Lambda function限制对 AWS Lambda 函数的 S3 存储桶访问
【发布时间】:2020-07-04 23:36:32
【问题描述】:

我在 S3 存储桶中有一个文件,我想限制其访问,以便只能从特定 Lambda 函数中访问它。我尝试编写存储桶策略(在我的信息中添加区域、帐户等)来完成此操作:

{
  "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 函数被调用时,对该文件的访问仍然被拒绝。我怎样才能完成我想做的事情?

【问题讨论】:

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


    【解决方案1】:

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

    例子:

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

    【讨论】:

    • 这可以通过拒绝声明或类似的东西来完成,就像我上面尝试的那样?具有完全 S3 访问权限的用户仍然可以查看文件的内容。
    • 当然可以。您无法阻止具有完全 S3 访问权限的人查看任何文件 - 除非您向用户/组添加其他策略,明确拒绝对所需资源执行 S3 操作。
    • 看起来他们在“角色”页面上的验证不像网站其他地方那样严格。我有"Resource":"arn:aws:s3:::/my-bucket/file.txt" 而不是"Resource":"arn:aws:s3:::my-bucket/file.txt"。解决了我的访问问题。
    【解决方案2】:
    {
        "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/*"
                ]
            }
        ]
    }
    

    【讨论】:

      【解决方案3】:

      你也可以试试。

      {
        "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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-13
        • 2014-10-21
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 2022-12-09
        • 2020-10-10
        • 1970-01-01
        相关资源
        最近更新 更多