使用AWS Secrets Manager连接到Postgres数据库

时间:2019-05-01 00:47:30

标签: python amazon-web-services psycopg2 aws-secrets-manager

想要使用AWS Secrets Manager登录Postgres,而无需使用用户名和密码作为纯文本。我不确定这是否可行,否则请原谅。目前,这是我使用psycopg2登录到postgres的目的:

 import psycopg2

conn = psycopg2.connect(host="hostname",port='5432',database="db", user="admin", password="12345")

我已经将用户名和密码存储在Secrets Manager中,但不确定如何在此处使用。请帮助

4 个答案:

答案 0 :(得分:2)

您应使用以下过程:

  1. 连接到AWS Secrets Manager。
  2. 获取用户名和密码。您需要按照存储在Secrets Manager中的方式对其进行映射。
  3. 将其存储在变量中,并将其传递给连接字符串。

下面是amazon提供的示例python脚本:

23

答案 1 :(得分:2)

您可以使用控制台将凭据(用户名/密码)存储在SecretsManager中。 您可以将它们存储为键值对,例如-

{ "username": "admin", "password": "12345" }

要在Python脚本中使用此代码,您可以执行以下操作-

session = boto3.session.Session()
client = session.client(
    service_name='secretsmanager',
    region=< region_name >
)
secret = client.get_secret_value(
         SecretId=secret_name
)
secret_dict = json.loads(secret['SecretString'])

username = secret_dict['username']
passw = secret_dict['password']

conn = psycopg2.connect(host="hostname",port='5432',database="db", user=username, password=passw)

请注意,这是一个没有错误处理的简化示例。在示例中,您还需要填写正确的区域来代替

答案 2 :(得分:0)

在可以使用连接中的机密值之前,需要从Secrets Manager中检索它们。

AWS提供了参考代码,用于使用Python here从Secrets Manager检索机密。

答案 3 :(得分:0)

我创建了一个名为pysecret的开源库,它使API非常干净且易于使用。以下是AWS Secret Manager集成的文档:https://github.com/MacHu-GWU/pysecret-project#aws-key-management-service-and-secret-manager-integration

  1. 手动将您的秘密值放入json或使用 pysecret创建一个。
from pysecret import AWSSecret

aws_profile = "my_aws_profile"
aws = AWSSecret(profile_name=aws_profile)

secret_id = "my-example-secret"
secret_data = {
    "host": "www.example.com",
    "port": 1234,
    "database": "mydatabase",
    "username": "admin",
    "password": "mypassword",
}
aws.deploy_secret(name=secret_id, secret_data=secret_data) # or you can pass kms_key_id if you created a custom kms key

然后,您应该可以看到在aws控制台中创建的机密。

  1. 在lambda函数或任何python代码中读取您的秘密值
aws = AWSSecret(profile_name=aws_profile) # in lambda code, don't need ``profile_name=aws_profile``
username = aws.get_secret_value(secret_id="my-example-secret", key="password") # admin
password = aws.get_secret_value(secret_id="my-example-secret", key="password") # mypassword

如果您正在编写 Lambda函数的代码,则可以在这里Using AWS Secrets Manager with Python (Lambda Console)

查看我的其他答案

希望这能回答您的问题。