【以下的问题经过翻译处理】 大家好
我试图使用Account-B角色(而不是用户)将我的对象上传到Account-A的公共存储桶,但这些对象不是公共的。我想让它们公开或与存储桶具有相同的访问权限。
以下是我的尝试:
- 在Account-A中创建MyPublicBucket存储桶,并设置其策略:
{
"Version": "2012-10-17",
"Id": "Policy1484633382620",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws-cn:s3:::MyPublicBucket/*"
},
{
"Sid": "Stmt2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws-cn:iam::AccountB-ID:role/MyPutObjectRole"
},
"Action": "s3:PutObject",
"Resource": "arn:aws-cn:s3:::MyPublicBucket/*"
}
]
}
-
我在Account-B中将MyPutObjectRole与我的ec2关联,并在此ec2中调用“aws s3 cp --recursive dist s3://MyPublicBucket /”进行上传对象。对象已成功上传,但归Account-B所有,无法公开访问。
-
根据文档(https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html#grant-putobject-conditionally-1),我添加了以下内容:
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
并调用"aws s3 cp --recursive dist s3://MyPublicBucket/ --grants full=id=AccountA-CanonicalUserID"。
但却返回 "An error occurred (InvalidToken) when calling the PutObject operation: The provided token is malformed or otherwise invalid."。
我尝试使用 s3api,比如 "aws s3api put-object --bucket MyPublicBucket --key 1.txt --body 1.txt --grant-full-control id=AccountA-CanicalUserID",但返回同样的 InvalidToken 错误。
我想在使用授权时我必须提供"--profile",但由于我使用的是角色而不是用户,所以没有配置文件。
总之,我的问题是如何让账户 B 的 ec2 可以将公共对象上传到账户 A 的公共存储桶。