了解 S3 阻止公共访问
更新(2023 年 4 月 27 日): 亚马逊 S3 现在会自动启用 S3 封禁公共访问权限,并禁用所有 亚马逊云科技 区域中所有新 S3 存储桶的 S3 访问控制列表 (ACL)。
安全地存储数据是每个企业的关键原则。各公司在这一点和需要的时间和地点共享数据的需求之间取得了平衡。人类安全审查是帮助确保仅授予预期访问权限的强大工具。此外,如果加上自动护栏,它会更强大。大多数用例不需要特定类型的访问权限,即 “公共访问”,以至于大多数公司都希望自动检测并阻止它。
这可能让你想知道:“公开” 到底是什么意思?S3 封锁公共访问是如何运作的?在这篇文章中,我回答了这些问题,希望能阐明 S3 区块公共访问是如何帮助您保护您的 S3 存储桶免受公共访问的。
注意:
什么是 “公开”,我们如何检查它?
2018 年,我们
为了让 S3 一键封锁公共访问,我们会从您的 S3 存储桶策略中推断出您信任谁,而不是明确询问您。然后,我们会分析您的政策,看看它是否允许任何不信任的人访问。这听起来像是围成一圈,但关键在于,并不是你在政策中写的所有内容都可以单独信任。例如,你可以说你信任账户 111122223333。这是某人拥有和控制的东西。但是你真的不能说你信任所有名字叫 “安德鲁” 的人。世界上有太多的安德鲁斯无法做到这一点,没有人拥有或控制这个名字 “安德鲁”。信任他们所有人就是公共访问权限。你可以说你信任账户 111122223333 中的每个 “安德鲁”。但是,在那里,你的信任限度是基于账户,而不是名字。孤立地说,“名字” 根本不是一个值得信赖的概念。通过限制
以下是我们如何检查您的公共访问政策的摘要:
- 我们会检查您的政策,以找出您信任谁。
- 我们会检查您的政策,看看它是否允许除此之外的任何访问。
a. 如果是,那么我们说你的政策是公开的。如果您开启了 S3 阻止公共访问权限,那么我们会阻止整个策略更新。
b. 如果没有,那么一切都会照常运行。您不会注意到 S3 区块公共访问正在后台运行,从而保护您的存储桶免受公众访问。
将其付诸实践
现在,让我们通过一些示例来看看 S3 封锁公共访问是如何工作的。假设您有一个名为 DOC-EXAMPLE-BUCKET 的 S3 存储桶
已启 用 S3 封锁公共访问权限,并且想要附加新的存储桶策略。假设你写了以下政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "o-12345678"
}
}
}
]
}
该政策向组织中的所有人授予访问权限 o-123
45678。这可能是成千上万的用户和角色分布在成千上万的账户中。这是否意味着它是公开的?不是。这不是计算潜在访问权限的人数的问题。这是关于推断信任并确保仅向这些实体授予访问权限。在这种情况下,我们推断您信任该组织 o-12345678
,并检查是否允许在该组织之外进行任何访问。在这种情况下,没有额外的访问权限,因此该政策不公开。您可以安全地将此策略附加到您的存储桶。
接下来,假设你尝试将这个更复杂的策略附加到存储桶:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"aws:username": "Alice",
"aws:PrincipalTag/department": "finance"
},
"StringLike": {
"aws:PrincipalOrgID": "*"
},
"Bool": {
"aws:MultiFactorAuthPresent": true,
"aws:SecureTransport": true
},
"IpAddress": {
"aws:VpcSourceIp": "10.20.30.40"
}
}
}
]
}
这项政策有一大堆限制。来电者必须:
- 一个名叫
爱丽丝
的用户 , -
标有 depar
tementequ
al 等于财务, -
亚马逊云科技 组织 的一部分 , - 使用双因素身份验证,
- 使用安全 (https) 连接,以及
- 来自他们呼叫的 VPC 中的
10.20.30.40
地址。
这是公共政策吗?是的。有很多限制,但没有一个是值得信赖的。考虑这个问题的一种方法是想象一个任意的人 John Q Public 想要访问这个存储桶。他可以在自己的账户 中创建名为 Alice
的用户,为该用户附加相应的 部门
标签,为其账户创建 亚马逊云科技 组织,启用双因素身份验证,并使用安全连接。最后,他可以创建自己的 VPC,将 IP 地址 10.20.30.40
分配给他的一个实例,然后从该实例发出请求。这项政策有许多限制,但是 John 可以控制所有限制。由于此存储桶已启用 S3 阻止公共访问,因此您无法将此策略附加到该存储桶。您必须缩小策略范围以删除公共访问权限,然后才能将其附加。
ws: principalOrgid
)来避免公共访问 ,请参阅 S3 封锁公共访问文档。
爱丽丝
” 或 “任何有 部门
标签的人都等于 财务
”。
最后,让我们看一下同时使用允许和拒绝语句的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "* ",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringNotLike": {
"aws:PrincipalOrgID": "o-12345678"
}
}
}
]
}
该政策不公开。它最初可能看起来是公开的,因为它有一个允许所有人的访问权限。但是有一条拒绝声明剥夺了组织之外的任何访问权限 o-12345678。在这种情况下,我们推断您信任组织 o-12345678,我们会检查是否允许任何其他访问权限。此检查需要准确地弄清楚策略中所有允许语句和拒绝语句是如何相互作用的。为此,我们使用了自动推理,您可以在这篇
结论
希望你现在能直观地了解公共访问的含义以及我们如何检查它。您知道,启用 S3 区块公共访问后,亚马逊云科技 将从您的策略中推断出您信任的人,然后检查是否只有那些可信的身份才有访问权限。
如果您想超出公开/非公开的范围,则可以使用