gpt4 book ai didi

amazon-web-services - 跨账户上传时如何更改 S3 文件所有权

转载 作者:行者123 更新时间:2023-12-04 18:19:48 25 4
gpt4 key购买 nike

我有一个应用程序将一些文件上传(复制)到另一个 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 存储桶的文件问题是,当它上传文件到这个bucket时,这个文件的所有权,仍然是 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所有, 我在政策上做错了什么吗?

最佳答案

如果您必须将文件从账户 A 复制到账户 B,那么您应该在写入文件之前让账户 A 承担账户 B 中的角色。如果由于某种原因您无法在账户 B 中担任角色来执行此操作,那么您可以设置访问权限以允许对存储桶所有者进行完全控制:

aws s3 cp --acl bucket-owner-full-control localFile s3://bucketname/path/filename

存储桶所有者可以使用以下规则强制执行此要求:
{
"Sid": "CrossAccountWritePermissionsDenier",
"Effect": "Deny",
"Principal": {
"AWS": "arn-of-account-A-pusher"
},
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucketname/path/given/access/*",
"arn:aws:s3:::bucketname/other/path/given/access/*"
],
"Condition": {
"StringNotEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}

这种方法的一个警告是,如果您有一个帐户 C(读者),该帐户也被帐户 B(存储桶所有者)授予了帐户 A(写入者)将文件推送到的路径的读取权限,那么帐户 C 将无法读取帐户 A 推送的文件,因为它们实际上并不属于帐户 B。这就是您面临的问题。

如果账户 A 在推送之前在账户 B 中扮演一个角色,那么该文件将由账户 B 拥有,因此账户 C 将能够读取它。否则,帐户 B 将不得不移动文件(因为帐户 B 具有完全访问权限),然后帐户 C 将能够在其新位置读取文件。

理论上,您可以通过将文件从存储桶所有者的角色复制到自身来更改所有权:
aws s3 cp s3://bucketname/path/filename s3://bucketname/path/filename

但是,除非您正在更改某些内容(例如所有者、元数据、acl 等),否则它不会让您这样做。因此,您只能从存储桶所有者的角色执行此操作,而不能从原始(非存储桶所有者)上传者的角色执行此操作。

关于amazon-web-services - 跨账户上传时如何更改 S3 文件所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51530206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com