Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 s3 如何读取AWS S3上匿名发布的文件?_Amazon S3_Aws Cli - Fatal编程技术网

Amazon s3 如何读取AWS S3上匿名发布的文件?

Amazon s3 如何读取AWS S3上匿名发布的文件?,amazon-s3,aws-cli,Amazon S3,Aws Cli,我在AWS S3上有一个bucket(我们称之为bucket-1),我无法读取它。我还有一个桶(我们称之为bucket-2),我可以从中阅读 我可以列出两个bucket的内容,但我不能复制bucket-1的任何内容 % aws s3 ls s3://bucket-1/ | grep 0046 2016-03-09 15:39:50 4413909 0046f326-6e7d-4c16-80e4-491fa0b19dd7 % aws s3 cp s3://bucket-1/0046f326

我在AWS S3上有一个bucket(我们称之为bucket-1),我无法读取它。我还有一个桶(我们称之为bucket-2),我可以从中阅读

我可以列出两个bucket的内容,但我不能复制bucket-1的任何内容

% aws s3 ls s3://bucket-1/ | grep 0046
2016-03-09 15:39:50    4413909 0046f326-6e7d-4c16-80e4-491fa0b19dd7

% aws s3 cp s3://bucket-1/0046f326-6e7d-4c16-80e4-491fa0b19dd7 .
A client error (403) occurred when calling the HeadObject operation: Forbidden
在试图弄明白这一点的过程中,我切换回使用AWS帐户的访问密钥,而不是IAM用户(假设AWS帐户基本上拥有所有权限)

开始挖掘 假设原因在权限中,我运行

% aws s3api get-bucket-acl --bucket my-bucket-1
% aws s3api get-bucket-acl --bucket my-bucket-2
普通的 它将我的AWS帐户显示为这两个存储桶的所有者

不同的 bucket-2有一个权限:对我的AWS帐户进行完全控制

bucket-1列出了多个权限,其中完全控制是而不是。它列出

  • 阅读
  • READ_ACP
  • 写入ACP
为了我的账户

在web控制台中,bucket-1中的对象没有任何权限集。bucket-2中的对象与它们所在的bucket具有相同的权限

很可能在两个存储桶中使用了不同的方法来存储文件。bucket-2中的对象很可能是通过API创建的,而bucket-1中的对象来自匿名帖子。(是的,bucket-1对每个人都有写权限。)

深入挖掘 即使使用AWS帐户的凭据,我也没有查询对象acl的权限

% aws s3api get-object-acl --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
A client error (AccessDenied) occurred when calling the GetObjectAcl operation: Access Denied

% aws s3api get-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7 local.file
A client error (AccessDenied) occurred when calling the GetObject operation: Access Denied

% aws s3api head-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
A client error (403) occurred when calling the HeadObject operation: Forbidden
问题 在一个实例中,我发现可以使用put对象acl将acl设置为bucket owner完全控制。我试过了。但是,您必须使用文件所有者的凭据来执行此操作—如果文件以匿名方式发布,您如何执行此操作

  • 我还能试什么
  • S3上的对象(如bucket)是否有所有者
  • 如果是,我可以在web控制台的哪里找到这些信息

    • 不允许匿名上传到您的存储桶。如果您这样做了,并且上传程序没有正确设置权限,那么您唯一可以执行的操作就是删除该对象

      % aws s3api get-object-acl --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
      A client error (AccessDenied) occurred when calling the GetObjectAcl operation: Access Denied
      
      % aws s3api get-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7 local.file
      A client error (AccessDenied) occurred when calling the GetObject operation: Access Denied
      
      % aws s3api head-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
      A client error (403) occurred when calling the HeadObject operation: Forbidden
      
      可以设置bucket策略,以便拒绝匿名上传,除非上传者将ACL设置为bucket owner full control,但这仅对将来的上传有用


      万一。。。是否有合法的匿名上传应用程序?非常可疑。

      查看桶策略应该会有所帮助。谢谢您的回答,我同意。我想不出“匿名上传的合法应用程序”。在我们当时的情况下,这只是最快的选择,而且一如既往——时机至关重要。