我们有一个与客户共享的包。在包中,我们有一段代码可以对我们的中央 API 网关进行 HTTP 请求调用。到目前为止,我们的 API 网关是开放的,并且接受来自任何地方的请求,这并不好。我想限制对将使用我们软件的用户的访问。我发现的唯一解决方案是使用 IAM 并提供需要我们在包中包含访问密钥的授权。我们的用户可以在他们想要的任何环境中安装我们的包,我们无法控制该环境。所以我认为一个可行的选择是创建一个通用的用户策略,以最小的访问权限允许我们的用户调用我们的 API 网关。但是,将访问密钥放在代码中似乎不是一个好主意。另一种选择是为我们的客户提供访问密钥,但这也有开销。
1 回答
当 IAM 策略不可行时,您可以使用内置的 API Gateway API 密钥功能。
只要您的客户端可以在任何基础设施上,而不是仅限于 AWS,API Gateway 服务就会提供通用 API 密钥解决方案,它允许您通过强制客户端请求包含 API 密钥来限制客户端流量到您的 API 网关。此 API 密钥接口是其“ API 使用计划”功能的一部分。
本文档说明如何使用控制台设置 API 网关以强制客户端流量带有 API 密钥:
要设置 API 密钥,请执行以下操作:
将 API 方法配置为需要 API 密钥。
为区域中的 API 创建或导入 API 密钥。
您的客户可以实施“秘密存储”解决方案,以避免将他们的 API 密钥放入源代码中。
当然,您的客户将其 API 密钥以纯文本形式存储在其源代码中是不明智的。相反,他们可以使用秘密存储解决方案,将 API 密钥存储在他们的代码库之外,但仍然让他们的应用程序访问秘密。
本文描述了安全秘密存储(例如安全 API 密钥存储)的示例解决方案,该解决方案允许应用程序访问应用程序秘密,而无需将未加密的秘密放入源代码中。它使用 Amazon KMS + Cryptex,但同样的原理可以应用于其他技术:http ://technologyadvice.github.io/lock-up-your-customer-accounts-give-away-the-key/