如何解决使用python boto3列出S3中的加密对象
我正在尝试将文件从一个帐户(源帐户)中的S3存储桶移动到另一帐户(目标帐户)中的S3存储桶 我正在使用sagemaker笔记本,所以我有一个sagemaker角色。 我在具有完全s3访问权限和fullsagemaker访问权限的团队帐户中也有角色,并且在信任关系中,我给了目标帐户角色arn和sagemaker角色arn。 目标帐户在其信任策略中还具有我的团队角色arn和sagemaker角色arn。
我试图承担我的团队角色,然后承担复制文件的目标角色。
import boto3
sts_client = boto3.client('sts')
assumed_teamrole_object = sts_client.assume_role(DurationSeconds=1800,RoleArn='myteamrole',RoleSessionName='test1')
assumed_destrole_object = sts_client.assume_role(DurationSeconds=1800,ExternalId='externalid provided by destination account',RoleArn='destination account role',RoleSessionName='test2')
temp_credentials = assumed_destrole_object['Credentials']
session=boto3.session.Session(aws_access_key_id=temp_credentials['Access KeyyId'],aws_secret_access_key=temp_credentials['SecretAccessKey'],aws_session_token=temp_credentials['SessionToken'],region_name = 'us-east-1')
client = session.client('s3',aws_access_key_id=temp_credentials['AccessKeyId'],region_name = 'us-east-1')
response = client.list_objects(Bucket='source bucket')
print(response)
当我运行上述脚本时,出现错误:
调用ListObjects操作时发生错误(AccessDenied):访问被拒绝 源存储桶中的对象已加密。我是否必须添加任何权限才能最终解密?不知道为什么我不能列出对象。
解决方法
在属于不同AWS账户的S3存储桶之间复制文件时,您将需要一个一组凭据,可以从源存储桶中读取并写入到目标存储桶。
相反,如果您使用的是两个不同的凭据,那么您将需要使用一组凭据下载文件,然后使用另一组凭据上传,而不是通过一个操作来复制对象。
因此,我建议您使用一组凭据(例如,myteamrole
IAM角色),然后:
- 将策略附加到IAM角色,该策略允许对源存储桶进行GetObject访问,并且
- 将存储桶策略附加到另一个AWS账户中的目标存储桶,以允许来自上述IAM角色的PutObject访问
这将允许使用一组凭据进行CopyObject()
操作。
我还建议在复制对象时指定ACL = bucket-owner-full-control
。这会将对象的所有权授予目标AWS账户,这可以避免一些权限问题。这还需要对“存储桶策略”拥有PutObjectAcl
权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。