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



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

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

一种想法是在 API 网关资源上配置集成请求,以添加具有在 ES 中创建的信条的授权标头。这是最好的策略吗?

这是最直接的策略。在 API 网关中,您可以在集成请求中映射自定义标头。您将在此处映射弹性搜索的授权标头。

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

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

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

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

什么是更"AWS"的方法?

"AWS"方法是使用为该功能设计的服务。例如,使用密钥管理服务来存储您的 Elasticsearch 授权标头。

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

将请求从 API 网关转发到 Lambda 后,将 Lambda 请求的授权标头配置为环境变量并实施环境变量加密。这是存储敏感数据(如 Elasticsearch 授权标头(的安全推荐方法。

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

的观点:我最初使用第一种方法(API 网关中的授权标头(通过开发实例进行身份验证,因为它既快速又简单,但随着我了解更多信息,我决定第二种方法更符合 AWS 架构完善的框架

最新更新