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 端点。
我的 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 端点。