use*_*443 1 python amazon-s3 amazon-web-services boto3
我有一个带有给定access_key和的 S3 存储桶secret_access_key。我使用以下代码成功将文件上传到我的 S3 存储桶中。
import boto3
import os
client = boto3.client('s3',
aws_access_key_id = access_key,
aws_secret_access_key = secret_access_key)
upload_file_bucket = 'my-bucket'
upload_file_key = 'my_folder/' + str(my_file)
client.upload_file(file, upload_file_bucket, upload_file_key)
Run Code Online (Sandbox Code Playgroud)
现在,我想将 my_file 上传到新团队拥有的另一个存储桶中。因此,我无权访问access_key和secret_access_key。使用 boto3 和 Python 进行跨账户文件上传的最佳实践是什么?
您实际上可以使用相同的代码,但另一个 AWS 账户的所有者需要将存储桶策略添加到允许您的 IAM 用户访问的目标存储桶。它看起来像这样:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::their-bucket/*",
"Principal": {
"AWS": [
"arn:aws:iam::YOUR-ACCOUNT-ID:user/username"
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
将对象上传到另一个 AWS 账户拥有的存储桶时,我建议添加ACL= bucket-owner-full-control ,如下所示:
client.upload_file(file, upload_file_bucket, upload_file_key, ExtraArgs={'ACL':'bucket-owner-full-control'})
Run Code Online (Sandbox Code Playgroud)
这会将对象的所有权授予存储桶所有者,而不是上传的帐户。
| 归档时间: |
|
| 查看次数: |
5493 次 |
| 最近记录: |