限制对包中的API网关(和AWS Lambda)的访问

时间:2018-02-06 22:22:02

标签: api amazon-web-services aws-lambda aws-api-gateway aws-iam

我们有一个与客户分享的套餐。在包中,我们有一大块代码可以对我们的中央API网关进行HTTP请求调用。截至目前,我们的API网关是开放的,接受来自世界各地的请求,这是不好的。我想限制访问将使用我们软件的用户。我发现的唯一解决方案是使用IAM并提供授权,要求我们在包中包含我们的访问密钥。我们的用户可以在他们想要的任何环境中安装我们的软件包,我们无法控制该环境。所以我认为一个可行的选择是创建一个通用的用户策略,其访问权限最小,允许我们的用户调用我们的API网关。但是,将访问密钥放在代码中并不是一个好主意。另一个选择是为我们的客户提供访问密钥,但也有开销。什么是更安全,更易于维护的更好的替代方案?

1 个答案:

答案 0 :(得分:1)

当IAM政策不可行时,您可以使用内置API网关API密钥功能。

只要您的客户可以使用任何基础架构,而不限于AWS,API网关服务就会提供通用API密钥解决方案,允许您通过强制客户端请求包括API密钥来限制客户端流量到API网关。此API密钥界面是他们的" API Usage Plan"的一部分。特征

This document解释了如何使用控制台设置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/