想要使用AWS Secrets Manager登录Postgres,而无需使用用户名和密码作为纯文本。我不确定这是否可行,否则请原谅。目前,这是我使用psycopg2登录到postgres的目的:
import psycopg2
conn = psycopg2.connect(host="hostname",port='5432',database="db", user="admin", password="12345")
我已经将用户名和密码存储在Secrets Manager中,但不确定如何在此处使用。请帮助
答案 0 :(得分:2)
您应使用以下过程:
下面是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
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控制台中创建的机密。
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)
查看我的其他答案希望这能回答您的问题。