【问题标题】:AWS S3 bucket AccessDenied when VPC is allowed允许 VPC 时 AWS S3 存储桶 AccessDenied
【发布时间】:2018-01-18 18:03:48
【问题描述】:

我已经使用这样的存储桶策略设置了 S3 存储桶:

{
"Version": "2012-10-17",
"Id": "NginxProxy",
"Statement": [
    {
        "Sid": "AllowByVpc",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::test/*",
        "Condition": {
            "StringEquals": {
                "aws:sourceVpc": "vpc-cf53cba8"
            }
        }
    },
    {
        "Sid": "DenyByVpc",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::test/*",
        "Condition": {
            "NotIpAddress": {
                "aws:SourceIp": [
                    "185.24.222.124"
                ]
            },
            "StringNotEquals": {
                "aws:sourceVpc": "vpc-cf53cba8"
            }
        }
    }
]

}

当我在同一 VPC (vpc-cf53cba8) 下的 EC2 实例上尝试命令 curl -k -v --key client.key --cert client.crt -T abc.jpg http://test.s3.us-east-1.amazonaws.com/abc.jpg 时,我得到 AccessDenied。

不幸的是,我不知道应该关注什么。有什么想法吗?

【问题讨论】:

  • 好的,但是当我设置公共访问时,curl 请求正确上传文件。那么?
  • 不确定您的问题是什么。如果您使用 curl,那么您将向 S3 发出未经身份验证的请求,并且需要公共访问权限。如果您想限制对特定 VPC 的访问,请使用经过身份验证的访问和存储桶策略,在 sourceVpc 上设置允许条件(或在非 sourceVpc 上设置拒绝条件)。
  • 但之前的存储桶策略允许我在同一 vpc 下的 EC2 实例上执行此操作。我认为“Principal”:“*”表示任何未经身份验证的访问。
  • 我认为(但不是 100% 肯定)这里的问题是您正在通过公共 Internet 访问 S3。这意味着您的 S3 策略看不到有关您的 AWS 网络的任何信息。为 S3 添加 VPC 终端节点。然后您的 EC2 实例将使用 AWS 私有网络与 S3 进行通信。
  • Bucket 策略不会接受该请求,因为它与任何 VPC 无关,它只是来自客户端的请求(如浏览器请求),而不是来自 AWS 服务、开发工具包或 CLI 的请求。

标签: amazon-web-services amazon-s3


【解决方案1】:

我通过为 S3 添加 VPC 端点解决了这个问题 - https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 2016-12-11
    • 2018-05-21
    • 2020-06-12
    • 2020-12-18
    • 2017-06-13
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多