如何使用AWS STS临时凭证配置Grafana CloudWatch数据源?
解决Grafana CloudWatch数据源AssumeRole配置的InvalidClientTokenId错误
1. 验证临时凭证有效性
先通过AWS CLI确认临时凭证能否正常调用CloudWatch API,排除凭证本身问题:
aws cloudwatch list-metrics --namespace AWS/EC2 --access-key <临时Access ID> --secret-key <临时密钥> --session-token <会话令牌> --region <你的AWS区域>
如果命令报错,重新生成临时凭证:
aws sts assume-role --role-arn arn:aws:iam::<你的AWS账户ID>:role/CloudwatchGrafanaRole --role-session-name grafana-session --region <你的AWS区域>
确保复制的AccessKeyId、SecretAccessKey、SessionToken完整,且Expiration时间未过期。
2. 检查IAM权限与信任策略
IAM用户grafana的策略
确保策略明确允许对目标角色的sts:AssumeRole操作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<你的AWS账户ID>:role/CloudwatchGrafanaRole" } ] }
CloudwatchGrafanaRole的信任策略
必须允许IAM用户grafana扮演该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<你的AWS账户ID>:user/grafana" }, "Action": "sts:AssumeRole" } ] }
替换<你的AWS账户ID>为实际账户ID,避免使用通配符缩小权限范围。
3. 正确配置Grafana CloudWatch数据源
不推荐手动输入临时凭证(易过期、易出错),推荐以下两种可靠方式:
方式一:直接在Grafana中配置AssumeRole
- 进入Grafana → 配置 → 数据源 → 添加数据源 → 选择CloudWatch
- Authentication provider选择
AWS SDK Default - 展开Assume Role选项,填入:
- Role ARN:
arn:aws:iam::<你的AWS账户ID>:role/CloudwatchGrafanaRole - External ID(如果角色信任策略要求则填写,否则留空)
- Role ARN:
- 在Credentials部分选择
Access and secret key,填入IAM用户grafana的永久Access Key ID和Secret Access Key(不是临时凭证) - 设置正确的Default Region,保存并测试连接。
方式二:Docker环境挂载AWS凭证文件
- 在宿主机编辑
~/.aws/credentials文件,若使用永久凭证:
若使用临时凭证:[default] aws_access_key_id = <grafana用户的永久Access ID> aws_secret_access_key = <grafana用户的永久Secret Key>[default] aws_access_key_id = <临时Access ID> aws_secret_access_key = <临时密钥> aws_session_token = <会话令牌> - 启动Grafana容器时挂载凭证文件:
docker run -d -p 3000:3000 -v ~/.aws/credentials:/root/.aws/credentials grafana/grafana:9.4.1 - 配置数据源时选择
AWS SDK Default作为认证提供者,开启Assume Role并填入角色ARN,Grafana会自动读取容器内的凭证文件。
4. 额外排查点
- 确认Grafana服务器能正常访问AWS STS和CloudWatch API(无防火墙、代理拦截)
- 检查
CloudwatchGrafanaRole的权限策略,确保包含CloudWatch只读权限:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:ListMetrics", "cloudwatch:GetMetricData", "cloudwatch:GetMetricStatistics" ], "Resource": "*" } ] } - 确保数据源配置的Region与CloudWatch指标所在区域一致
内容的提问来源于stack exchange,提问作者Sonali
相关产品推荐
相关产品推荐

