如何默认将AWS S3存储桶中的所有对象设为公开?

2023-11-23

我正在使用 PHP 库将文件上传到我的存储桶。我已将 ACL 设置为公共读写它工作正常,但文件仍然是私有的。

我发现如果我改变受赠者给所有人它使文件公开。我想知道的是我该如何制作所有对象的默认受让人在我的桶中设置为“每个人”。或者还有其他解决方案吗公开文件默认情况下?

我正在使用的代码如下:

public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
    if ($input === false) return false;
    $rest = new S3Request('PUT', $bucket, $uri);

    if (is_string($input)) $input = array(
        'data' => $input, 'size' => strlen($input),
        'md5sum' => base64_encode(md5($input, true))
    );

    // Data
    if (isset($input['fp']))
        $rest->fp =& $input['fp'];
    elseif (isset($input['file']))
        $rest->fp = @fopen($input['file'], 'rb');
    elseif (isset($input['data']))
        $rest->data = $input['data'];

    // Content-Length (required)
    if (isset($input['size']) && $input['size'] >= 0)
        $rest->size = $input['size'];
    else {
        if (isset($input['file']))
            $rest->size = filesize($input['file']);
        elseif (isset($input['data']))
            $rest->size = strlen($input['data']);
    }

    // Custom request headers (Content-Type, Content-Disposition, Content-Encoding)
    if (is_array($requestHeaders))
        foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v);
    elseif (is_string($requestHeaders)) // Support for legacy contentType parameter
        $input['type'] = $requestHeaders;

    // Content-Type
    if (!isset($input['type'])) {
        if (isset($requestHeaders['Content-Type']))
            $input['type'] =& $requestHeaders['Content-Type'];
        elseif (isset($input['file']))
            $input['type'] = self::__getMimeType($input['file']);
        else
            $input['type'] = 'application/octet-stream';
    }

    // We need to post with Content-Length and Content-Type, MD5 is optional
    if ($rest->size >= 0 && ($rest->fp !== false || $rest->data !== false)) {
        $rest->setHeader('Content-Type', $input['type']);
        if (isset($input['md5sum'])) $rest->setHeader('Content-MD5', $input['md5sum']);

        $rest->setAmzHeader('x-amz-acl', $acl);
        foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v);
        $rest->getResponse();
    } else
        $rest->response->error = array('code' => 0, 'message' => 'Missing input parameters');

    if ($rest->response->error === false && $rest->response->code !== 200)
        $rest->response->error = array('code' => $rest->response->code, 'message' => 'Unexpected HTTP status');
    if ($rest->response->error !== false) {
        trigger_error(sprintf("S3::putObject(): [%s] %s", $rest->response->error['code'], $rest->response->error['message']), E_USER_WARNING);
        return false;
    }
    return true;
}

Go to http://awspolicygen.s3.amazonaws.com/policygen.html Fill in the details such as: enter image description here In Action select "GetObject" Select "Add Statement" Then select "Generate Policy"

复制文本示例:

