【发布时间】:2016-03-17 23:28:03
【问题描述】:
我很难弄清楚如何完成这项工作。我们的客户端运行一个 Lambda 函数来生成数据以写入我们的存储桶。 Lambda 承担了一个角色,因此(我认为)我们所有允许客户端的整个帐户访问存储桶的尝试仍然会导致 AccessDenied 错误。
在查看我们的日志时,我看到为 STS 假定角色返回了 AccessDenied。但是,S3 控制台不允许我为通配符 Principal 添加策略,并且代入角色的会话 ID 会在每个会话中更改。
我从稀疏文档中的猜测是,我们需要为 lambda.amazonaws.com 服务提供信任关系。但是我在任何地方都找不到任何关于如何将其限制为仅从特定 Lambda 函数或帐户访问的文档。
我想要这样的东西,但对 Principal 有进一步的限制,因此任何帐户或 Lambda 函数都无法访问它。
{
"Version": "2012-10-17",
"Id": "Policy11111111111111",
"Statement": [
{
"Sid": "Stmt11111111111111",
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name-here/*",
"arn:aws:s3:::bucket-name-here"
]
}
]
}
更新
这个政策甚至不起作用。它仍然返回 AccessDenied。日志中列出的用户格式为arn:aws:sts::111111222222:assumed-role/role-name/awslambda_333_201512111822444444。
因此,我什至不知道如何允许 Lambda 函数写入 S3 存储桶。
【问题讨论】:
-
没有为 lambda 函数分配 IAM 角色(文档中的默认值为 LambdaExecRole)您不能编辑角色并分配自定义策略吗?
-
我相信该角色具有正确的权限,但也会对其进行检查。由于这是跨帐户写入,我发现您必须在两端设置权限,而且通常非常明确。例如,为帐户设置完全控制(通过规范 ID 或策略)不包括必须单独设置的角色。我不知道这如何与服务一起使用。
标签: amazon-s3 amazon-iam aws-lambda