允许从特定 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 策略

访问受限于 VPC 端点的 S3 网站从 VPC 内部获得 403

AWS S3 存储桶策略允许从特定 URL 的访问

Amazon S3 存储桶策略只允许访问特定的 http

S3:AJAX POST 没有“访问控制允许来源”

使用 Amazon S3 阻止公有访问