我正在尝试限制对我的AWS S3存储桶的访问,以便只有少数域,1个IP地址和AWS Lambda函数可以访问它。
这是我写的,但是没有用:-(
{
"Version": "2012-10-17",
"Id": "httpRefererPolicy",
"Statement": [
{
"Sid": "AllowRequestsReferred",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject","s3:GetObjectAcl"],
"Resource": "arn:aws:s3:::example/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://www.example.com/*",
"https://example.com/*",
"https://example.herokuapp.com/*",
"https://dfgdsfgdfg.cloudfront.net/*"
]
},
"IpAddress": {
"aws:SourceIp": "219.77.225.296"
}
}
},
{
"Sid": "DenyRequestsReferred",
"Effect": "Deny",
"NotPrincipal": {
"Service": "lambda.amazonaws.com"
},
"Action": ["s3:GetObject","s3:GetObjectAcl"],
"Resource": "arn:aws:s3:::example/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"https://www.example.com/*",
"https://example.com/*",
"https://example.herokuapp.com/*",
"https://dfgdsfgdfg.cloudfront.net/*"
]
},
"NotIpAddress": {
"aws:SourceIp": "219.77.225.296"
}
}
}
]
}
我写错了什么?
答案 0 :(得分:0)
您的政策规定:
如果请求是从某些网站引用的,则从(无效)IP地址进行 允许 GetObject
的访问。
因此,第一件事是GetObject
必须使用CIDR表示法,因此您应该使用:
IpAddress
第二,此策略中没有任何东西可以授予对Lambda函数的访问权限(因为ALLOW语句的IP地址上的 not 不是)。另外,您授予访问权限的方法似乎不太可行。我建议准予访问由Lambda函数使用的IAM角色。
我建议您仅创建"aws:SourceIp": "219.77.225.296/32"
语句,并独立地访问每个源。如果您要基于ALLOW
或referer
或Lambda授予访问权限,则需要:
IpAddress
的ALLOW referer
的ALLOW IpAddress
的ALLOW(您需要通过允许Lambda函数使用的IAM角色进行访问来实现此目的)仅在需要覆盖先前通过ALLOW授予的权限时使用DENY。最好尽可能避免DENY,以使事情更容易理解。