Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services S3存储桶策略-隐式允许获取_Amazon Web Services_Amazon S3_Amazon Policy - Fatal编程技术网

Amazon web services S3存储桶策略-隐式允许获取

Amazon web services S3存储桶策略-隐式允许获取,amazon-web-services,amazon-s3,amazon-policy,Amazon Web Services,Amazon S3,Amazon Policy,当使用下面的bucket策略时,我看到它像预期的那样限制了PUT访问,但是在创建的对象上允许GET,即使没有什么应该允许这个操作 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPut", "Effect": "Allow", "Principal": { "AWS": "*"

当使用下面的bucket策略时,我看到它像预期的那样限制了PUT访问,但是在创建的对象上允许GET,即使没有什么应该允许这个操作

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowPut",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<BUCKET>/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "<IP ADDRESS>"
                    ]
                }
            }
        }
    ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“AllowPut”,
“效果”:“允许”,
“委托人”:{
“AWS”:“*”
},
“操作”:“s3:PutObject”,
“资源”:“arn:aws:s3:::/*”,
“条件”:{
“IP地址”:{
“aws:SourceIp”:[
""
]
}
}
}
]
}
我可以使用curl将文件从
放入
,如下所示:

curl https://<BUCKET>.s3-<REGION>.amazonaws.com/ --upload-file test.txt
curlhttps://.s3-.amazonaws.com/ --上传文件test.txt
文件上载成功,并显示在S3控制台中。由于某种原因,我现在可以从互联网上的任何地方获取该文件

curl https://<BUCKET>.s3-<REGION>.amazonaws.com/test.txt -XGET
curlhttps://.s3-.amazonaws.com/test.txt -XGET
这仅适用于使用上述方法上载的文件。在S3Web控制台中上载文件时,我无法使用curl获取它(访问被拒绝)。因此,我假设这是一个对象级权限问题。虽然我不明白为什么bucket策略不会隐式拒绝这种访问

在控制台中查看对象级权限时,通过控制台上载的文件(方法1)与从允许的
(方法2)上载的文件之间的唯一区别在于,方法2中的文件没有“所有者”、权限或元数据,而方法1文件具有所有这些

此外,当尝试使用Lambda脚本(boto3
download_file()
)获取对象时,该脚本假定角色具有对bucket的完全访问权限,对于使用方法2上载的对象,该脚本将失败。尽管对于使用方法1上载的对象成功。

问题摘要 总结一下这个问题:

  • 您有一个允许从给定源IP地址匿名上载对象的策略
  • 经过身份验证的用户无法读取这些对象(特别是lambda函数采用的Iam角色)
  • 未经身份验证的用户可以从任何IP读取这些对象
其他意见

  • 未经身份验证的用户无法删除该对象
预期的结果是:

  • 未经验证的用户可以从已知IP地址上载对象
  • 未经身份验证的用户不能从任何IP地址下载对象
  • 对象可由经过身份验证的Iam用户检索
根本原因 下面是正在发生的事情:

  • 匿名用户上载对象

  • 匿名用户成为对象所有者
  • 可通过检索对象acl进行验证(使用查询字符串对对象执行GET请求
    ?acl
    )-您将收到:

    <?xml version="1.0" encoding="UTF-8"?>
    <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
        <Owner>
            <ID>65a011a29cdf8ec533ec3d1ccaae921c</ID>
        </Owner>
        <AccessControlList>
            <Grant>
                <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>65a011a29cdf8ec533ec3d1ccaae921c</ID></Grantee>
                <Permission>FULL_CONTROL</Permission>
            </Grant>
        </AccessControlList>
    </AccessControlPolicy>
    
    
    

  • 感谢您的评论。关于你所要求的澄清,我已经用一些额外的信息修改了原来的帖子。基本上只是Lambda函数使用的角色。由于某种原因,GET操作被拒绝。这似乎很奇怪,好像对象级权限明确拒绝任何非匿名的内容,或者拒绝bucket所有者(我可以通过控制台下载)。因此,我不确定是什么在否定Lambda角色。>这就好像对象级权限明确否定了任何非匿名的内容,或者bucket owner<我相信这正是正在发生的事情。该对象是使用“匿名”所有者创建的,没有其他权限。您可以粘贴与lambda函数所承担的角色相关联的策略吗?我尝试在角色上使用内联策略指定特定访问权限,但最终使用“AmazonS3FullAccess”托管策略进行了测试,我得到了相同的行为(您应该能够在IAM策略中亲自检查).我只是尝试删除匿名创建的对象,不允许作为匿名用户。因此,我认为默认情况下它只允许GET操作。值得一提的是。好吧,我想我已经破解了它-有趣的挑战!对答案进行主要编辑,以更清晰地解释原因和解决方案。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "allow-anonymous-put",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::<BUCKETNAME>/*",
                "Condition": {
                    "IpAddress": {
                        "aws:SourceIp": "<IPADDRESS>"
                    },
                    "StringEquals": {
                        "s3:x-amz-acl": "bucket-owner-full-control"
                    }
                }
    
            },
            {
                "Sid": "deny-not-my-user-everything-else",
                "Effect": "Deny",
                "NotPrincipal": {
                    "AWS": "arn:aws:iam::<ACCOUNTNUMBER>:role/<ROLENAME>"
                },
                "NotAction": [
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": "arn:aws:s3:::<BUCKETNAME>/*"
            }
        ]
    }