繁体   English   中英

使用 python boto3 列出 S3 中的加密对象

[英]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 角色),然后:

  • 将策略附加到 IAM 角色以允许对源存储桶进行 GetObject 访问,以及
  • 存储桶策略附加到允许从上述 IAM 角色访问 PutObject 的另一个 AWS 账户中的目标存储桶

这将允许使用一组凭据执行CopyObject()操作。

我还建议在复制对象时指定ACL = bucket-owner-full-control 这会将对象的所有权授予目标 AWS 账户,这可以避免一些权限问题。 这还需要对存储桶策略的PutObjectAcl权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM