AWS桶政策的反向代理
我试图使用S3存储作为一个简单的虚拟主机,但是想要把它背后的反向代理能够分层一些必要的安全控制措施。AWS桶政策的反向代理
我有,我想限制对S3的Web访问的反向代理相关的IP地址。当我在存储桶策略中应用基于IP的限制时,虽然它似乎使帐户中的管理交互非常难以阻止。
我想不会破坏通过控制台/ IAM用户/联合角色从帐户中访问,但启用HTTP访问S3网站只是反向代理相关的IP地址。
对什么是需要启用Web访问表明,我需要这个政策声明,所以我已经包括它开始与AWS文档。
{
"Id": "S3_Policy",
"Statement": [
{
"Sid": "AllowWebAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mybucket/*"
]
}
]
}
然后我想限制网络流量到一组特定的IP,所以我添加了这个语句。
{
"Id": "S3_Policy",
"Statement": [
{
"Sid": "AllowWebAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mybucket/*"
]
},
{
"Sid": "DenyNonProxyWebAccess",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"99.99.99.1/32",
"99.99.99.2/32",
"99.99.99.3/32",
"99.99.99.4/32",
"99.99.99.5/32"
]
}
}
}
]
}
这种拒绝策略具有阻止我从与IAM用户访问我的帐户内的能力的意想不到的后果或联合承担的角色,所以我增加了一个明确允许这些资源。如果可能的话,我想只是为了“账户”而放置一个毯子。这让我有了这个政策,而且这似乎并不符合我的愿望。我似乎无法将其作为我的用户进行管理,也无法从代理访问网络内容。
{
"Id": "S3_Policy",
"Statement": [
{
"Sid": "AllowWebAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mybucket/*"
]
},
{
"Sid": "DenyNonProxyWebAccess",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"99.99.99.1/32",
"99.99.99.2/32",
"99.99.99.3/32",
"99.99.99.4/32",
"99.99.99.5/32"
]
}
}
},
{
"Sid": "AllowAccountUsersAccess",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:IAM::999999999999:user/[email protected]",
"arn:aws:IAM::999999999999:user/[email protected]",
"999999999999"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::my bucket"
]
}
]
}
有没有办法有一个S3存储是仅限于选择的IP范围的网络访问,而无需中断从账户管理桶本身的能力的静态虚拟主机?
有访问可以在Amazon S3的桶被授予资源多种方式:
- IAM权限
- 桶政策
- 预标识的URL
如果访问请求满足任何以上,他们将被授予访问权限(虽然拒绝可能会覆盖它)。
IAM权限用于将权限分配给一个用户或组。例如,如果您想要访问存储桶,则可以添加创建策略并将其作为IAM用户分配给您。如果您希望所有管理员访问存储桶,请将其置于IAM组中,并将策略分配给该组。以这种方式进行的所有访问都需要使用AWS凭据(无匿名访问)完成。
一个桶政策通常用于授予匿名访问(无需证书),但可以包括一些限制,例如IP地址范围,仅支持SSL,和时间的一天。这是您授予访问您的反向代理服务器的方式,因为它不会将凭据作为其请求的一部分发送。
甲前置签名URL可以通过应用程序生成的授予临时访问到特定对象。该URL包含验证访问的计算签名。这通常用于在HTML页面上生成链接(例如链接到私人图像)。
你的情况
所以,首先,你应该授予访问你自己和你的管理员,使用类似的策略:
{
"Id": "S3_Policy",
"Statement": [
{
"Sid": "AllowWebAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mybucket/*"
]
}
]
}
注意,没有Principal
,因为它适用于任何用户/组已被分配此策略。
接下来,您希望授予对您的反向代理的访问权限。这可以通过一个桶政策来完成:
{
"Id": "S3_Policy",
"Statement": [
{
"Sid": "DenyNonProxyWebAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"99.99.99.1/32",
"99.99.99.2/32",
"99.99.99.3/32",
"99.99.99.4/32",
"99.99.99.5/32"
]
}
}
}
]
}
该政策允许(Allow
)访问指定的水桶,但前提是请求从规定一个IP地址来。
通过Allow
授予访问权总是优于拒绝访问,因为Deny
总是覆盖Allow
。因此,谨慎使用Deny
,因为一旦被拒绝,它就不能被允许(例如,如果拒绝阻止管理访问,则不能再允许访问)。拒绝主要用在你肯定想阻止某些事情的地方(例如一个已知的坏角色)。
VPC端点
最后一个值得考虑的选择是S3使用VPC端点。这允许VPC和S3之间的直接通信,而不必通过互联网网关。这非常适合私有子网中的资源希望与S3进行通信而不使用NAT网关的情况。
可以将附加策略添加到VPC端点以定义哪些资源可以访问VPC端点(例如您的反向代理范围)。存储桶策略可以专门引用VPC终端,允许来自该访问方法的请求。例如,您可以配置允许仅从特定VPC访问的存储桶策略 - 这对于将存取/测试/产品存取分隔为存储区很有用。
但是,它可能不适合您的给定用例,因为它会强制 S3流量通过VPC端点,即使在反向代理之外也是如此。这可能不是你的体系结构所期望的行为。
底线: IAM策略授予用户访问权限。桶策略授予匿名访问权限。
您当然不会“需要”您列出的第一项政策,实际上您应该很少使用该政策,因为它授予对存储区的完整访问权限。