如何在EC2上为Python Flask应用程序存储秘密



我有一个简单的Flask应用程序,它使用在EC2实例上运行的Stripe。

我按照这个指南来运行:https://medium.com/techfront/step-by-step-visual-guide-on-deploying-a-flask-application-on-aws-ec2-8e3e8b82c4f7

我将键导出为环境变量,然后在代码中读取它们。

stripe_keys = {
"secret_key": os.environ["STRIPE_SECRET_KEY"],
"publishable_key": os.environ["STRIPE_PUBLISHABLE_KEY"],
"webhook_secret": os.environ["STRIPE_WEBHOOK_KEY"],
}

然而,这需要我通过SSH将变量设置到EC2机器中。有更好的方法吗?

我推荐AWS系统管理器-参数存储

  1. 在SSM参数存储中维护您的密钥,选择SecureString类型,以便您的密钥在静止时加密

  2. 给您的EC2实例IAM角色足够的权限,以获取和解密存储在SSM参数存储中的SecureString

  3. 确保您的EC2实例可以访问Internet,因为SSM参数存储是面向Internet的服务

  4. 在您的代码中,使用AWS SDK获取并解密存储在SSM参数存储中的SecureString

我想你是用Python写的,所以https://nqbao.medium.com/how-to-use-aws-ssm-parameter-store-easily-in-python-94fda04fea84

PS:如果您使用CloudFormation或其他Infra作为代码工具来提供EC2实例,大多数IaC工具都支持在部署期间将SSM参数存储作为env-var注入。使用这种方法,您的代码可以保持原样,您的EC2实例不需要额外的权限。

正如Chris Chen所指出的,您可以使用AWS参数存储,并且在它之上:AWStanding

假设您在Parameterstore:中存储了这样的变量

"/stripe/secret_key"
"/stripe/publishable_key"
"/stripe/webhook_secret"

然后你可以写这样的代码:

from awstanding.parameter_store import load_path
load_path('/stripe')
# Now you can access you variables exactly like this:
os.environ["STRIPE_SECRET_KEY"]
os.environ["STRIPE_PUBLISHABLE_KEY"]
os.environ["STRIPE_WEBHOOK_SECRET"]
# or store them in settings variables:
STRIPE_SECRET_KEY = os.environ["STRIPE_SECRET_KEY"]

此外,它还自动处理任何加密密钥。

最新更新