我已经创建了一个S3存储桶,并在aws帐户下创建了一个文件。我的帐户与另一个帐户建立了信任关系,我可以使用Boto3将对象放入另一个帐户的存储桶中。如何使用Boto3将对象从帐户中的存储桶复制到另一个帐户中的存储桶?
使用以下代码时,我看到“访问被拒绝”-
source_session = boto3.Session(region_name = 'us-east-1')
source_conn = source_session.resource('s3')
src_conn = source_session.client('s3')
dest_session = __aws_session(role_arn=assumed_role_arn, session_name='dest_session')
dest_conn = dest_session.client ( 's3' )
copy_source = { 'Bucket': bucket_name , 'Key': key_value }
dest_conn.copy ( copy_source, dest_bucket_name , dest_key,ExtraArgs={'ServerSideEncryption':'AES256'}, SourceClient = src_conn )
就我而言,src_conn可以访问源存储桶,dest_conn可以访问目标存储桶。
我相信通过下载和上传文件来实现这一目标的唯一方法。
AWS会话
client = boto3.client('sts')
response = client.assume_role(RoleArn=role_arn, RoleSessionName=session_name)
session = boto3.Session(
aws_access_key_id=response['Credentials']['AccessKeyId'],
aws_secret_access_key=response['Credentials']['SecretAccessKey'],
aws_session_token=response['Credentials']['SessionToken'])
答案 0 :(得分:0)
另一种方法是将策略附加到目标存储桶,以允许从托管源存储桶的帐户进行访问。例如。如下所示的内容应该可以工作(尽管您可能需要适当地加强权限):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<source account ID>:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::dst_bucket",
"arn:aws:s3:::dst_bucket/*"
]
}
]
}
然后,在源AWS账户中托管的Lambda写入目标AWS账户中的存储桶应该没有问题。