有关如何在 PHP 中管理 aws Secrets Manager 的想法

问题描述 投票:0回答:1

我正在使用 PHP 和 nginx 创建一个应用程序。 RDS密码通过AWS的秘密管理器进行管理,但PHP没有缓存包来管理秘密管理器。 (如果不缓存的话,每次调用页面都会调用Secret Manager,这对于速度和成本来说都是不好的。)

所以,我想提出一个新想法,感谢您对是否存在任何安全问题的反馈。

这个想法是使用nginx的fastcgi_param。 如果在nginx设置中添加fastcgi_param,则可以像PHP代码中的$_SERVER['var']一样使用它。 示例)fastcgi_param VAR1 VALUE1

工作详情如下

  1. 编写请求秘密的脚本(getSecret.sh)并将其保存为文件(必须提前安装jq包)
#!/bin/bash
aws secretsmanager get-secret-value --secret-id **SECRETID** --query SecretString --version-stage AWSCURRENT --region **REGION** --output text | jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' > /etc/nginx/fastcgi_params_custom
  1. 运行上述脚本时,会在“/etc/nginx”目录中创建一个名为 fastcgi_parms_custom 的文件。

  2. 将步骤 2 中创建的文件包含在 nginx 设置的 location ~ .php$ { ... } 块中,如下所示。

include fastcgi_params_custom
  1. 重启nginx服务器后,就可以在PHP代码中使用了,如下。
echo $_SERVER['username']." ".$_SERVER['password'];

上面的工作中,shell脚本的内容、变量名、权限设置等需要稍微完善一下,但只是简单的在想法层面上写的。 如果有任何安全问题,请告诉我。

(我正在考虑不在AWS控制台的设置中使用自动密码替换,而是通过修改shell脚本创建fastcgi_parms_custom然后重新启动nginx)

php amazon-web-services nginx amazon-rds secretsmanager
1个回答
0
投票

使用机密管理的主要原因是避免在非临时存储上持久保存机密。你的方法颠覆了这一点。此外,nginx 仅在启动时读取其配置文件 - 因此更改机密意味着重新启动服务。虽然可以在不中断服务的情况下重新启动守护进程,但这似乎仍然是一个粗略的解决方案。

你可以....

(可能还有其他解决方案)

© www.soinside.com 2019 - 2024. All rights reserved.