【发布时间】:2023-05-10 08:12:01
【问题描述】:
我有一个应用程序将一些文件上传(复制)到另一个 AWS 账户中的 S3 存储桶,我使用 AWS SDK (Nodejs) 中的 copyObject 命令
var params = {
Bucket: "MyBucket_AccountB",
CopySource: encodeURI('/Accunt_A_Bocket/file.png'),
Key: "file.png",
ACL: 'bucket-owner-full-control'
};
s3.copyObject(params, function(err, datas) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(datas); // successful response
});
这段代码,从不同的 AWS 账户运行,比如说,AWS_ACCOUNT_A,并将文件上传到AWS_ACCOUNT_B 中的 S3 存储桶问题是,当它将文件上传到这个存储桶时,这些文件的所有权,仍然是AWS_ACCOUNT_A。
我想知道在上传文件时如何将文件的所有权授予AWS_ACCOUNT_B。这里有人可以给我一些指导吗?
更新:
我使用了这个政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::MY_ACCOUNT_B_ID:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A",
"arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A/*"
]
}
]
}
但上传的文件仍归Account_A所有,我是否在政策中做错了什么?
【问题讨论】:
-
你昨天问了同样的问题,得到了正确答案:*.com/questions/51510472/…。如果此答案不符合您的目标,请修改您的问题,使其更具体。
-
那个问题是关于其他一些问题,由你给出的答案解决了,这是不同的,更多的是在编码部分。
-
您的代码在哪里运行(云、桌面等)?请记住,您不授予 S3 对象的所有权。所有者由您使用的凭据确定。使用正确的 IAM 账户凭证。这意味着您必须使用账户 B 的凭证将文件复制到账户 B 的存储桶中以将所有者设置为账户 B。账户 B 的凭证将需要对账户 A 的存储桶的权限(读取权限)。
-
@John Hanley 我的代码在 EC2 中运行,但我应该如何在代码中使用假设规则?我不明白这部分
-
在这种情况下,您不需要使用 AssumeRole。在账户 A 的 S3 存储桶中创建允许账户 B 读取对象的策略。不需要代码,只需一个存储桶策略。当您从帐户 A 复制对象时,请记住使用帐户 B 凭据。Internet 上有很多示例。这是来自 AWS 的一个:docs.aws.amazon.com/AmazonS3/latest/dev/…
标签: amazon-web-services amazon-s3 aws-sdk s3-bucket