允许从特定VPC或控制台访问S3 Bucket

时间:2017-04-12 10:52:41

标签: amazon-web-services amazon-s3 amazon-iam

我有一些应用程序配置存储在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"
                }
            }
        }
    ]
}

1 个答案:

答案 0 :(得分:5)

如评论中所述,无法覆盖明确的Deny。通过将Deny与特定VPC相关联,您无法添加任何其他Allow元素来抵消Deny语句。

选项1

一种选择是将“拒绝,如果不是从VPC abc”声明更改为“允许来自VPC abc”。这将允许您向策略添加其他Allow语句,以允许您从其他位置访问存储桶。

但是,有两个非常重要的注意事项:

  1. 通过IAM策略进行“通用”S3访问的任何用户都可以访问存储桶,
  2. 来自所述VPC的任何角色/用户都将被允许进入您的存储桶。
  3. 因此,通过将Deny更改为Allow,您将不再在存储桶级别拥有VPC限制。

    这可能符合也可能不符合贵组织的安全要求。

    选项2

    相反,您可以修改现有的Deny以添加适用于AND情况的其他条件:

    "Condition": {
      "StringNotEquals": {
        "aws:sourceVpce": "vpce-vpceid",
        "aws:username": "your-username"
      }
    }
    

    如果出现以下情况,此类情况将拒绝该请求:

    1. 请求不是来自您的魔法VPC,而是
    2. 请求不是来自您的用户名
    3. 因此,您应该能够维持限制请求到您的VPC的限制,但您的用户登录将允许从任何地方访问

      注意这样做会打开安全漏洞。您应该确保将用户名限制为(a)没有分配任何访问密钥,以及(b)启用了MFA。