因SSE致访问被拒,如何修改Boto3代码添加ServerSideEncryption='AES256'
解决Boto3 SSE加密导致的访问被拒问题
我来帮你搞定这个SSE加密的问题!你的访问被拒大概率是因为上传对象时没有满足目标S3桶的服务器端加密要求,或者下载的加密对象请求配置不对。下面是修改后的完整代码,我会详细说明改动点:
def download(self): s3 = boto3.client('s3') try: with open(self.flow_cells +'.zip', 'wb') as data: # 下载加密对象时Boto3会自动处理解密,无需额外参数(只要权限足够) s3.download_fileobj(self.source_s3_bucket, self.source_key, data) return True except botocore.exceptions.ClientError as error: print(error.response['Error']['Code']) def upload(self): s3 = boto3.client('s3') try: with open(self.flow_cells +'.zip', 'rb') as data: # 添加SSE加密配置,指定使用AES256加密存储对象 s3.upload_fileobj( data, self.output_s3_bucket, self.flow_cells +'.zip', ExtraArgs={'ServerSideEncryption': 'AES256'} ) return True except botocore.exceptions.ClientError as error: print(error.response['Error']['Code'])
关键改动说明:
- 上传方法(upload):在
upload_fileobj调用中新增了ExtraArgs参数,明确指定ServerSideEncryption='AES256'。这会强制S3在存储你上传的对象时使用AES-256服务器端加密,完全符合SSE的要求,这也是解决上传时访问被拒的核心修改。 - 下载方法(download):通常不需要额外配置,因为当目标对象是SSE加密时,Boto3会自动处理解密流程(前提是你的IAM账号拥有
s3:GetObject权限)。如果下载仍然报错,建议检查你的IAM权限是否包含读取加密对象的相关权限(比如s3:GetObjectVersion如果是版本化桶)。
内容的提问来源于stack exchange,提问作者user8128927
相关产品推荐
相关产品推荐

