Ansible S3 对象上传到 BackBlaze returns 403 for PutObjectAcl

Ansible S3 object upload to BackBlaze returns 403 for PutObjectAcl

我正在尝试使用 Ansible's community S3 task 将文件上传到 S3 兼容的 BackBlaze,但是没有成功。

我的任务定义是:

- name: Install required dependencies
  pip: name=boto3

- name: Copy backup files to S3 bucket
  amazon.aws.aws_s3:
    bucket: personal-backup
    object: "{{ inventory_hostname }}/{{ item }}"
    src: "{{ item }}"
    mode: put
    permission: "private"
    s3_url: "https://s3.us-west-002.backblazeb2.com"
  environment:
    AWS_ACCESS_KEY: "<redacted>"
    AWS_SECRET_ACCESS_KEY: "{{ personal_backup_secret }}"
  loop: "{{ backup_files }}"

这似乎应该是正确的。但我不断收到此错误:

{"ansible_loop_var": "item", "boto3_version": "1.20.37", "botocore_version": "1.23.37", "changed": false, "error": {"code": "AccessDenied", "message": "not entitled"}, "item": "/home/user/file.txt", "msg": "Unable to set object ACL: An error occurred (AccessDenied) when calling the PutObjectAcl operation: not entitled", "response_metadata": {"host_id": "aZWQ4m", "http_headers": {"cache-control": "max-age=0, no-cache, no-store", "content-length": "139", "content-type": "application/xml", "date": "Sun, 16 Jan 2022 23:40:01 GMT", "x-amz-id-2": "aZWQ4mDC", "x-amz-request-id": "9c8d9f2f6"}, "http_status_code": 403, "request_id": "9c8d9f2f61", "retry_attempts": 0}}

这很奇怪,因为根据 BackBlaze documentation

The Put Object ACL call only supports the same canned ACL values mentioned previously. The call will succeed only when specified ACL matches the ACL of the bucket.

这意味着对象权限(“私有”)需要与存储桶权限相匹配...但是我的存储桶被标记为私有,所以应该已经没问题了。我正在使用的应用程序密钥确实具有“writeFiles”权限(在 UI 中确认),根据相同的 BackBlaze 文档页面,它应该有权访问“Put Object ACL”。

所以,我很惊讶它不起作用,并且不确定如何解决它。有人以前让 Ansible 与 BackBlaze 一起工作吗?谢谢!

编辑:哦,上传确实成功了(它需要一段时间才能显示在 UI 中)。但它仍然会出错,这对 Ansible 任务不利。我猜它必须在内部作为一个步骤上传,然后尝试将 ACL 调整为另一个步骤,这是失败的部分。

对于那些偶然发现这个问题的人...解决方案是生成一个具有“writeBuckets”权限的访问密钥(这是通过在下面的屏幕截图中选择“全部”来设置的,而不是选择特定的存储桶)。

这显然不是一个理想的解决方案,因为您必须让该应用程序密钥访问所有存储桶,而不仅仅是您想要用于特定应用程序用例的存储桶(这违反安全最佳实践)。这似乎不是所有人都需要的,因为您只会与那个桶进行交互。

我将向 BackBlaze 团队反馈它并不理想。