向 Elastic Beanstalk 环境变量获取机密和参数 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

向 Elastic Beanstalk 环境变量获取机密和参数

Elastic Beanstalk 可以在实例引导期间 Amazon Systems Manager 从参数存储中获取 Amazon Secrets Manager 值,并将它们分配给环境变量以供您的应用程序使用。

以下几点总结了使用环境变量作为机密信息的配置、同步和访问权限:

支持的平台版本

2025 年 3 月 26 日当天或之后发布的平台版本支持配置为环境变量的 Amazon Secrets Manager 密钥和 Amazon Systems Manager 参数存储参数。

注意

除了基于 Docker 和 ECS 的 docker 平台之外,Amazon Linux 2 平台版本不支持多行变量值。有关多行变量支持的更多信息,请参见多行值

定价

使用 Secrets Manager 和 Systems Manager 参数存储需支付标准费用。有关定价的更多信息,请访问以下网站:

Elastic Beanstalk 不会为您的应用程序收取通过环境变量引用环境机密的费用。但是,标准费用确实适用于 Elastic Beanstalk 代表您向这些服务提出的请求。

将密钥配置为 Elastic Beanstalk 环境变量

您可以使用 Elastic Beanstalk 控制台、.ebextensions中的配置文件、CLI 和软件开发工具包将机密 Amazon 和参数配置为环境变量。 Amazon

先决条件

在设置环境变量以引用密钥之前,首先需要完成以下步骤。

配置环境变量之前的一般程序
  1. 创建 Secrets Manager 密钥或参数存储参数来存储您的敏感数据。有关更多信息,请参阅以下一个或两个主题:

  2. 为您的环境 EC2 实例设置所需的 IAM 权限以获取密钥和参数。有关更多信息,请参阅 所需的 IAM 权限

使用 控制台

您可以使用 Elastic Beanstalk 控制台将密钥配置为环境变量。

在 Elastic Beanstalk 控制台中将密钥配置为环境变量
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 Amazon Web Services 区域

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

  5. 向下滚动到 “运行时环境变量”。

  6. 选择 “添加环境变量”。

  7. 对于来源,选择 S ecrets ManagerSSM 参数存储

    注意

    有关下拉列表中的 “纯文本” 选项的更多信息,请参阅配置环境属性(环境变量)

  8. 环境变量名称中,输入用于保存密钥或参数值的环境变量的名称。

  9. 对于环境变量值,输入 Systems Manager 参数存储参数或 Secrets Manager 密钥的 ARN。在实例引导期间,Elastic Beanstalk 会将您在步骤 8 中输入的变量的值初始化为存储在此 ARN 资源中的值。

    控制台会验证您输入的值是否是您在步骤 7 中选择的商店的有效 ARN 格式。但是,它不会验证 ARN 指定的资源是否存在,也不会验证您是否拥有访问该资源所需的 IAM 权限

  10. 如果需要添加更多变量,请重复步骤 6步骤 9

  11. 要保存更改,请选择页面底部的 Apply(应用)。

使用.ebextensions 中的文件进行配置

您可以使用 Elastic B eanstalk 配置文件将密钥配置为环境变量。使用aws: elasticbeanstalk: 应用程序:环境秘密命名空间来定义环境属性。

.ebextensions/options.config 用于保存环境机密(速记语法)
option_settings: aws:elasticbeanstalk:application:environmentsecrets: MY_SECRET: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret MY_PARAMETER: arn:aws:ssm:us-east-1:111122223333:parameter/myparam
.ebextensions/options.config 用于保存环境机密(标准语法)
option_settings: - namespace: aws:elasticbeanstalk:application:environmentsecrets option_name: MY_SECRET value: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret - namespace: aws:elasticbeanstalk:application:environmentsecrets option_name: MY_PARAMETER value: arn:aws:ssm:us-east-1:111122223333:parameter/myparam

使用进行配置 Amazon CLI

您可以使用 Amazon 命令行界面 (Amazon CLI) 将密钥配置为 Elastic Beanstalk 环境变量。本节提供了带有命名空间的创建环境和更新环境命令的示例。aws: elasticbeanstalk: 应用程序:环境秘密当 Elastic Beanstalk EC2 引导这些命令引用的环境的实例时,它会使用获取的密钥和参数值初始化环境变量。它分别 ARNs 从 Secrets Manager 和 Systems Manager 参数存储库中获取这些值。

以下两个示例使用 create-environ ment 命令添加配置为名MY_SECRET为和的环境变量的密钥和参数。MY_PARAMETER