{
  "Id": "Policy1397632521960",
  "Statement": [
    {
      "Sid": "Stmt1397633323327",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucketnm/*",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}

现在转到 AWS S3 控制台,在存储桶级别,单击“属性”,展开“权限”,然后选择“添加存储桶策略”。将上面生成的代码粘贴到编辑器中并点击保存。

默认情况下,您存储桶中的所有项目都将是公开的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何默认将AWS S3存储桶中的所有对象设为公开? 的相关文章

随机推荐

  • Pandas 使用 read_sql_table 使用过多内存

    我正在尝试将 Postgres 数据库中的表读入 Python 表大约有 800 万行和 17 列 数据库大小为 622MB 我可以使用 psql 将整个表导出到 csv 然后使用 pd read csv 读取它 它工作得很好 Python
  • Android,使用 javah 生成 jni 头文件,显示找不到 org.opencv.core.Mat 的错误

    当我用 jni 编译 java 类中的本机方法时 我只是遇到了一个恼人的问题javah生成 JNI 头文件 如果该类使用了第3方包 例如 org opencv core Mat 则javah会显示找不到 org opencv core Ma
  • 获取函数的元数

    在 Javascript 中 如何确定为函数定义的形式参数的数量 注意 这不是arguments调用函数时的参数 而是定义函数时使用的命名参数的数量 function zero Should return 0 function one x
  • 如何从Python中的url中删除scheme?

    我正在使用一个返回 url 的应用程序 用Flask 我想要URL显示给用户尽可能干净 所以我想删除http 从中 我看了看 发现了urlparse库 但找不到任何如何执行此操作的示例 最好的方法是什么 如果urlparse是不是太过分了
  • Interface Builder 中带有自动 NSNumberFormatter 的 NSTextField

    我制作 iOS 应用程序已经有一段时间了 但我正在尝试 MacOS 开发 我正在向我的 UI 添加一个 NSTextField 我注意到在 Xcode 中图形小部件中的选项之一是 NSTextField with NSNumberForma
  • Javascript DOM 树复制用于操作

    由于页面的 DOM 树是活动的并且始终反映在浏览器中 因此出于某种目的修改此 DOM 树而不影响实际渲染的树的最佳方法是什么 假设我的目的是交换某些子节点并查看 DOM 树仍然保持多么相似 创建重复树是唯一的解决方案吗 如果是的话 有没有一
  • 您必须在安全防火墙配置中使用 form_login 配置要由防火墙处理的检查路径

    我有网络服务 它是我的 常规 用户的提供者 我想为我的管理员使用 FosUserBundle 以上是我的安全配置 普通用户登录没有问题 但是当我想以管理员身份登录时 我收到以下消息 您必须在安全防火墙配置中使用 form login 配置要
  • Django 测试表没有被创建

    我正在尝试为我的 django 项目编写测试用例 但是当我运行时 manage py 测试 命令 它正在创建测试数据库 但没有创建任何表 并且我收到一个错误 表明表不存在 欢迎任何建议 这是我通过 manage pyspectdb gt m
  • PySpark 数据帧 to_json() 函数

    我有一个如下所示的数据框 gt gt gt df show 10 False id name age salary 10001 alex 30 75000 10002 bob 31 80000 10003 deb 31 80000 1000
  • 使用 twitter4j 停止 Twitter 流并返回状态列表

    使用 Twitter4j 提供的代码示例 我希望在收集 1 000 个状态列表后停止流 并返回此列表 我怎样才能做到这一点 public class Stream public List
  • 如何在 Windows 之间切换 python 版本

    我正在尝试在 python 版本之间切换3 6 6 and 3 7 0在窗户中 我试过py 3 6 6并且不起作用 寻找选项py h 没有找到 我看到了一些关于在 python 版本之间切换的答案2 x and 3 x通过增加 python
  • 复选框值 0 或 1

    在很多情况下 我有如下复选框
  • 类型“System.Web.IHtmlString”在未引用的程序集中定义

    现在有点失落 我正在按照以下文章来测试 学习嵌套布局 http blogs msdn com b marcinon archive 2010 12 15 razor nested layouts and redefine sections
  • 如何从 XSD 架构构建数据库并导入 XML 数据

    我有一个复杂的 XSD 架构和数百个符合该架构的 XML 文件 如何自动创建相关的 SQL Server 表来存储 XML 数据 我考虑过使用 XSD 模式创建 C 类xsd exe工具 并让 Subsonic 之类的东西弄清楚如何从中创建
  • Visual Studio 2012 中的经典 ASP 调试禁用应用程序调试

    我想调试Classic ASP网站位于Visual Studio 2012 with IIS Express 因此 我附上了iisexpress exe in VS 2012 但它显示Application Debugging is dis
  • 检测并删除文本区域中的 URL

  • Kendo UI Grid 序列号列

    我试图将 Kendo 网格的第一列作为串行索引 它不受行记录排序的影响 我有什么办法可以实现这个目标吗 谢谢 您可以使用模板列来实现此目的 这是一个现场演示 展示了如何做到这一点 http jsbin com olutin 10 edit
  • 为什么 Python 返回负时区值?

    For 时间 时区 Python 文档说 本地 非 DST 时区的偏移量 以 UTC 以西的秒数为单位 西欧大部分地区为负值 美国为正值 英国为零 有谁知道为什么它对西欧大部分地区返回负值 这些国家处于正抵消状态 而不是负抵消状态 示例 布
  • iOS 8 中自动调整 UITableViewCell 大小

    我有一个 UITableViewCell 子类 其中包含多行标签 我希望单元格根据该标签的内容动态调整自身大小 我知道 iOS 8 引入了基于自动布局约束的自动调整单元格大小 并且我已经在 SO 上找到了几个这样的示例 但我在正确实现此行为
  • 如何默认将AWS S3存储桶中的所有对象设为公开?

    我正在使用 PHP 库将文件上传到我的存储桶 我已将 ACL 设置为公共读写它工作正常 但文件仍然是私有的 我发现如果我改变受赠者给所有人它使文件公开 我想知道的是我该如何制作所有对象的默认受让人在我的桶中设置为 每个人 或者还有其他解决方