复制的S3 Bucket默认不公开

时间:2016-02-11 21:18:11

标签: amazon-web-services amazon-s3

我有两个S3存储桶 -

  1. production
  2. staging
  3. 我想定期刷新staging存储桶,以便它包含所有最新的production对象进行测试,因此我使用了aws-cli,如下所示 -

    aws s3 sync s3://production s3://staging
    

    所以现在两个存储桶都有完全相同的文件。

    但是,对于任何给定的文件/对象,production链接有效且staging没有

    e.g。

    This works:   https://s3-us-west-1.amazonaws.com/production/users/photos/000/001/001/medium/my_file.jpg
    This doesn't: https://s3-us-west-1.amazonaws.com/staging/users/photos/000/001/001/medium/my_file.jpg
    

    staging存储桶的对象不是公共链接,默认情况下是私有的。

    有没有办法纠正这个或使用aws-cli避免这种情况?我知道我可以更改存储桶策略本身,但它之前使用的是所有文件。因此,我想知道复制文件是什么,这改变了他们的可见性。

    谢谢!

2 个答案:

答案 0 :(得分:1)

您应该能够添加--acl标志:

aws s3 sync s3://production s3://staging  --acl public-read

doc private中提到的,acl是默认的

答案 1 :(得分:0)

刚做了一些研究。

Frédéric的答案是正确的,但只是想进一步扩展。

默认情况下,

aws s3 sync并非真正的“同步”。它只是遍历源存储桶中的每个文件,并将文件复制到目标存储桶

  • 如果已存在具有相同名称的目标文件。我找了一个--force标志来强制覆盖,但显然不存在
  • 默认情况下,它不会删除目标目录中的“额外”文件(即源目录中不存在的文件)。 --delete标志将允许您执行此操作
  • 默认情况下复制权限。确实--acl public-read会将目标权限设置为公开可读,但这有两个问题 - (1)它只是盲目地为所有文件设置,你可能不需要,以及(2)它不起作用当你有几个不同权限的文件时。

有一个issue about it here和一个PR已经公开但截至今天尚未合并。

因此,如果您尝试像我一样进行完全盲目刷新以进行测试,那么最好的选择就是

  1. 右键单击控制台并点击staging

  2. ,彻底清空目标Empty广告管理
  3. 运行同步并盲目地将所有内容设置为public-read(其他可见性选项可用,请参阅文档here)。 - aws s3 sync s3://production s3://staging --acl public-read