Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用AWS Lambda中的Boto3从一个帐户中的S3 bucket复制到另一个帐户中的S3 bucket_Python_Python 3.x_Amazon S3_Aws Lambda_Boto3 - Fatal编程技术网

Python 使用AWS Lambda中的Boto3从一个帐户中的S3 bucket复制到另一个帐户中的S3 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')

我已经创建了一个S3 bucket,并在我的aws帐户下创建了一个文件。我的帐户与另一个帐户建立了信任关系,我可以使用Boto3将对象放入另一个帐户的存储桶中。如何使用Boto3将对象从我帐户中的bucket复制到另一个帐户中的bucket

当我使用下面的代码时,我看到“访问被拒绝”-

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授予额外的权限。