基于 AWS 的客户端 SDK 的访问管理

Access management for AWS-based client-side SDK

我正在为我的产品开发客户端 SDK(基于 AWS)。工作流程如下:

  1. SDK 的用户以某种方式 将数据上传到一些 S3 存储桶
  2. 用户以某种方式在SQS一些队列上保存命令
  3. EC2 上的一个工作人员轮询队列、执行操作并通过 SNS 发送通知。这点好像很清楚了。

您可能已经注意到,这里有相当一些关于访问管理的不明确之处。是否有任何通用做法为此类 SDK 的第 3 方用户提供对 AWS 服务(在本例中为 S3 和 SQS)的访问?

我目前看到的选项:

第一个似乎没问题,但我很犹豫,我在这里遗漏了一些明显的问题。第二个似乎有可扩展性问题 - 如果这一层将关闭,整个系统将无法工作。

P.S。

我已尽力解释情况,但我担心这个问题可能仍然缺乏一些上下文。如果您需要更多说明 - 请随时发表评论。

我建议您仔细查看 Temporary Security Credentials,以限制客户在需要时仅访问他们需要的内容。

请记住此类问题的任何解决方案,这取决于您的规模、您的客户以及您可以向客户展示的内容。

对于您的第一个选项,让客户直接使用 IAM 或临时凭证会让他们知道 AWS 处于幕后(因为他们可以很容易地看到请求离开他们的系统)。他们有可能使用这些凭证发出自己的 AWS 请求,超出您的代码可以验证和控制的范围。

你的第二个选择更好,因为它解决了这个问题——让你的服务器成为 AWS 的唯一联系点,允许你在将客户提供的数据发送到 AWS 之前执行输入验证等。它还可以让您轻松替换实施而不影响客户。关于 availablily/scalability 问题,这就是 EC2(和类似服务)的用途。

同样,所有这些都取决于您的规模和客户。对于只有少量客户的玩具应用程序,为了让某些东西更快地工作,更简单可能更好(而不是为可能不会使用的东西构建和支付大量基础设施)。