![](/img/trans.png)
[英]Aws copy data from one S3 bucket to another on same account using lambda python
[英]Copy from S3 bucket in one account to S3 bucket in another account using Boto3 in AWS Lambda
我已经创建了一个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'])
另一种方法是将策略附加到目标存储桶,以允许从托管源存储桶的帐户进行访问。 例如。 如下所示的内容应该可以工作(尽管您可能需要适当地收紧权限):
{ "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账户中的存储桶。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.