AWS API Gateway和Elastic Cloud托管的Elasticsearch之间的身份验证

时间:2018-07-03 02:20:29

标签: amazon-web-services elasticsearch authorization aws-api-gateway

我们正在部署在Elastic Cloud上的Elasticsearch前面配置一个AWS API Gateway代理(出于限制,使用计划和其他各种原因)。为了在网关和ES之间进行身份验证,一种想法是在API网关资源上配置集成请求,以添加具有在ES中创建的凭据的Authorization header。这是最好的策略吗? IAM角色似乎不如IAM角色,但是该选项不可用,因为ES实例无法访问它们(Elastic Cloud在AWS上托管我们的部署,但它不在我们的控制之下)。 API网关本身将需要一个API密钥。

1 个答案:

答案 0 :(得分:1)

我不是Elasticsearch的专家,但是听起来您想要安全地将请求从API网关转发到另一个REST Web服务。由于Elasticsearch是AWS的外部REST Web服务,因此您将无权访问IAM角色。我与另一个云托管服务(不是elasticsearch)进行了类似的集成,将尽我最大的努力来检查AWS中可用于完成请求的工具。

一个想法是在API网关资源上配置集成请求,以添加带有在ES中创建的凭据的Authorization标头。这是最好的策略吗?

这是最直接的策略。在API Gateway中,您可以在Integration Request中映射自定义标头。在这里您将为Elastic Search映射Authorization标头。

类似地,您可以将授权标头映射为“阶段变量”,如果在不同的Elasticsearch环境中更改授权标头,将更易于维护。

在两种策略中,您都将授权头存储在API Gateway中。由于对Elasticsearch的请求应为HTTPS,因此数据在传输中将是安全的。该thread具有有关在API网关中存储凭据的更多信息。

来自MikeD @ AWS:使用阶段变量管理凭据目前尚无已知问题。但是,阶段变量并未明确设计为凭据管理的安全机制。与所有API Gateway配置信息一样,阶段变量也使用标准的AWS权限和策略进行保护,并且在通过有线传输时会被加密。在内部,阶段变量被视为机密的客户信息。

我认为这适用于您的问题。您可以将授权标头存储在API网关代理中,但是您必须确认API网关配置信息不是明确设计用于敏感信息的。话虽如此,这样做没有已知问题。如果您愿意承担这种风险,则这种方法最容易配置。

什么是更“ AWS”方法?

“ AWS”方法将使用为该功能设计的服务。例如,使用Key Management Service存储您的Elasticsearch授权标头。

类似于注释中引用的tutorial,您将希望将请求从API网关转发到Lambda。您将负责使用您选择的语言创建对Elasticsearch的HTTPS请求。有一些有关此的教程,但这是官方的AWS documentation。 AWS提供了蓝图作为启动Lambda函数的模板。蓝图https-request将起作用。

将请求从API网关转发到Lambda后,请将Lambda请求的授权标头配置为Environment Variable并实现Environment Variable Encryption。建议使用这种安全的方式存储敏感数据,例如Elasticsearch授权标头。

此方法将需要进行更多配置,但将AWS服务用于预期目的。

我的观点:我最初使用第一种方法(API Gateway中的Authorization Headers)对开发实例进行身份验证,因为它既快速又容易,但是随着我了解更多,我决定第二种方法是与AWS Well Architected Framework

保持一致