【发布时间】:2021-01-30 09:44:04
【问题描述】:
我需要创建一个 AWS 存储桶策略来阻止除我们的办公室 IP 之外的所有外部 IP 地址,但仍允许 Lambda 函数访问存储桶。
我知道如何使用 AWS VPC 和 NAT 来完成这项工作,但是由于涉及的高成本,客户不想激活这些。
到目前为止,这是我的存储桶策略的样子,但它不起作用:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "GiveSESPermissionToWriteEmail",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::files-dev/*"
},
{
"Sid": "SourceIP",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::files-dev/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"81.111.111.111/24"
]
}
}
},
{
"Sid": "GiveLambdaPermisssion",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::6XXXXXX:role/app-backend-dev-lambdaFunctionRole-1XXXX"
],
"Service": "lambda.amazonaws.com"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::files-dev/*"
}
]
}
我想我已经阅读了所有我能找到的与此相关的 AWS 文档,但我找不到我要找的东西。这可能是因为他们的文档非常混乱,并且没有涵盖所有功能。我还在 StackOverflow 和其他论坛上搜索过解决方案,但没有任何效果。
【问题讨论】:
-
在默认情况下禁用对存储桶的所有访问时,为什么需要“阻止所有外部 IP 地址” 的策略?除非您通过策略允许,否则不允许访问任何存储桶,因此不清楚为什么您不会删除该不适当的访问授权,而不是尝试加倍努力并抵消不应存在的授权。你能解释一下吗?
-
当我开始这个项目时,这个存储桶是公开的。直到现在还可以。它托管了一些每个人都需要访问的文件。现在我们正在通过托管在不同服务器上的脚本获取文件,我们需要为该服务器提供对存储桶的 IP 访问权限,同时也需要 lambda。像你说的那样扭转事情不会有太大的作用,或者我错过了什么。我仍然需要反转规则,然后授予对 IP 的访问权限,而不是拒绝然后授予对 lambda 的访问权限。所以基本上我需要反过来做同样的事情,还是我做错了什么?
-
我已经尝试过相反的方法,但不行。如果我删除公共访问权限,那么我将无法允许我的办公室 IP 访问存储桶中的文件。我需要对存储桶的访问权限是公开的,但只允许 1 个 IP 地址 + lambda 函数权限来查看文件。
-
“如果我删除公共访问权限” ...您的意思是什么?如果您谈论的是block public access settings,那么您可能误解了该功能的目的,这解释了您为什么要努力做到这一点。
标签: amazon-web-services amazon-s3 aws-lambda