如何在AWS EC2中获取AWS Secrets Manager存储的加密数据库密码
AWS Secrets Manager KMS加密及EC2解密使用操作指南
1. 前置权限配置
你需要先为EC2实例关联的IAM角色添加以下权限:
- Secrets Manager密钥读取权限:允许EC2拉取存储的密码密文
- 对应KMS密钥的解密权限:如果你使用自定义KMS密钥加密Secrets Manager内容,需要单独添加该权限;如果使用Secrets Manager默认托管密钥
aws/secretsmanager,无需额外配置KMS权限
示例IAM权限策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:<区域>:<账号ID>:secret:<你的密钥名称>-*" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:<区域>:<账号ID>:key/<自定义KMS密钥ID>" } ] }
如果EC2没有公网访问权限,需要在对应VPC下配置Secrets Manager和KMS的VPC端点,保证网络连通性
2. EC2实例内解密及数据库连接操作
首先确保EC2实例内已安装AWS CLI v2及jq工具(用于解析JSON格式的密钥内容)。
2.1 拉取并解密密码
执行以下命令直接获取明文数据库密码:
aws secretsmanager get-secret-value \ --secret-id <你的密钥ID/名称> \ --region <AWS区域代码> \ --query SecretString \ --output text | jq -r '.password'
你可以将输出的密码赋值给变量,避免明文出现在命令历史中:
DB_PASS=$(aws secretsmanager get-secret-value --secret-id <你的密钥ID/名称> --region <AWS区域代码> --query SecretString --output text | jq -r '.password')
2.2 使用密码连接数据库
以MySQL为例,直接调用变量即可完成连接:
mysql -h <数据库地址> -u <数据库用户名> -p"${DB_PASS}"
操作完成后可手动清除环境变量:unset DB_PASS
内容的提问来源于stack exchange,提问作者satyajeet kumar
相关产品推荐
相关产品推荐

