我想创建或更新带有密码保护的图像文件。方案是,我们的infra团队将图像文件上传到AWS S3。稍后我们想用java中的密码保护这个图像文件。密码将自动生成,不会透露给任何人。如果任何人试图直接从AWS S3下载映像,则不应该打开它。我在AWS S3中尝试了Server-Side encryption
CopyObjectRequest request = new CopyObjectRequest(bucket, key, bucket, key);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setServerSideEncryption(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
request.setNewObjectMetadata(objectMetadata);
s3client.copyObject(request)
但我仍然可以打开它。还有其他办法吗。
答案 0 :(得分:0)
服务器端加密仅加密存储在磁盘上的数据。它不是保护数据访问的方法。
相反,您的要求似乎是:
最合适的解决方案是使用Amazon S3 Pre-Signed URL。
默认情况下,Amazon S3中的所有对象都是私有的。然后,您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:
Pre-Signed URL 可用于授予对S3对象的访问权限,作为“覆盖”访问控制的一种方式。通过附加到期时间和签名,可以通过URL访问通常的私有对象。这是一种在不需要Web服务器的情况下提供私有内容的好方法。
应用程序的责任适当验证用户,以确定是否允许他们访问S3中的对象。如果他们被授予访问权限,那么您的应用程序应该生成预签名的URL作为对象的经过身份验证的链接。该网址仅对有限的持续时间有效。
最好通过使用后端应用(可能在Amazon EC2或AWS Lambda上运行)执行身份验证然后生成URL来实现。然后,经过身份验证的用户可以使用预先签名的URL在分配的时间段内下载对象(例如,5分钟)。
与使用密码相比,此方法具有好处: