首页 > 解决方案 > 使用 AWS 资源策略有条件地允许来自 Lambda 的默认 VPC 的流量

问题描述

对于 Amazon EMR 提取、转换、加载 (ETL) 步骤,我有一个最低权限存储桶策略,该策略拒绝对所有资源的所有操作,除非流量通过 S3 VPC 终端节点传入(如下所示)。不幸的是,我的 Lambda 函数被拒绝访问存储桶,因为默认情况下,Lambda 在安全 VPC 中运行函数,Lambda 拥有该 VPC,并且未连接到我账户的默认 VPC。该文档建议我将我的函数连接到 VPC。但是,由于我的环境中的一些限制,我无法将我的函数连接到我的 VPC,我只能使用 Lambda 默认 VPC。仅从我的 VPC 终端节点和 Lambda 函数对我的 S3 存储桶进行最低权限访问的解决方法是什么?

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Deny",
         "Principal":"*",
         "Action":"s3:*",
         "Resource":[
            "arn:aws:s3:::inputs3bucket",
            "arn:aws:s3:::inputs3bucket/*"
         ],
         "Condition":{
            "StringNotEquals":{
               "aws:SourceVpce":"S3VPCGWEndpoint"
            }
         }
      }
   ]
}

标签: amazon-web-servicesamazon-s3amazon-ec2aws-lambda

解决方案


如果您的 Lambda 使用 IAM 角色进行交互,您可以NotPrincipal通过引用 Lambdas IAM 角色来使用该策略。

调整后的政策如下所示。

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Deny",
        "NotPrincipal": {
            "AWS": [
                "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
            ]
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::inputs3bucket",
            "arn:aws:s3:::inputs3bucket/*"
        ],
        "Condition": {
            "StringNotEquals": {
                "aws:SourceVpce": "S3VPCGWEndpoint"
            }
        }
    }]
}

通过使用此策略,它将拒绝 IAM 角色不是指定 IAM 角色且流量不是来自 VPC 终端节点的所有操作。


推荐阅读