AWS:无法使用流从 SSE-KMS 加密存储桶下载文件
Posted
技术标签:
【中文标题】AWS:无法使用流从 SSE-KMS 加密存储桶下载文件【英文标题】:AWS: Can not download file from SSE-KMS encrypted bucket using stream 【发布时间】:2021-03-28 08:58:13 【问题描述】:我有一个配置了启用加密的存储桶:
加密密钥类型:AWS Key Management Service 密钥 (SSE-KMS) 使用 AWS 托管密钥 (aws/s3)。 桶加密配置:我有 nodejs 项目使用流在 S3 存储桶上上传/下载文件。 问题是我可以成功上传,但是当我尝试使用流下载/获取文件时,它只发出一次“数据”事件,然后发出“结束”事件,但仍有数据可以消耗从下面的日志中看到。 你知道为什么会这样吗?
附加信息:
当我上传到未启用加密的存储桶时,它可以正常工作。 我的策略有“kms:Decrypt” 我试过用aws cli上传下载,成功了。 我们使用 s3.getSignedUrl('getObject', params) 创建文件 URL 使用 request.js下载流:
async downloadStream()
logger.info('Getting download stream...');
const url = await this.getFileUrl(); // getSignedUrl
const headers = ;
this.downloadStream = request( url, headers );
this.downloadStream.on('data', (chunk) => this.emit('data', chunk.length));
this.downloadStream.on('end', () => this.emit('end'));
this.downloadStream.on('error', (error = ) => this.emit('failure', error));
logger.info('Acquired download stream successfully');
this.downloadStream.pipe(this.response);;
日志信息:
完整的转会统计: 传输的字节数:13170 个字节中的 4491 个 左:8679 平均块大小:4491 字节 估计剩余块数:2 平均速度:0.000260375 MB/s 总传输时间:13.127 秒
【问题讨论】:
任何错误信息? 不,没有任何错误,流发出 'end' 事件。 【参考方案1】:在服务器端使用 KMS 加密的对象在访问它们时需要使用 SigV4 协议。 source: aws forum
创建 AWS.S3 客户端时,在选项中添加 signatureVersion: 'v4':
return new aws.S3(
credentials,
params:
bucket,
,
region,
signatureVersion: 'v4',
);
这解决了我的问题。
【讨论】:
以上是关于AWS:无法使用流从 SSE-KMS 加密存储桶下载文件的主要内容,如果未能解决你的问题,请参考以下文章
来自 Spark / Dataframes 的 AWS SSE-KMS 加密
如何通过 PHP SDK 在 Amazon S3 存储桶下创建文件夹?
AWS CloudWatch Logs Stream - 如何配置 awslogs 以将每天新的日志流从同一实例写入同一日志组?