amazon-web-services - 拒绝除应用程序用户之外的所有人访问 AWS S3 文件
问题描述
我正在创建一个用户通过 Amazon Cognito 登录的 Web 应用程序。一旦用户登录,他就可以开始使用预签名的 url 从 AWS S3 上传和下载文件。这些文件应该是保密的,只有上传它们的用户才能阅读它们。是否有可能实现这一点,以至于即使 AWS 账户的根用户也无法读取文件?
解决方案
使用AWS SDK,可以选择使用开箱即用的客户端加密。
EncryptionMaterials encryptionMaterials = new EncryptionMaterials(symKey);
AmazonS3 s3EncryptionClient = AmazonS3EncryptionClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withEncryptionMaterials(new StaticEncryptionMaterialsProvider(encryptionMaterials))
.withRegion(clientRegion)
.build();
请注意:
- 如果客户端需要提供额外的密钥来加密内容。问题是客户端将如何/在哪里管理内容密钥。(PBKDF?来自不同帐户的KMS?)
- 如果加密密钥丢失,内容将无法恢复
我的意思是如果加密密钥保存在用户端并且他删除了应用程序及其所有数据,那么在再次安装应用程序后他如何能够解密数据?
我建议您创建一个基于密码的加密密钥,用户可以在其中提供加密密码(与可能更改的用户身份验证密码不同)。
也许我可以为此使用 Cognito 密码,但是如果用户想更改密码怎么办
您(应该)无权访问用户的密码。
推荐阅读
- python - Python:显示表名,获取用户选择,从 SQLite 显示该表报告
- reactjs - 为什么 Simple axios 不适用于 React Native
- salesforce - 不接受 WITH 子句 - Salesforce
- react-native - 如何将组件中的道具传递给 FlatList renderItem
- java - 为什么我的结果集会出现错误?
- reactjs - React 组件组合的正确或有效方法是什么?
- php - 我如何在 laravel 中使用多个数据库,比如一组一个数据库?
- android - Android ConnectivityManager onAvailable 有时未返回
- node.js - 我们如何在一个项目中同时使用“扩展”真或假
- java - 如何修复 Fortify Path Manipulation (Input Validation and Representation, Data Flow) 漏洞