我正在尝试使用Ansible 的社区 S3 任务将文件上传到与 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”,“已更改”:false,“错误”:{“code”:“AccessDenied”,“消息": "未授权"}, "item": "/home/user/file.txt", "msg": "无法设置对象 ACL:调用 PutObjectAcl 操作时发生错误 (AccessDenied):未授权", “response_metadata”:{“host_id”:“aZWQ4m”,“http_headers”:{“cache-control”:“max-age=0,无缓存,无存储”,“内容长度”:“139”, “内容类型”:“应用程序/xml”,“日期”:“星期日,2022 年 1 月 16 日 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 文档:
Put Object ACL 调用仅支持前面提到的相同的固定 ACL 值。只有指定的 ACL 与存储桶的 ACL 匹配时,调用才会成功。
这意味着对象权限(“私有”)需要与存储桶权限匹配......但我的存储桶被标记为私有,所以应该已经可以了。我正在使用的应用程序密钥确实具有“writeFiles”权限(在 UI 中确认),该权限应该可以根据同一个 BackBlaze 文档页面访问“Put Object ACL”。
所以,我很惊讶它不起作用,并且不知道如何解决它。以前有人让 Ansible 与 BackBlaze 一起工作吗?谢谢!
编辑:哦,上传确实有效(它需要一段时间才能显示在 UI 中)。但它仍然会出错,这对 Ansible 任务不利。我想它必须在内部作为一个步骤上传,然后尝试将 ACL 调整为另一个步骤,这是失败的部分。