sts:assumed 角色无法访问 vpc 内的 lambda 运行

sts:assumed role can't access lambda running inside vpc

我的 lambda 函数有问题,它 运行 在通用 vpc 中。 lambda 函数基本上查询 dynamodb table 并发出请求以从 glacier 检索 s3 对象。 运行当我没有在 lambda 中指定 VPC 时没问题,但是当我这样做时它给我错误:

 "errorMessage": "User: arn:aws:sts::123456789012:assumed-role/NLM-INT-draps-lambda-role/retrieval-1 is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:123456789012:table/S3_log/index/ContentType-LastChecked-index"     

角色权限如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:RestoreObject",
                "s3:ListObjects",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::nlm-qa-int-draps-bucket",
                "arn:aws:s3:::nlm-qa-int-draps-bucket/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:UpdateItem",
                "dynamodb:UpdateTable"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:123456789012:table/S3_log",
                "arn:aws:dynamodb:us-east-1:123456789012:table/S3_log/index/item_status-index",
                "arn:aws:dynamodb:us-east-1:123456789012:table/S3_log/index/ContentType-LastChecked-index"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:nlm-int-draps-us-east-1-upload",
                "arn:aws:lambda:us-east-1::function:retrieval-1",
                "arn:aws:lambda:us-east-1:123456789012:function:final_lambda"
            ],
            "Effect": "Allow"
        }
    ]
} 

并且该角色还有一个信任关系策略,允许 lambda 代表上述角色通过 cloudevent 自动 运行:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

我还应该注意,即使我授予 lambda AdministratorAccess 角色权限,如果我 运行 VPC 内的 lambda 仍然会失败,所以这让我相信问题可能与权限无关。

在另一个 lambda 函数中,它也在同一 VPC 中 运行 由 S3 PUTS 触发以写入 dynamodb 我必须为 vpc 创建一个 dynamodb 端点才能访问 dynamodb,所以我认为这个问题可能是相关的.感谢任何帮助,谢谢!

根据您的情况描述,VPC 端点配置似乎导致此 Lambda 函数出现一些问题。您需要诊断原因或简单地删除 VPC 端点。

要为链接到 VPC 的 AWS Lambda 函数提供 Internet 访问权限(例如访问 DynamoDB 端点),您将需要以下内容之一:

  • 配置为使用 私有子网 的 AWS Lambda 函数具有指向 NAT 网关 的路由 table 条目在 Public 子网中,OR
  • 分配给 VPC 中出现的 Lambda 函数的弹性网络接口 (ENI) 的弹性 IP 地址

这将避免您为 DynamoDB 配置 VPC 端点。