基于 AWS 的客户端 SDK 的访问管理
Access management for AWS-based client-side SDK
我正在为我的产品开发客户端 SDK(基于 AWS)。工作流程如下:
- SDK 的用户以某种方式 将数据上传到一些 S3 存储桶
- 用户以某种方式在SQS一些队列上保存命令
- EC2 上的一个工作人员轮询队列、执行操作并通过 SNS 发送通知。这点好像很清楚了。
您可能已经注意到,这里有相当一些关于访问管理的不明确之处。是否有任何通用做法为此类 SDK 的第 3 方用户提供对 AWS 服务(在本例中为 S3 和 SQS)的访问?
我目前看到的选项:
- 我们为 SDK 的用户创建了 IAM 用户,它可以访问某些 S3 资源并具有对 SQS 的写入权限。
- 我们在 AWS 和 SDK 之间创建了额外的 server/layer,它将消息写入 SQS 而不是用户,并为 SDK 提供一次性短期 link 以将数据直接写入 S3。
第一个似乎没问题,但我很犹豫,我在这里遗漏了一些明显的问题。第二个似乎有可扩展性问题 - 如果这一层将关闭,整个系统将无法工作。
P.S。
我已尽力解释情况,但我担心这个问题可能仍然缺乏一些上下文。如果您需要更多说明 - 请随时发表评论。
我建议您仔细查看 Temporary Security Credentials,以限制客户在需要时仅访问他们需要的内容。
请记住此类问题的任何解决方案,这取决于您的规模、您的客户以及您可以向客户展示的内容。
对于您的第一个选项,让客户直接使用 IAM 或临时凭证会让他们知道 AWS 处于幕后(因为他们可以很容易地看到请求离开他们的系统)。他们有可能使用这些凭证发出自己的 AWS 请求,超出您的代码可以验证和控制的范围。
你的第二个选择更好,因为它解决了这个问题——让你的服务器成为 AWS 的唯一联系点,允许你在将客户提供的数据发送到 AWS 之前执行输入验证等。它还可以让您轻松替换实施而不影响客户。关于 availablily/scalability 问题,这就是 EC2(和类似服务)的用途。
同样,所有这些都取决于您的规模和客户。对于只有少量客户的玩具应用程序,为了让某些东西更快地工作,更简单可能更好(而不是为可能不会使用的东西构建和支付大量基础设施)。
我正在为我的产品开发客户端 SDK(基于 AWS)。工作流程如下:
- SDK 的用户以某种方式 将数据上传到一些 S3 存储桶
- 用户以某种方式在SQS一些队列上保存命令
- EC2 上的一个工作人员轮询队列、执行操作并通过 SNS 发送通知。这点好像很清楚了。
您可能已经注意到,这里有相当一些关于访问管理的不明确之处。是否有任何通用做法为此类 SDK 的第 3 方用户提供对 AWS 服务(在本例中为 S3 和 SQS)的访问?
我目前看到的选项:
- 我们为 SDK 的用户创建了 IAM 用户,它可以访问某些 S3 资源并具有对 SQS 的写入权限。
- 我们在 AWS 和 SDK 之间创建了额外的 server/layer,它将消息写入 SQS 而不是用户,并为 SDK 提供一次性短期 link 以将数据直接写入 S3。
第一个似乎没问题,但我很犹豫,我在这里遗漏了一些明显的问题。第二个似乎有可扩展性问题 - 如果这一层将关闭,整个系统将无法工作。
P.S。
我已尽力解释情况,但我担心这个问题可能仍然缺乏一些上下文。如果您需要更多说明 - 请随时发表评论。
我建议您仔细查看 Temporary Security Credentials,以限制客户在需要时仅访问他们需要的内容。
请记住此类问题的任何解决方案,这取决于您的规模、您的客户以及您可以向客户展示的内容。
对于您的第一个选项,让客户直接使用 IAM 或临时凭证会让他们知道 AWS 处于幕后(因为他们可以很容易地看到请求离开他们的系统)。他们有可能使用这些凭证发出自己的 AWS 请求,超出您的代码可以验证和控制的范围。
你的第二个选择更好,因为它解决了这个问题——让你的服务器成为 AWS 的唯一联系点,允许你在将客户提供的数据发送到 AWS 之前执行输入验证等。它还可以让您轻松替换实施而不影响客户。关于 availablily/scalability 问题,这就是 EC2(和类似服务)的用途。
同样,所有这些都取决于您的规模和客户。对于只有少量客户的玩具应用程序,为了让某些东西更快地工作,更简单可能更好(而不是为可能不会使用的东西构建和支付大量基础设施)。