Node.js 加密aws s3存储桶中的对象

Node.js 加密aws s3存储桶中的对象,node.js,encryption,amazon-s3,Node.js,Encryption,Amazon S3,我正在从我的应用程序中将一些图像/对象保存在aws s3 bucket中。首先,我从nodejs服务api获取签名url,并使用jqueryajax将图像或文件上传到签名url。我可以使用属性()中提供的链接打开图像或对象 我想为每个上传的对象提供安全性。即使是偶然的,如果任何匿名用户在某个地方获得了链接(),他也应该无法打开它。它们(对象)应该被访问,并且只打开一些情况,比如请求有一些头密钥值等。我通过在请求中指定头密钥值尝试了服务器端加密,如下所示 var file = do

我正在从我的应用程序中将一些图像/对象保存在aws s3 bucket中。首先,我从nodejs服务api获取签名url,并使用jqueryajax将图像或文件上传到签名url。我可以使用属性()中提供的链接打开图像或对象

我想为每个上传的对象提供安全性。即使是偶然的,如果任何匿名用户在某个地方获得了链接(),他也应该无法打开它。它们(对象)应该被访问,并且只打开一些情况,比如请求有一些头密钥值等。我通过在请求中指定头密钥值尝试了服务器端加密,如下所示

        var file = document.getElementById('fileupload').files[0];
        $.ajax({
            url: signedurl,
            type: "PUT",
            data: file,
            header:{'x-amz-server-side-encryption':'AES256'},               
            contentType: file.type,
            processData: false,
            success: function (result) {
                var res = result;

            },
            error: function (error) {
                alert(error);
            }
服务器端加密不会将加密对象保留在s3存储桶上吗?它是否仅在传输时加密,并在保存到s3存储之前解密


如果它将加密对象存储在s3存储上,那么如何使用属性中显示的链接打开它。

Amazon s3中的服务器端加密(SSE)对静止的对象(存储在磁盘上)进行加密,但在检索对象时对其进行解密。因此,它是一种透明的加密形式

如果您希望将Amazon S3中的对象保持为私有,但让特定授权用户可以使用它们,我建议使用预签名URL

这是通过让应用程序生成一个URL来实现的,该URL提供对AmazonS3中特定对象的有时间限制的访问。这些对象以其他方式保持私有,因此无法访问


请参阅文档:

我通过取消选中对象的“打开/下载和查看权限”属性使对象成为私有对象,但仍然可以使用链接()打开/查看对象。我想我必须在客户端加密文件并将其存储在s3上。因此,尽管有对象链接,任何用户甚至s3的所有者都无法查看/打开对象。他们应该从s3中检索对象并用私钥解密。在AmazonS3中访问对象的能力完全独立于加密。让我们把重点放在访问上。您的浏览器可能缓存了您的对象,因此请尝试在其他浏览器或其他计算机上打开它。它应该返回“拒绝访问”。如果仍然可以访问,那么您可能有一个有效的Bucket策略来授予访问权。第一步是再次将对象私有化,然后使用授予访问权限的方法。另外,请确保通过单击“属性”中的链接而不是使用“打开”命令来打开对象。