You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Lambda中使用x509证书和私钥调用外部Web API

AWS Lambda 客户端证书认证方案

你提到的AWS Certificate Manager(ACM)仅用于为ELB、CloudFront、API网关等AWS托管服务提供服务端TLS证书,不支持导出证书内容供Lambda代码作为客户端认证凭证使用,因此该场景不适用ACM。

推荐工具方案

  • AWS Secrets Manager

    这是该场景的首选方案,你可以将.pem格式证书和.key格式私钥分别作为敏感密钥存储在Secrets Manager中,为Lambda执行角色配置secretsmanager:GetSecretValue的最小权限,Lambda运行时直接调用接口拉取证书和私钥内容即可。该方案支持访问审计、密钥自动轮换,符合安全合规要求。
  • AWS Systems Manager Parameter Store

    如果你的证书是固定长期使用、不需要自动轮换,可以使用参数存储的安全字符串类型存储证书和私钥,为Lambda配置ssm:GetParameter权限即可拉取内容,成本比Secrets Manager更低。

调用示例

拿到证书内容后,你可以将内容临时写入Lambda的/tmp临时目录(最大支持512MB存储,生命周期和函数执行实例一致),之后用对应语言的HTTP库加载证书发送POST请求即可,以下是Python运行时的示例代码:

import boto3
import requests
from botocore.exceptions import ClientError

sm_client = boto3.client('secretsmanager')

def lambda_handler(event, context):
    # 拉取存储的证书和私钥
    try:
        cert_content = sm_client.get_secret_value(SecretId="你的证书密钥ID")["SecretString"]
        key_content = sm_client.get_secret_value(SecretId="你的私钥密钥ID")["SecretString"]
    except ClientError as e:
        raise e
    
    # 写入临时文件
    cert_path = "/tmp/client.crt"
    key_path = "/tmp/client.key"
    with open(cert_path, "w") as f:
        f.write(cert_content)
    with open(key_path, "w") as f:
        f.write(key_content)
    
    # 发送带客户端证书的POST请求
    response = requests.post(
        "https://目标API地址/接口路径",
        cert=(cert_path, key_path),
        json={"请求参数key": "请求参数value"}
    )
    return response.json()

注意事项

  • 不要将证书和私钥硬编码在函数代码包、或明文存储在Lambda环境变量中,存在凭证泄露风险
  • 如果私钥设置了访问密码,也请将密码一同存储在Secrets Manager/参数存储的安全字符串中,调用时按HTTP库要求传入密码参数即可
  • 为Lambda执行角色配置最小权限,仅允许访问指定的密钥/参数,避免权限过度分配

内容的提问来源于stack exchange,提问作者granpawalton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:15:03