如何为运行在EC2上的Python Flask应用安全存储密钥?
EC2 Flask应用Stripe密钥管理优化方案
- 方案1:使用AWS Systems Manager Parameter Store(安全性最高,推荐生产环境使用)
这是AWS原生提供的配置与密钥管理服务,支持加密存储、细粒度权限控制,完全无需手动登录EC2实例设置环境变量,还支持密钥无缝轮换。
操作流程:
- 进入AWS控制台Systems Manager的Parameter Store页面,将3个Stripe密钥分别创建为
SecureString类型的参数,默认使用AWS KMS加密即可 - 为EC2实例绑定的IAM角色添加对应3个参数的
ssm:GetParameter权限 - 代码侧安装boto3依赖,直接从Parameter Store拉取配置即可,示例代码:
import boto3 import os ssm_client = boto3.client('ssm', region_name='你的EC2实例所属区域') def get_secure_param(param_name): return ssm_client.get_parameter(Name=param_name, WithDecryption=True)['Parameter']['Value'] stripe_keys = { "secret_key": get_secure_param("/prod/stripe/secret_key"), "publishable_key": get_secure_param("/prod/stripe/publishable_key"), "webhook_secret": get_secure_param("/prod/stripe/webhook_secret"), }
后续密钥更新只需在Parameter Store修改即可,无需改动EC2实例内的任何配置。
- 方案2:使用.env文件配合python-dotenv(小型项目最简方案)
无需每次手动执行export命令,仅需一次性配置.env文件即可:
- 项目中安装
python-dotenv依赖 - 在项目根目录创建
.env文件,写入对应密钥配置:
STRIPE_SECRET_KEY=你的Stripe私有密钥 STRIPE_PUBLISHABLE_KEY=你的Stripe公开密钥 STRIPE_WEBHOOK_KEY=你的Stripe Webhook密钥
- 将
.env文件添加到.gitignore规则中,避免密钥意外提交到代码仓库 - 在Flask启动代码的最开头添加环境变量加载逻辑:
from dotenv import load_dotenv load_dotenv()
原有读取os.environ的代码无需任何改动,部署时只要将.env文件传到EC2的项目根目录即可生效。
- 方案3:在systemd服务配置中定义环境变量
如果你使用systemd管理Flask应用进程,可以直接在服务配置中固定环境变量:
- 编辑Flask服务对应的
.service文件(默认存放在/etc/systemd/system/目录下) - 在
[Service]段落添加如下配置:
Environment="STRIPE_SECRET_KEY=你的Stripe私有密钥" Environment="STRIPE_PUBLISHABLE_KEY=你的Stripe公开密钥" Environment="STRIPE_WEBHOOK_KEY=你的Stripe Webhook密钥"
- 执行
systemctl daemon-reload重载配置,再重启Flask服务即可生效,无需手动登录实例导出环境变量。
内容的提问来源于stack exchange,提问作者user7692855
相关产品推荐
相关产品推荐

