我有一些应用程序配置存储在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"
}
}
}
]
}
答案 0 :(得分:5)
如评论中所述,无法覆盖明确的Deny
。通过将Deny
与特定VPC相关联,您无法添加任何其他Allow
元素来抵消Deny
语句。
选项1
一种选择是将“拒绝,如果不是从VPC abc”声明更改为“允许来自VPC abc”。这将允许您向策略添加其他Allow
语句,以允许您从其他位置访问存储桶。
但是,有两个非常重要的注意事项:
因此,通过将Deny
更改为Allow
,您将不再在存储桶级别拥有VPC限制。
这可能符合也可能不符合贵组织的安全要求。
选项2
相反,您可以修改现有的Deny
以添加适用于AND情况的其他条件:
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-vpceid",
"aws:username": "your-username"
}
}
如果出现以下情况,此类情况将拒绝该请求:
因此,您应该能够维持限制请求到您的VPC的限制,但您的用户登录将允许从任何地方访问 。
注意这样做会打开安全漏洞。您应该确保将用户名限制为(a)没有分配任何访问密钥,以及(b)启用了MFA。