【问题标题】:Deny access to AWS S3 files for everyone but the application user拒绝除应用程序用户之外的所有人访问 AWS S3 文件
【发布时间】:2020-06-03 21:53:03
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-cognito


    【解决方案1】:

    让这个方法起作用的唯一方法是用户必须在他们身边加密文件,然后上传加密文件,当他们稍后下载文件时,它被解密以便他们可以阅读。

    【讨论】:

    • 感谢您的回答。您对如何管理客户端加密有任何建议吗?或者更具体地说,用什么加密它?我的意思是如果加密密钥保存在用户端并且他删除了应用程序及其所有数据,那么在再次安装应用程序后他如何能够解密数据?也许我可以为此使用 Cognito 密码,但如果用户想更改密码怎么办?
    【解决方案2】:

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

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

    请注意:

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

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

    我建议您创建一个password-based encryption key,用户可以在其中提供加密密码(不同于用户的身份验证密码,可能会更改)。

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 1970-01-01
      • 2013-07-16
      • 2012-10-26
      • 2011-12-15
      • 2011-03-25
      • 2010-11-23
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多