使用 AWS API Gateway 进行客户端 TLS 身份验证

Posted

技术标签:

【中文标题】使用 AWS API Gateway 进行客户端 TLS 身份验证【英文标题】:Client TLS Authentication with AWS API Gateway 【发布时间】:2019-01-07 15:39:41 【问题描述】:

是否可以在 AWS API Gateway 上设置客户端 TLS 身份验证?

我不是指在 API Gateway 和 Elastic Beanstalk 之间,正如 here 所描述的那样,而是在客户端和 API Gateway 本身之间,可能有一个自定义授权方(例如 Lambda),在转发之前检查证书的有效性向 Elastic Beanstalk 发出请求。

【问题讨论】:

【参考方案1】:

您可以通过为您的 api 创建一个自定义域名并将证书添加到您的自定义域名来做到这一点

以下是为自定义域设置证书的方法 -

要为边缘优化的自定义域名提供证书,您可以请求 AWS Certificate Manager (ACM) 在 ACM 中生成新证书或将由第三方证书颁发机构颁发的证书导入 ACM。

要为支持 ACM 的区域中的区域自定义域名提供证书,您必须向 ACM 申请证书。要为不支持 ACM 的区域中的区域自定义域名提供证书,您必须将证书导入该区域的 API 网关。

要导入 SSL/TLS 证书,您必须提供 PEM 格式的 SSL/TLS 证书正文、其私钥和自定义域名的证书链。存储在 ACM 中的每个证书都由其 ARN 标识。要将 AWS 托管的证书用于域名,您只需引用其 ARN。

ACM 使为 API 设置和使用自定义域名变得简单:在 ACM 中创建或导入给定域名的证书,在 API Gateway 中使用由提供的证书的 ARN 设置域名ACM,并将自定义域名下的基本路径映射到 API 的已部署阶段。使用 ACM 颁发的证书,您不必担心会泄露任何敏感的证书详细信息,例如私钥。

参考:https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

【讨论】:

问题不同,他问API网关是否能够相互(2-way)ssl 哦,我没有意识到这一点。 API 网关不支持双向(2 路)ssl。 我也很惊讶.. 显然 API GW 支持与后端服务的相互 SSL(如您所描述的),但不支持客户端。 从今年开始,Api-Gateway 支持 mTLS。参考:aws.amazon.com/blogs/compute/…

以上是关于使用 AWS API Gateway 进行客户端 TLS 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cognito 在 AWS Api Gateway 中验证用户

在 API Gateway 中使用 AWS Lambda 授权方

AWS API Gateway:API 密钥的最佳实践

使用 AWS API Gateway 进行 API 版本控制

AWS Lambda 和 API Gateway 以及 SOAP 客户端

Kubernetes Ingress-Controller 和 AWS API Gateway 客户端证书