【问题标题】:Auth between AWS API Gateway and Elastic Cloud hosted ElasticsearchAWS API Gateway 和 Elastic Cloud 托管的 Elasticsearch 之间的身份验证
【发布时间】:2018-12-11 06:01:25
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

我不是 Elasticsearch 方面的专家,但听起来您想安全地将请求从 API 网关转发到另一个 REST Web 服务。由于 Elasticsearch 是 AWS 的外部 REST Web 服务,因此您将无权访问 IAM 角色。我与另一个云休息服务(不是弹性搜索)进行了类似的集成,将尽我所能审查 AWS 中可用于完成请求的工具。

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

这是最直接的策略。在 API Gateway 中,您可以在集成请求中映射自定义标头。您可以在此处映射 Elastic Search 的 Authorization 标头。

同样,您可以将您的授权标头映射为“阶段变量”,如果授权标头在不同的 Elasticsearch 环境中发生变化,这将更容易维护。

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

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

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

什么是更“AWS”的方法?

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

与 cmets 中引用的 tutorial 类似,您需要将请求从 API Gateway 转发到 Lambda。您将负责以您选择的语言创建对 Elasticsearch 的 HTTPS 请求。有几个关于这个的教程,但这是官方的AWS documentation。 AWS 提供蓝图作为模板来启动 Lambda 函数。蓝图https-request 将起作用。

将请求从 API Gateway 转发到 Lambda 后,将 Lambda 请求的授权标头配置为 Environment Variable 并实现 Environment Variable Encryption。这是一种安全的推荐方式来存储敏感数据,例如 Elasticsearch 授权标头。

这种方法需要更多配置,但会出于预期目的使用 AWS 服务。

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

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2019-12-14
    • 2020-04-05
    • 2016-01-09
    • 2020-01-05
    • 1970-01-01
    • 2016-03-25
    • 2022-01-15
    • 2018-01-09
    相关资源
    最近更新 更多