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

在 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 使用 Amazon CloudWatch Logs 记录有关扩展的执行信息以及函数。默认情况下,扩展将最少量的信息记录到 CloudWatch。若要记录更多详细信息,请将环境变量 PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL 设置为 debug

该扩展向本地主机端口 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 参数和密钥 Lambda 扩展
  1. 执行下列操作之一,将层添加到函数:

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

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

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

    • 将下列 Amazon CLI 命令与您所在地区的适当 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 扩展环境变量

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

有关如何使用环境变量的更多信息,请参阅《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 秒。

Amazon 参数和密钥 Lambda 扩展 ARN

区域 ARN

美国东部(弗吉尼亚州北部)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

美国东部(俄亥俄州)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

美国西部(北加利福尼亚)

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

美国西部(俄勒冈州)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

加拿大(中部)

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

欧洲(法兰克福)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

欧洲(爱尔兰)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

欧洲(伦敦)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

欧洲(巴黎)

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

Europe (Stockholm)

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

欧洲(米兰)

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

中国(北京)

arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

China (Ningxia)

arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

亚太地区(香港)

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

亚太地区(东京)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

亚太地区(大阪)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

亚太地区(首尔)

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

亚太地区(新加坡)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

亚太地区(悉尼)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

亚太地区(雅加达)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

亚太地区(孟买)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:2

南美洲(圣保罗)

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

非洲(开普敦)

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

中东(阿联酋) arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

中东(巴林)

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

Amazon GovCloud(美国东部)

arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2

Amazon GovCloud(美国西部)

arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2