如何成功拉取AWS参数存储中以SecureString加密的Cloudwatch代理配置?
解决CloudWatch Agent拉取加密SSM参数失败的问题
当CloudWatch Agent无法拉取以SecureString存储的SSM参数时,核心原因是EC2实例关联的IAM角色缺少必要权限,以下是具体解决步骤:
1. 配置IAM角色权限
确保EC2实例的IAM角色同时拥有SSM参数读取权限和对应KMS密钥的解密权限,示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ssm:GetParameter", "Resource": "arn:aws:ssm:<你的AWS区域>:<你的AWS账号ID>:parameter:<你的参数名称>" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:<你的AWS区域>:<你的AWS账号ID>:key:<加密参数使用的KMS密钥ID>" } ] }
- 替换占位符为实际的区域、账号ID、参数名称和KMS密钥ID
- 如果参数是分层路径(如
/cloudwatch/agent/config),Resource需填写完整的参数ARN
2. 验证KMS密钥配置
- 若使用客户管理CMK:确认该密钥的密钥策略已允许上述IAM角色执行
kms:Decrypt操作 - 若使用AWS管理密钥:默认情况下同账号的EC2实例角色可解密,若有自定义限制需调整密钥策略
3. 测试与排查
- 保持原启动命令不变:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:<parameter-store-name> - 权限生效可能需要几分钟,若仍失败可查看Agent日志定位问题:
cat /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
内容的提问来源于stack exchange,提问作者Gouthami Devale
相关产品推荐
相关产品推荐

