Amazon web services 访问s3上的私有文件

Amazon web services 访问s3上的私有文件,amazon-web-services,amazon-s3,authorization,digital-signature,privacy,Amazon Web Services,Amazon S3,Authorization,Digital Signature,Privacy,我有一个私人的s3桶。我正试图通过授权访问它。我只是通过使用AWS-SDK为bucket中的每个对象生成一个预签名url来实现这一点,这根本不实际。 此外,我还尝试配置bucket策略,并仅对特定范围的IP进行预授权,但它不起作用。我怎么知道那里出了什么问题? 您认为访问私有存储桶的最佳方法是什么?我有点困惑 policy: { "Version": "2008-10-17", "Id": "S3PolicyId1", "Statement": [ {

我有一个私人的s3桶。我正试图通过授权访问它。我只是通过使用AWS-SDK为bucket中的每个对象生成一个预签名url来实现这一点,这根本不实际。 此外,我还尝试配置bucket策略,并仅对特定范围的IP进行预授权,但它不起作用。我怎么知道那里出了什么问题? 您认为访问私有存储桶的最佳方法是什么?我有点困惑

policy:
{
    "Version": "2008-10-17",
    "Id": "S3PolicyId1",
    "Statement": [

        {
            "Sid": "IPDeny",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "public/private IP of ec2 instance/32"
                }
            }
        },
        {
            "Sid": "IPDeny",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "myIPAddress/32"
                }
            }
        }
    ]
}

我认为默认情况下,除非已通过策略授予访问权限,否则帐户将被限制访问S3。但是,S3默认设计为允许任何IP地址访问。因此,要阻止IP,您必须在策略中明确指定拒绝,而不是允许

您应该改变策略,从只允许从我的IP地址访问到拒绝从非我的IP地址的任何地方访问

所以我想你可能在用这个:

{
"Id": "S3PolicyId1",
"Statement": [
    {
        "Sid": "IPAllow",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3::: bucketname",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "CIDR Of Allowed IP"
            }
        }
    }
]
你应该试试这个:

{
"Id": "S3PolicyId1",
"Statement": [
    {
        "Sid": "IPDeny",
        "Effect": "Deny",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3::: bucket name*",
        "Condition": {
            "NotIpAddress": {
                "aws:SourceIp": "CIDR Of Allowed IP"
            }
        }
    }
]

我希望这会有所帮助

“我也尝试过配置bucket策略,只对特定范围的IP进行预授权,但它不会起作用。”好吧,这样做确实有效。如果您向我们展示了您尝试使用的允许IP访问的策略,这可能会有所帮助。我不知道您是如何在不知道我做了什么的情况下发现问题的!非常感谢。我现在尝试使用同一条语句三次访问3个不同的IP。但这似乎不允许访问任何资源。您能显示代码吗?我认为,您需要在同一位置添加每个IP:Condition:{“NotIpAddress:{”aws:SourceIp:“ip1”aws:SourceIp:“ip2”}你可以试试这个,但我不确定。在我保存它的那一刻,它正在删除其余的ip,并且只保留列表中的第一个ip。我将进一步研究语法!谢谢!