AWS Lambda中的相互身份验证(2-way SSL)

San*_*eev 5 java ssl lambda amazon-web-services mutual-authentication

我正在为小型PoC构建AWS Lambda服务。PoC中的流程为:

  • 通过POST输入(文本),
  • 执行一个小的字符串操作+
  • 将操纵值存储到DynamoDB中,然后
  • 通过HTTP POST将相同(操纵)的值发送到特定的URL

看起来像一个简单的lambda教程示例,但是对我来说棘手的部分是授权。我必须发布的URL仅允许通过SSL证书相互认证的请求。如何在Lambda中实现这一目标?

我找不到足够的答案来完成这项工作。我看过使用AWS API网关2路ssl cert选项。但是,要使其正常工作,我需要将接收部件证书安装到证书存储中。可能吗?还是唯一的方法是使用微型EC2盒?

在Lambda,我可以使用Node.JS,Java或Python。

dsh*_*rew 2

如何在AWS Lambda中实现双向TLS?

首先为 Hakky54 的关于相互 TLS 的好教程鼓掌。 https://github.com/Hakky54/mutual-tls-ssl

我按照他的教程来理解和实施 AWS Lambda 的 MTLS。您还可以在部署到 AWS 之前通过运行 spring-boot 应用程序在本地测试您的实施,这可以节省大量时间。

步骤(所有命令都记录在上面的链接中)

  1. 导出服务器证书并将其导入客户端信任存储
  2. 加载您的客户端密钥存储和信任存储,我将两者都保存在 s3 存储桶中
  3. 创建 TLS 上下文
SSLContext sslContext = SSLContexts.custom()
    .loadKeyMaterial(keyStore, stores.getKeyStorePassword().toCharArray())
    .loadTrustMaterialtrustStore, (X509Certificate[] chain, String authType) -> true)
    .build();
Run Code Online (Sandbox Code Playgroud)
  1. 创建新泽西州客户端
Client client = ClientBuilder.newBuilder()   
    .withConfig(new ClientConfig())    
    .sslContext(sslContext.get())   
    .trustStore(trustStore)
    .keyStore(keyStore, keyStorePassword)   
    .build();
Run Code Online (Sandbox Code Playgroud)
  1. 调用 API
client.target(endpoint).get();
Run Code Online (Sandbox Code Playgroud)

我将我的密钥库凭据存储在参数存储中。