[英]List directory contents of an S3 bucket using Python and Boto3?
[英]List encrypted object in S3 using python boto3
我正在尝试将文件从一个帐户(源帐户)中的 S3 存储桶移动到另一个帐户(目标帐户)中的 S3 存储桶我正在使用 sagemaker notebook,所以我有一个 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'],
aws_secret_access_key=temp_credentials['SecretAccessKey'],
aws_session_token=temp_credentials['SessionToken'],
region_name = 'us-east-1')
response = client.list_objects(Bucket='source bucket')
print(response)
当我运行上述脚本时,出现错误:
调用 ListObjects 操作时发生错误(AccessDenied):Access Denied源存储桶中的对象已加密。 我是否必须添加任何权限才能解密? 不知道为什么我无法列出对象。
在属于不同 AWS 账户的 S3 存储桶之间复制文件时,您将需要一组可从源存储桶读取并写入目标存储桶的凭证。
相反,如果您使用两个不同的凭据,则需要使用一组凭据下载文件,然后使用另一组凭据上传,而不是在一次操作中复制对象。
因此,我建议您使用一组凭证(例如myteamrole
IAM 角色),然后:
这将允许使用一组凭据执行CopyObject()
操作。
我还建议在复制对象时指定ACL = bucket-owner-full-control
。 这会将对象的所有权授予目标 AWS 账户,这可以避免一些权限问题。 这还需要对存储桶策略的PutObjectAcl
权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.