允许从特定 VPC 或控制台访问 S3 存储桶
Posted
技术标签:
【中文标题】允许从特定 VPC 或控制台访问 S3 存储桶【英文标题】:Allow S3 Bucket access from either specific VPC or console 【发布时间】:2017-04-12 10:52:40 【问题描述】:我有一些应用程序配置存储在 S3 存储桶(api 密钥)的文件中。我将 S3 存储桶配置为仅允许通过特定 VPC 端点进行访问,它将密钥与特定环境联系起来,并防止例如在临时或测试环境中意外使用了生产密钥。
但有时我需要修改这些密钥,这很痛苦。目前存储桶策略阻止控制台访问,所以我必须删除存储桶策略,更新文件,然后替换策略。
我怎样才能允许从控制台、特定 VPC 终端节点进行访问,而不是其他地方?
目前的政策,我已经尝试过但失败了:
"Version": "2012-10-17",
"Id": "Policy12345",
"Statement": [
"Sid": "Principal-Access",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::account-id:root"
,
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-keys-staging",
"arn:aws:s3:::my-keys-staging/*"
]
,
"Sid": "Access-to-specific-VPCE-only",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-keys-staging",
"arn:aws:s3:::my-keys-staging/*"
],
"Condition":
"StringNotEquals":
"aws:sourceVpce": "vpce-vpceid"
]
【问题讨论】:
为什么会有Deny
条件?默认情况下,Amazon S3 中的内容是私有的,因此仅当您希望覆盖通过其他方式授予的权限(例如授予 IAM 用户)时才需要Deny
。因此,您无法分配权限以允许特定用户(例如您!)访问存储桶。
要添加到@JohnRotenstein 评论,请参阅docs.aws.amazon.com/IAM/latest/UserGuide/…,特别是“请求被默认拒绝和策略中的明确拒绝之间的区别很重要。默认情况下,请求被拒绝,但是这可以被允许覆盖。相反,如果策略明确拒绝请求,则不能覆盖拒绝。您已指定明确的拒绝,它不能被覆盖。
【参考方案1】:
如 cmets 中所述,不能覆盖显式 Deny
。通过包含绑定到特定 VPC 的 Deny
,您无法添加任何其他 Allow
元素来抵消该 Deny
语句。
选项 1
一种选择是将您的“如果不是来自 VPC abc 则拒绝”语句更改为“如果来自 VPC abc 则允许”。这将允许您在策略中添加额外的 Allow
语句,以允许您从其他地方访问存储桶。
但是,有两个非常重要的注意事项伴随着这样做:
-
任何通过 IAM 策略具有“通用”S3 访问权限的用户都可以访问存储桶,并且
将允许来自所述 VPC 的任何角色/用户进入您的存储桶。
因此,通过将 Deny
更改为 Allow
,您将不再有存储桶级别的 VPC 限制。
这可能会也可能不会在您组织的安全要求范围内。
选项 2
相反,您可以修改现有的 Deny
以添加适用于 AND 情况的其他条件:
"Condition":
"StringNotEquals":
"aws:sourceVpce": "vpce-vpceid",
"aws:username": "your-username"
这种情况会拒绝请求,如果:
-
请求不是来自您的魔法 VPC,并且
请求不是来自您的用户名
因此,您应该能够保持限制对您的 VPC 的请求的限制,除非您的用户登录将被允许从任何地方访问存储桶。
请注意您这样做打开的安全漏洞。您应确保将用户名限制为 (a) 未分配任何访问密钥,并且 (b) 已启用 MFA。
【讨论】:
以上是关于允许从特定 VPC 或控制台访问 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章
允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略