让 AWS Lambda 访问私有 S3 资源
Getting AWS Lambda access to private S3 resource
我们一直在努力解决与 S3 和 Lambda 相关的资源权限问题。
我们有一个 root 帐户,它有 -
账户 A - 存储桶所有者
帐户 B - 用于上传(通过 CORS)并授予对 S3 图像的访问权限
ROLE L - 我们有一个 lambda 函数,它为这个角色分配了完整的 S3 访问权限
存储桶具有如下访问策略 -
{
"Version": "2012-10-17",
"Id": "Policyxxxxxxxxx",
"Statement": [
{
"Sid": "Stmt44444444444",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::xxxxxxxxxxxx:user/account-A",
"arn:aws:iam::xxxxxxxxxxxx:role/role-L"
]
},
"Action": [
"s3:*",
],
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*"
]
}
]
}
问题 -
仅当对象 ACL 设置为 Public/read-only 时,lambda 才能访问 S3 资源。但当资源设置为 'private' 时,Lambda 失败。
桶策略只允许访问桶。有没有办法给角色 L 读取资源的权限?
存储在 Amazon S3 存储桶中的对象默认私有。没有必要使用 Deny
政策,除非您希望覆盖另一个授予内容访问权限的政策。
我会推荐:
- 删除您的
Deny
政策
- 为您的 AWS Lambda 函数创建一个 IAM 角色,并授予访问该角色中 S3 存储桶的权限。
随意添加 存储桶策略 以供正常使用,但这不应影响通过角色授予的 Lambda 函数访问权限。
我们一直在努力解决与 S3 和 Lambda 相关的资源权限问题。
我们有一个 root 帐户,它有 - 账户 A - 存储桶所有者 帐户 B - 用于上传(通过 CORS)并授予对 S3 图像的访问权限 ROLE L - 我们有一个 lambda 函数,它为这个角色分配了完整的 S3 访问权限
存储桶具有如下访问策略 -
{
"Version": "2012-10-17",
"Id": "Policyxxxxxxxxx",
"Statement": [
{
"Sid": "Stmt44444444444",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::xxxxxxxxxxxx:user/account-A",
"arn:aws:iam::xxxxxxxxxxxx:role/role-L"
]
},
"Action": [
"s3:*",
],
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*"
]
}
]
}
问题 - 仅当对象 ACL 设置为 Public/read-only 时,lambda 才能访问 S3 资源。但当资源设置为 'private' 时,Lambda 失败。
桶策略只允许访问桶。有没有办法给角色 L 读取资源的权限?
存储在 Amazon S3 存储桶中的对象默认私有。没有必要使用 Deny
政策,除非您希望覆盖另一个授予内容访问权限的政策。
我会推荐:
- 删除您的
Deny
政策 - 为您的 AWS Lambda 函数创建一个 IAM 角色,并授予访问该角色中 S3 存储桶的权限。
随意添加 存储桶策略 以供正常使用,但这不应影响通过角色授予的 Lambda 函数访问权限。