You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Ansible Vault密码存储在AWS Secrets Manager并通过CLI按需解密

实现方案:从AWS Secrets Manager读取Ansible Vault密码

核心逻辑是利用Ansible允许--vault-password-file指向可执行脚本的特性——脚本执行后直接输出密码,供Ansible Vault调用。以下是具体步骤:

1. 编写密码拉取脚本

创建一个可执行脚本(以Shell脚本为例,轻量易实现),从AWS Secrets Manager拉取你的Vault密码:

#!/bin/bash
# 替换为你的Secret名称和AWS区域
SECRET_NAME="ansible-vault-password"
REGION="us-east-1"

# 拉取密码并输出(-r参数确保输出不带引号)
aws secretsmanager get-secret-value \
  --secret-id "$SECRET_NAME" \
  --region "$REGION" \
  --query SecretString \
  --output text | jq -r .

若你的Secret是纯文本存储(非键值对格式),可去掉最后的| jq -r .,直接通过--query SecretString --output text输出。

2. 配置脚本权限(关键安全操作)

为防止其他用户读取或篡改脚本,设置严格的文件权限:

chmod 700 ./get_vault_pass.sh
chown $USER:$USER ./get_vault_pass.sh

3. 配置AWS IAM权限

执行脚本的用户/角色必须拥有读取目标Secret的权限,给对应的IAM实体添加以下策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:<你的区域>:<你的AWS账号ID>:secret:<你的Secret名称>-*"
    }
  ]
}

资源ARN中的-*是因为AWS Secrets Manager会自动给Secret添加随机后缀,用通配符匹配更稳妥。

4. 验证脚本可用性

先单独执行脚本,确认能正确输出纯密码(无多余换行、引号):

./get_vault_pass.sh

5. 用脚本解密Ansible Vault内容

直接通过--vault-password-file参数指向该脚本即可操作加密文件:

# 查看加密文件内容
ansible-vault view --vault-password-file=./get_vault_pass.sh encrypted_file.yml

# 编辑加密文件
ansible-vault edit --vault-password-file=./get_vault_pass.sh encrypted_file.yml

额外安全建议

  • 不要在脚本中硬编码AWS凭证,优先使用:
    • 本地~/.aws/credentials文件(记得设置chmod 600)
    • 环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
    • 若在EC2/EKS上运行,直接给实例/Pod绑定IAM角色(最安全,无需手动管理凭证)
  • 定期轮换AWS Secrets Manager中的Vault密码,脚本无需修改即可自动拉取最新值

内容的提问来源于stack exchange,提问作者ITSA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:35:16