例 将密钥配置为环境变量的 create-environment(内联命名空间选项)
aws elasticbeanstalk create-environment \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 20" \ --option-settings \ Namespace=aws:elasticbeanstalk:application:environmentsecrets,OptionName=MY_SECRET,Value=arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret \ Namespace=aws:elasticbeanstalk:application:environmentsecrets,OptionName=MY_PARAMETER,Value=arn:aws:ssm:us-east-1:111122223333:parameter/myparam

作为替代方法,请使用 options.json 文件来指定命名空间选项,而不是将其内联。

例 的 create-environment,其密钥配置为环境变量(文件中的options.json命名空间选项)
aws elasticbeanstalk create-environment \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 20" \ --option-settings file://options.json
### example options.json ### [ { "Namespace": "aws:elasticbeanstalk:application:environmentsecrets", "OptionName": "MY_SECRET", "Value": "arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret" }, { "Namespace": "aws:elasticbeanstalk:application:environmentsecrets", "OptionName": "MY_PARAMETER", "Value": "arn:aws:ssm:us-east-1:111122223333:parameter/myparam" } ]

下一个示例配置名为MY_SECRET和的环境变量MY_PARAMETER,以存储现有环境的密钥和参数。update-envir onment 命令传递的选项语法与create-environment命令相同,可以是内联的,也可以是带文件的。options.json以下示例使用与上一个示例中相同的options.json文件演示了该命令。

例 of 更新环境,机密配置为环境变量(文件中的命名空间选项)options.json
aws elasticbeanstalk update-environment \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 20" \ --option-settings file://options.json

使用 Amazon SDK 进行配置

您可以使用将密钥和参数配置为环境变量Amazon SDKs。与上一节中提到的update-environmentcreate-environment Amazon CLI 命令类似,您可以使用CreateEnvironmentUpdateEnvironmentAPI 操作。使用 re OptionSettings quest 参数指定aws: elasticbeanstalk: 应用程序:环境秘密命名空间的选项。

使用 Elastic Beanstalk 环境变量同步密钥的最佳实践

本主题推荐了您的应用程序在 Secrets Manager 或 Systems Manager 参数存储区中使用环境密钥的最佳实践。如果密钥存储库数据更新或轮换,您的 Elastic Beanstalk 应用程序将不会自动接收更新的值。Elastic Beanstalk 仅在实例引导时将机密提取到环境变量中。

刷新您的环境变量

要触发您的 Elastic Beanstalk 环境从密钥存储库中重新获取密钥的最新值,我们建议您运行或操作。UpdateEnvironment RestartAppServer你可以使用 Elastic Beanstalk 控制台 Amazon CLI、或 Elastic Beanstalk API 来运行这些操作。有关更多信息,请参阅 Elastic Beanstalk 的Amazon CLI 示例或 API 参考。Amazon Elastic Beanstalk

管理自动缩放对密钥同步的影响

如果在密钥库更新后发生扩展事件或实例替换,则出现的新实例将具有来自 Secrets Manager 或 Systems Manager Parameter Store 的最新密钥值。即使环境中的所有其他实例都未刷新以检索新密钥,也可能发生此类事件。

重要

您必须确保您的应用程序能够对同一个环境变量使用两个不同的密钥值。这适用于以下事件:在 Secrets Manager 或 Systems Manager Parameter Store 中进行密钥更新,然后在您的环境中进行扩展或实例替换,而其他实例正在等待环境变量刷新。在等待刷新期间,并非所有环境实例的密钥存储环境变量值都相同。

这种用例的一个例子是数据库凭证轮换。当证书轮换之后出现扩展事件时,新引导的实例引用的环境密钥包含更新的数据库凭证。但是,现有实例引用的环境密钥会保留旧值,直到UpdateEnvironmentRestartAppServer操作刷新这些密钥。

亚马逊 Linux 2 环境变量中的多行值

多行值由多行组成,并包含一个换行符。除了 Docker 和基于 ECS 的 Docker 平台之外,在 Amazon Linux 2 上运行的平台不支持环境变量的多行值

注意

如果检测到多行值,Elastic Beanstalk 将无法部署受影响的环境。

以下选项可以作为多行问题的变通办法或解决方案:

  • 将你的亚马逊 Linux 2 环境升级到亚马逊 Linux 2023。有关更多信息,请参阅 从 Amazon Linux 2 迁移到 Amazon Linux 2023

  • 从你的秘密值中删除换行符。一个示例方法是在将您的值存储在密钥存储库中之前对其进行 Base64 编码。然后,当您的应用程序从环境密钥变量中引用该值时,需要将其解码回原始格式。

  • 将应用程序代码设计为直接从 Secrets Manager 或 Systems Manager 参数存储区检索数据。有关更多信息,请参阅中的检索密钥使用 Secrets Manager检索参数使用 Systems Manager Parameter Store