Python 使用AWS Lambda中的Boto3从一个帐户中的S3 bucket复制到另一个帐户中的S3 bucket
我已经创建了一个S3 bucket,并在我的aws帐户下创建了一个文件。我的帐户与另一个帐户建立了信任关系,我可以使用Boto3将对象放入另一个帐户的存储桶中。如何使用Boto3将对象从我帐户中的bucket复制到另一个帐户中的bucket 当我使用下面的代码时,我看到“访问被拒绝”-Python 使用AWS Lambda中的Boto3从一个帐户中的S3 bucket复制到另一个帐户中的S3 bucket,python,python-3.x,amazon-s3,aws-lambda,boto3,Python,Python 3.x,Amazon S3,Aws Lambda,Boto3,我已经创建了一个S3 bucket,并在我的aws帐户下创建了一个文件。我的帐户与另一个帐户建立了信任关系,我可以使用Boto3将对象放入另一个帐户的存储桶中。如何使用Boto3将对象从我帐户中的bucket复制到另一个帐户中的bucket 当我使用下面的代码时,我看到“访问被拒绝”- source_session = boto3.Session(region_name = 'us-east-1') source_conn = source_session.resource('s3')
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可以访问源bucket,dest_conn可以访问目标bucket
我相信下载和上传文件是实现这一目标的唯一途径
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'])
另一种方法是将策略附加到目标bucket,以允许从托管源bucket的帐户进行访问。例如,类似于以下内容的操作应该有效(尽管您可能希望适当地收紧权限):
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“委托人”:{
“AWS”:“arn:AWS:iam:::root”
},
“行动”:“s3:*”,
“资源”:[
“arn:aws:s3:::dst_桶”,
“arn:aws:s3:::dst_bucket/*”
]
}
]
}
那么,源AWS帐户中托管的Lambda在写入目标AWS帐户中的存储桶时应该没有问题。您从哪里获得“\uuuuAWS\uSession()”?您应该使用诸如AssumeRole()之类的公共接口。aws会话是我定义的函数。我将在该职能中担任角色。定义在哪里?你有文档链接吗?或者这是你写的东西?我写了它,现在我已经在我的帖子中复制了该函数中的代码。你假设的角色有权限访问源bucket吗?使用SourceClient不会为bucket copy授予额外的权限。