【问题标题】:Can apache startup run a script to populate environment?apache 启动可以运行脚本来填充环境吗?
【发布时间】:2026-01-11 20:50:01
【问题描述】:

我们正在将网站迁移到 AWS 环境并在 EC2 上运行 apache2。我们计划使用 AWS 机密管理器来存储一些凭证,例如 RDS(数据库)和电子邮件凭证。我还在 apache 中使用环境变量来存储 AWS 凭证,但由于它是用于检索秘密的 AWS 凭证,我想知道是否有任何方法可以在 apache 启动时运行脚本以使用 aws- sdk 来检索这些秘密。

或者有其他关于如何做的建议吗?我可以在需要这种访问权限的 PHP 代码中做到这一点,但我现在只是在探索什么是可能的。如果 apache 启动时能加载一些配置选项就好了。

【问题讨论】:

  • 那么你想要从你的秘密管理器配置中生成你的 apache 环境变量的要求是什么? :)
  • 基本上运行一个 php 脚本来通过 aws-sdk 获取一些值。我可以通过使用 ExecStartPre= 修改 apache2.service (systemd) 来做到这一点吗?
  • 废话,但这不起作用,因为那时我需要找到某种方法来获取它的 aws 凭据。 (它们可通过站点配置中的 apache2 环境获得)
  • 如果您在 EC2 实例上运行,您应该使用 IAM 角色而不是 IAM 凭证,关于预填充它可能最好尝试避免接触 apache 创建的文件。我不认为创建一个可以在代码部署时运行或在 cron 上运行的小脚本是可能的?是否有任何特定原因必须在 Apache 启动时启动? :)
  • 我正在尝试从 AWS Secrets 获取凭据以添加到可用于在 apache 中运行的 php 脚本的环境变量。

标签: amazon-web-services amazon-ec2 apache2 aws-secrets-manager aws-php-sdk


【解决方案1】:

您的两个选项似乎是编写一个填充 env 变量的启动脚本,然后将 apache 作为子进程启动以便它可以读取这些变量,或者修改 Web 应用程序以直接读取机密。

直接在应用程序中读取机密(可能从一些短期缓存中)将允许您轮换数据库凭据,而无需重新启动应用程序。

此外,如果您在 EC2 上运行,则无需使用 AWS 凭据填充环境变量。只需使用roles for EC2。 AWS CLI 和 SDK 已经知道如何直接检索这些凭证。

【讨论】:

  • 所以基本上“不”
  • 正确,但似乎使用 EC2 的角色应该是最简单的选择。
  • 是的,现在改用那个方法