在 Amazon Lambda 函数中使用 Amazon Secrets Manager 密钥 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon Lambda 函数中使用 Amazon Secrets Manager 密钥

您可以使用 Amazon 参数和密钥 Lambda 扩展来检索和缓存 Lambda 函数中的 Amazon Secrets Manager 密钥,而无需使用软件开发工具包。检索已缓存密钥比从 Secrets Manager 中检索密钥的速度要快。由于调用 Secrets Manager API 会产生费用,因此使用缓存可以降低成本。该扩展可以检索 Secrets Manager 密钥和 Parameter Store 参数。有关 Parameter Store 的信息,请参阅《Amazon Systems Manager 用户指南》中的 Parameter Store integration with Lambda extensions(Parameter Store 与 Lambda 扩展集成)。

Lambda 扩展是配套进程,其增加了 Lambda 函数的功能。有关更多信息,请参阅《Lambda 开发人员指南》中的 Lambda extensions(Lambda 扩展)。有关在容器镜像中使用扩展的信息,请参阅在容器镜像中使用 Lambda 层和扩展。Lambda 使用 Ama CloudWatch zon 日志记录有关扩展程序的执行信息以及该函数。默认情况下,扩展程序只记录最少量的信息 CloudWatch。若要记录更多详细信息,请将环境变量 PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL 设置为 debug

为提供用于参数和密钥的内存缓存,该扩展向 Lambda 环境公开了本地 HTTP 端点,即 localhost 端口 2773。您可以通过设置环境变量 PARAMETERS_SECRETS_EXTENSION_HTTP_PORT 来配置端口。

Lambda 会实例化与函数所需的并发级别相对应的单独实例。每个实例都是独立的,并维护自己的配置数据本地缓存。有关 Lambda 实例和并发的更多信息,请参阅《Lambda 开发人员指南》中的 Managing concurrency for a Lambda function(管理 Lambda 函数并发)。

若要为 ARM 添加扩展,您必须使用 Lambda 函数的 arm64 架构。有关更多信息,请参阅《Lambda 开发人员指南》中的 Lambda instruction set architectures(Lambda 指令集架构)。扩展支持 ARM 在以下区域可用:亚太地区(孟买)、美国东部(俄亥俄州)、欧洲地区(爱尔兰)、欧洲地区(法兰克福)、欧洲(苏黎世)、美国东部(弗吉尼亚州北部)、欧洲地区(伦敦)、欧洲(西班牙)、亚太地区(东京)、美国西部(俄勒冈州)、亚太地区(新加坡)、亚太地区(海得拉巴)和亚太地区(悉尼)。

该扩展使用 Amazon 客户端。有关配置 Amazon 客户端的信息,请参阅 Amazon SDK 和工具参考指南中的设置参考。如果您的 Lambda 函数在 VPC 中运行,则需要创建一个 VPC 终端节点,以便扩展程序可以调用 Secrets Manager。有关更多信息,请参阅使用 Amazon Secrets Manager VPC 终端节点

使用 Amazon 参数和密钥 Lambda 扩展
  1. 执行下列操作之一,将层添加到函数:

    • 打开 Amazon Lambda 控制台,网址为 https://console.aws.amazon.com/lambda/

      1. 选择您的函数,选择 Layers(层),然后选择 Add a layer(添加层)。

      2. Add layer(添加层)页面上,对于 Amazon layers( 层),选择 Amazon Parameters and Secrets Lambda Extension( 参数和密钥 Lambda 扩展),然后选择 Add(添加)。

    • 将以下 Amazon CLI 命令与您所在地区的相应的 ARN 一起使用。有关 ARN 的列表,请参阅《Amazon Systems Manager 用户指南》中的 Amazon 参数和秘密 Lambda 扩展 ARN

      aws lambda update-function-configuration \ --function-name my-function \ --layers LayerARN
  2. 授予 Lambda 执行角色访问密钥的权限:

  3. 使用 Lambda 环境变量配置缓存。

  4. 若要从扩展缓存中检索密钥,您首先需要将 X-AWS-Parameters-Secrets-Token 添加到请求标头中。将令牌设置为 AWS_SESSION_TOKEN,Lambda 为所有正在运行的函数提供此令牌。使用此标头表示调用方在 Lambda 环境中。

    下列 Python 示例说明如何添加标头。

    import os headers = {"X-Aws-Parameters-Secrets-Token": os.environ.get('AWS_SESSION_TOKEN')}
  5. 若要在 Lambda 函数中检索密钥,请使用下列 HTTP GET 请求之一:

    • 要检索密钥,对于 secretId,请指定密钥的 ARN 或名称。

      GET: /secretsmanager/get?secretId=secretId
    • 要通过暂存标签检索先前的密钥值或特定版本,对于 secretId,请使用密钥的 ARN 或名称,对于 versionStage,请使用暂存标签。

      GET: /secretsmanager/get?secretId=secretId&versionStage=AWSPREVIOUS
    • 要通过 ID 检索特定密钥版本,对于 secretId,请使用密钥的 ARN 或名称,对于 versionId,请使用版本 ID。

      GET: /secretsmanager/get?secretId=secretId&versionId=versionId
    例 检索密钥 (Python)

    下列 Python 示例说明如何使用 json.loads 检索密钥并解析结果。

    secrets_extension_endpoint = "http://localhost:" + \ secrets_extension_http_port + \ "/secretsmanager/get?secretId=" + \ <secret_name> r = requests.get(secrets_extension_endpoint, headers=headers) secret = json.loads(r.text)["SecretString"] # load the Secrets Manager response into a Python dictionary, access the secret

Amazon 参数和密钥 Lambda Extension 环境变量

您可以使用下列环境变量配置扩展。

有关如何使用环境变量的更多信息,请参阅《Lambda 开发者指南》中的 Using Lambda environment variables(使用 Lambda 环境变量)。

PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED

设置为 true,以缓存参数和密钥。设置为 false,以不进行缓存。默认设置为 true。

PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE

要缓存的密钥和参数的最大数量。值必须介于 0 到 1000 之间。值 0 表示无缓存。如果 SSM_PARAMETER_STORE _TTLSECRETS_MANAGER_TTL 均为 0,则将忽略此变量。默认为 1000。

PARAMETERS_SECRETS_EXTENSION_HTTP_PORT

本地 HTTP 服务器的端口。默认为 2773。

PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL

扩展的日志记录级别为:debuginfowarnerrornone。设置为 debug 以查看缓存配置。默认值为 info

PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS

扩展用于向 Parameter Store 或 Secrets Manager 发出请求的 HTTP 客户端的最大连接数。这是各个客户端的配置。默认为 3。

SECRETS_MANAGER_TIMEOUT_MILLIS

对 Secrets Manager 的请求超时(以毫秒为单位)。值 0 表示没有超时。默认值为 0。

SECRETS_MANAGER_TTL

缓存中密钥的 TTL(以秒为单位)。值 0 表示无缓存。最大值为 300 秒。如果 PARAMETERS_SECRETS_CACHE_SIZE 为 0,则将忽略此变量。默认为 300 秒。

SSM_PARAMETER_STORE_TIMEOUT_MILLIS

对 Parameter Store 的请求超时(以毫秒为单位)。值 0 表示没有超时。默认值为 0。

SSM_PARAMETER_STORE_TTL

缓存中参数的 TTL(以秒为单位)。值 0 表示无缓存。最大值为 300 秒。如果 PARAMETERS_SECRETS_CACHE_SIZE 为 0,则将忽略此变量。默认为 300 秒。