首页 > 解决方案 > 无需使用 cli 从特定 IP 源下载 s3 文件

问题描述

我需要在我的 aws vpc 中的许多实例中下载一个文件(例如:https : //hematestpolicy.s3.amazonaws.com/test/ca-dev2.png)s3 对象,而无需安装 aws cli。该文件应受到保护,只能在 VPC 内访问。我在我的 s3 存储桶 hematestpolicy 上应用了以下存储桶策略。我能够使用 aws s3 ls 命令在我的实例中查看文件,但无法使用 wget 命令下载它。任何人都可以建议它是否可以实现或更好的解决方案,将文件私有到 vpc 并在不使用 AWS CLI 的情况下下载

`

{
    "Version": "2012-10-17",
    "Id": "CreditApplications",
    "Statement": [
        {
            "Sid": "AllowCreditAppProcessing",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::975472539761:root",
                    "arn:aws:iam::975472539761:role/hema-ghh"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::hematestpolicy",
                "arn:aws:s3:::hematestpolicy/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "172.31.0.0/16",
                        "192.168.2.6/16"
                    ]
                }
            }
        },
        {
            "Sid": "DenyEveryoneElse",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::hematestpolicy",
                "arn:aws:s3:::hematestpolicy/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "172.31.0.0/16",
                        "192.168.2.6/16"
                    ]
                },
                "ArnNotEquals": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::975472539761:role/hema-ghh",
                        "arn:aws:iam::975472539761:root"
                    ]
                }
            }
        }
    ]
}`

标签: linuxamazon-web-servicesamazon-s3acl

解决方案


除非您有 VPC 端点,否则所有传出连接都将通过公共源(对于公共实例,这将是它们通过 Internet 网关的公共 IP,而对于私有实例,这将是通过 NAT)。

如果您想限制只允许通过 VPC 检索对象,您应该考虑使用S3 的 VPC 端点。通过创建它并将其添加到您的路由表中,它实际上还将提供到 S3 的内部连接,而不是使用公共互联网。

完成此操作后,您可以创建一个存储桶策略,将请求完全限制到该 VPC 终端节点的源。

例如,以下策略将拒绝不是来自 VPC 端点的访问。

{
   "Version": "2012-10-17",
   "Id": "Policy1415115909152",
   "Statement": [
     {
       "Sid": "Access-to-specific-VPCE-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::awsexamplebucket1",
                    "arn:aws:s3:::awsexamplebucket1/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpce": "vpce-1a2b3c4d"
         }
       }
     }
   ]
}

请注意,当使用拒绝所有内容的存储桶策略时,会将对该存储桶的所有访问(包括管理任务)限制为只能从该源 VPC 端点获得,因此您应该尝试限制操作的范围,即GetObject.


推荐阅读