密码保护的图像文件

时间:2017-03-22 06:31:38

标签: java amazon-web-services amazon-s3 passwords

我想创建或更新带有密码保护的图像文件。方案是,我们的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)

但我仍然可以打开它。还有其他办法吗。

1 个答案:

答案 0 :(得分:0)

服务器端加密仅加密存储在磁盘上的数据。它不是保护数据访问的方法。

相反,您的要求似乎是:

  • 在Amazon S3上存储一些数据(例如图像),保持私密
  • 有选择地允许人们在获得授权后下载

最合适的解决方案是使用Amazon S3 Pre-Signed URL

默认情况下,Amazon S3中的所有对象都是私有的。然后,您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:

  • 单个对象的访问控制列表权限
  • Bucket Policy(根据路径,IP地址,引荐来源等授予广泛访问权限)
  • IAM用户和组(向具有AWS凭据的用户授予权限)
  • 预签名网址

Pre-Signed URL 可用于授予对S3对象的访问权限,作为“覆盖”访问控制的一种方式。通过附加到期时间和签名,可以通过URL访问通常的私有对象。这是一种在不需要Web服务器的情况下提供私有内容的好方法。

应用程序的责任适当验证用户,以确定是否允许他们访问S3中的对象。如果他们被授予访问权限,那么您的应用程序应该生成预签名的URL作为对象的经过身份验证的链接。该网址仅对有限的持续时间有效。

最好通过使用后端应用(可能在Amazon EC2或AWS Lambda上运行)执行身份验证然后生成URL来实现。然后,经过身份验证的用户可以使用预先签名的URL在分配的时间段内下载对象(例如,5分钟)。

与使用密码相比,此方法具有好处

  • 正确验证用户(通过您的代码),而不仅仅是信任知道密码的人
  • 它允许您记录访问,以便您知道谁正在访问该对象
  • 您的后端应用可以生成一个HTML页面,其中包含许多预先签名的网址,您的用户只需点击链接即可访问对象,而不必为每个对象提供密码他们希望下载