问题
当实例没有公共 IP 地址并且您在 VPC 中使用 S3 端点时,如何将对 S3 存储桶的访问限制到单个 AWS 实例?
背景和细节
我们有一个 VPC,它有一个虚拟专用网关,它通过 VPN 连接到我们的本地数据中心。VPC 没有互联网网关。服务器没有公共 IP 地址。有一个正确设置的 S3 端点和路由表。假设有一个包含三个实例的子网。我们有两个 S3 存储桶尚未创建,它们将被加密。
我们希望限制实例 A S3 存储桶 A 和实例 B 对 S3 存储桶 B 的访问。实例 C 不应访问任何一个存储桶。
我们还需要能够从公共互联网上传信息到存储桶。这种访问只能通过特定 IP 进行,使用存储桶策略可以轻松实现。不过这可能会对解决方案产生影响。
您不能使用 IAM 策略或存储桶策略来允许从 VPC IPv4 CIDR 范围(私有 IPv4 地址范围)进行访问。VPC CIDR 块可以重叠或相同,这可能会导致意外结果。因此,您不能在 IAM 策略中使用 aws:SourceIp 条件来通过 VPC 终端节点向 Amazon S3 发出请求。这适用于用户和角色的 IAM 策略以及任何存储桶策略。如果语句包含 aws:SourceIp 条件,则该值无法与任何提供的 IP 地址或范围匹配。您可以改为执行以下操作:
- 使用您的路由表来控制哪些实例可以通过终端节点访问 Amazon S3 中的资源。
- 对于存储桶策略,您可以限制对特定终端节点或特定 VPC 的访问。有关更多信息,请参阅使用 Amazon S3 存储桶策略。
我们不能使用路由表,因为我们有两个需要访问不同存储桶的实例。
我也读过这一页,这对我们的情况没有帮助。
选项:KMS 密钥
我怀疑如果我们为每个存储桶提供自己的 KMS 密钥,并将密钥的访问权限限制到相应的实例,那么只有该实例才能访问解密的数据。我认为这会起作用,但存在一些复杂性,而且我不能 100% 确定,因为我没有对 KMS 做过太多工作。
这种方法的优点是默认拒绝,通过配置允许。由于帐户的用户数量,我们不能依赖配置来默认拒绝,正如 Alex 在下面非常有帮助地建议的那样。
想法、意见或建议
有没有人有其他建议或想法可以跟进?或者对 KMS 想法有什么想法/进一步的细节?