首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加完全控制头后无法从S3下载对象。

添加完全控制头后无法从S3下载对象。
EN

Stack Overflow用户
提问于 2017-09-22 05:43:52
回答 2查看 1.8K关注 0票数 0

设想情况:

我有基于IP条件的公开读写桶。

当匿名用户上传一个文件时,所有者是65a011a29cdf8ec533ec3d1ccaae921c,我不能重命名/移动/复制这样的文件,因为我缺乏权限,而且桶复制也因为同样的原因而无法工作。不过,我可以删除(因为我是桶所有者),其他人可以使用S3提供的链接下载。

此标头被添加到用于上载内容以解决复制问题的脚本中。

代码语言:javascript
复制
{'x-amz-grant-full-control': 'id=my canonical id'}

现在我完全控制了对象,并且复制工作正常,但是我不能使用S3、wget或CLI的链接下载它们,事实上,没有人可以.

代码语言:javascript
复制
HTTP request sent, awaiting response... 403 Forbidden
2017-09-22 00:04:32 ERROR 403: Forbidden.

在S3 web界面中,只有从文件概述中下载按钮才能工作。

为什么在应用此ACL之后,对象不再遵守桶策略?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-25 14:32:57

好吧,我想可能是这样,但我想确认一些细节。

S3有两个不同的权限模型:访问控制列表( Access Control List,ACL)和桶策略。

访问控制列表

S3中的每个对象都有自己的访问控制列表 (ACL)。这样,单个用户就可以授予对单个文件的读访问权限。这也可以授予桶所有者的访问权限,以便能够控制文件。

桶策略

这使用了一种更具有描述性的权限格式,类似于IAM策略。使用它,可以为跨帐户访问、特定IAM用户和角色等授予访问权限。

只有当对象的所有者也是的所有者时,才能观察到桶桶策略。

Options

  • 让您的脚本还允许对对象进行
  • 使用应用程序(EC2、Lambda)生成的签名urls允许用户安全地代表您上载
  • 动态更改对象所有者。这将涉及在PutObject上执行的lambda函数,如果桶所有者和对象所有者不同,则将对象复制回来。
票数 1
EN

Stack Overflow用户

发布于 2017-09-25 19:47:29

你好,杰米,谢谢你简洁的回答,我想出了这个脚本,把所有者从匿名改为桶所有者:

代码语言:javascript
复制
#!/usr/bin/env bash

ARRAY=($(aws s3 ls --recursive s3://mybucket/folder/ | awk '{print $4}'))

for key in "${ARRAY[@]}"; do
  echo "$key";
  aws s3api put-object-acl \
  --bucket mybucket        \
  --key "$key"             \
  --grant-full-control     \
  --no-sign-request        \
  "id=bucket owner canonical id"; done

aws s3 mv s3://mybucket/folder/ s3://mybucket/folder-copy/ --recursive
sleep 10;
aws s3 mv s3://mybucket/folder-copy/ s3://mybucket/folder/ --recursive

用了68m45.076s ~150 It的数据。不再计划使用匿名上传:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46357601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档