当前位置: 首页 > 知识库问答 >
问题:

AWS:无法使用流从SSE-KMS加密桶下载文件

高运诚
2023-03-14

我有一个配置了加密功能的存储桶:

  • 加密密钥类型:AWS密钥管理服务密钥(SSE-KMS)
  • 使用AWS托管密钥(AWS/s3)。Bucket加密配置:

我有一个nodejs项目,使用streams在S3 bucket上上传/下载文件。问题是,我可以成功上传,但当我尝试使用stream下载/获取文件时,它只会发出一次“data”事件,之后会发出“end”事件,但仍有数据需要使用,如下面的日志所示。你知道为什么会这样吗?

其他信息:

  • 当我上传到我没有启用加密的bucket时,它工作正常
  • 我的政策是“kms:解密”
  • 我尝试过使用aws cli进行上传和下载,结果很成功
  • 我们使用s3创建文件URL。getSignedUrl('getObject',params)
  • 使用请求。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秒

共有1个答案

祖利
2023-03-14

使用KMS在服务器端加密的对象在访问它们时需要使用SigV4协议。资料来源:aws论坛

创建AWS时。S3客户端在选项中添加signatureVersion:“v4”:

  return new aws.S3({
        credentials,
        params: {
            bucket,
        },
        region,
        signatureVersion: 'v4',
    });

这解决了我的问题。

 类似资料:
  • 我在谷歌上搜索了一下,看起来我必须进行一些签名才能获得临时URL,比如:http://docs.aws.amazon.com/amazons3/latest/dev/restauthentication.html

  • decrypt方法中没有提供KMS密钥。这是否意味着KMS密钥在cyphertext Blob中被加密了?如果是... 如何授予解密加密密文Blob的权限? 如果要解密AWS服务中的值,是否创建IAM角色来执行此操作,并配置KMS密钥以允许该角色进行解密?

  • 我已使用IAM角色启动了一个ec2实例,并将以下策略与IAM角色关联。 然而,当我试图从ec2-实例中使用aws cli下载文件时,我一直拒绝访问。 当我模拟策略并对bucket中的对象执行操作时,会收到消息“allowed”。当我访问时,我可以看到正确的实例配置文件附在实例上http://169.254.254/latest-metadata/iam/info 我有什么明显的遗漏吗?

  • 场景:我们的一个脚本使用boto3 kms api使用kms加密和解密来放置和获取SSM参数。SSM param put工作非常好,并且在EC2 SSM param存储中使用安全字符串添加参数(解密为true)。我们所面临的问题是当解密为真时尝试获取SSM参数值。运行此脚本的相应lambda代码在尝试运行以下boto3脚本时(在运行get_ssm_parameters_by_path时)抛出以下错

  • 问题内容: 亚马逊称该 加密和解密是透明处理的,因此您无需修改​​应用程序即可访问数据 我的应用程序(Rails,MySQL,Elasticsearch)构建了大量图形,因此查询了许多数据。根据我以前对数据库加密的经验,它确实会影响数据的检索速度(因为我们只能说记录在读取和解密后是否符合条件)。 有没有相关的基准?或者,也许您曾经使用过AWS的这种服务器端加密?我是否完全需要担心性能变化? 对我来

  • 我正在使用chromedriver和selenium从应用程序下载文件。但当点击应用程序中的下载按钮时,它给出的错误是“” Chromedriver版本:2.21硒版本:2.53.0 初始化chrome驱动和更改下载位置的代码: 错误是: 有人能帮我吗?我可以手动从Chrome下载文件。