【发布时间】:2017-08-21 21:06:16
【问题描述】:
背景:
我有两个帐户 A 和 B。账户A 拥有一个桶my-bucket。我已授予帐户 B 访问此存储桶的权限 - 帐户 B 可以从该存储桶读取对象并将对象写入此存储桶。这按预期工作。
但是,帐户A 只能读取my-bucket 中它自己编写的那些对象。虽然它甚至可以列出帐户B 写入的那些对象,但它无法读取这些对象。
下面是我尝试使用 AWS CLI 和账户 A 的 AWS 配置从 my-bucket 下载所有对象时看到的内容。
download: s3://my-bucket/PN1492646400000.csv to tp/PN1492646400000.csv
download: s3://my-bucket/PN1491264000000.csv to tp/PN1491264000000.csv
download: s3://my-bucket/PN1493942400000.csv to tp/PN1493942400000.csv
download failed: s3://my-bucket/PN1503346865232.csv to tp/PN1503346865232.csv An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
download: s3://my-bucket/PN1495389670000.csv to tp/PN1495389670000.csv
download: s3://my-bucket/PN1496685403000.csv to tp/PN1496685403000.csv
download: s3://my-bucket/PN1497945130000.csv to tp/PN1497945130000.csv
download: s3://my-bucket/PN1500508800000.csv to tp/PN1500508800000.csv
正如大家所见,我可以下载所有文件,但PN1503346865232.csv(这是B 帐户使用java 方法putObject 编写的)。
到目前为止我尝试了什么:
我研究了以下两个问题:
-
Amazon S3 file 'Access Denied' exception in Cross-Account:其中一条评论要求用
acl做一个putObject,但没有指定acl是什么。 -
S3: User cannot access object in his own s3 bucket if created by another user:这是关于阻止帐户 B 将对象放入
my-bucket而不授予所有权访问权限。 仅设置此约束是否有助于我获得完全访问权限?
这就是我在将对象放入 java 代码时尝试放入 ACL 的方式。
AccessControlList acl = new AccessControlList();
acl.grantPermission(new CanonicalGrantee(S3_BUCKET_OWNER_ID), Permission.FullControl);
PutObjectRequest putObjectRequest = new PutObjectRequest(S3_BUCKET, remoteCleanedPrismFilename, fileStream, null)
.withAccessControlList(acl);
s3Client.putObject(putObjectRequest);
它抛出异常说:com.amazonaws.services.s3.model.AmazonS3Exception: Invalid id
问题:
- 我想知道我应该如何获得这个 ID。它不是 aws 帐户 ID,即 10-12 位数字吗?
- 即使我找到了这个ID,也会给这个ACL和
bucket-owner-full- control一样的吗?
【问题讨论】:
标签: java amazon-web-services amazon-s3