首页 > 解决方案 > 拒绝除应用程序用户之外的所有人访问 AWS S3 文件

问题描述

我正在创建一个用户通过 Amazon Cognito 登录的 Web 应用程序。一旦用户登录,他就可以开始使用预签名的 url 从 AWS S3 上传和下载文件。这些文件应该是保密的,只有上传它们的用户才能阅读它们。是否有可能实现这一点,以至于即使 AWS 账户的根用户也无法读取文件?

标签: amazon-web-servicesamazon-s3amazon-cognito

解决方案


使用AWS SDK,可以选择使用开箱即用的客户端加密。

 EncryptionMaterials encryptionMaterials = new EncryptionMaterials(symKey);

 AmazonS3 s3EncryptionClient = AmazonS3EncryptionClientBuilder.standard()
       .withCredentials(new ProfileCredentialsProvider())
       .withEncryptionMaterials(new StaticEncryptionMaterialsProvider(encryptionMaterials))
        .withRegion(clientRegion)
        .build();

请注意:

  • 如果客户端需要提供额外的密钥来加密内容。问题是客户端将如何/在哪里管理内容密钥。(PBKDF?来自不同帐户的KMS?)
  • 如果加密密钥丢失,内容将无法恢复

我的意思是如果加密密钥保存在用户端并且他删除了应用程序及其所有数据,那么在再次安装应用程序后他如何能够解密数据?

我建议您创建一个基于密码的加密密钥,用户可以在其中提供加密密码(与可能更改的用户身份验证密码不同)。

也许我可以为此使用 Cognito 密码,但是如果用户想更改密码怎么办

您(应该)无权访问用户的密码。


推荐阅读