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

use*_*629 1 amazon-s3 amazon-web-services 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"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ser 6

正如评论中所提到的,有一个明确的Deny不能被覆盖.通过将Deny绑定包含在特定的VPC中,您无法添加任何其他Allow元素来抵消该Deny语句.

选项1

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

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

  1. 任何通过IAM策略进行"通用"S3访问的用户都可以访问存储桶,并且
  2. 来自所述VPC的任何角色/用户都将被允许进入您的桶.

因此,通过更改DenyAllow,您将不再在桶级别具有VPC限制.

这可能是也可能不在贵组织的安全要求范围内.

选项2

相反,您可以修改现有内容Deny以添加可在AND情况下工作的其他条件:

"Condition": {
  "StringNotEquals": {
    "aws:sourceVpce": "vpce-vpceid",
    "aws:username": "your-username"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 请求不是来自您的魔法VPC,AND
  2. 该请求不是来自您的用户名

因此,您应该能够保持限制请求到您的VPC的限制,除了您的用户登录将允许从任何地方访问存储桶.

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