如何使用AWS ADOT Collector跨账户收集并发送EKS容器日志?
跨账户使用AWS ADOT Collector推送CloudWatch日志的解决方案
针对ADOT Collector的awscloudwatchlog exporter无Assume Role ARN选项的问题,可通过以下几种方式实现跨账户日志收集:
方案1:基于IAM角色链的凭证自动获取
- 工作负载账户配置:
- 创建IAM角色(如
ADOTCrossAccountRole),信任策略允许ADOT对应的K8s服务账户(IRSA角色)扮演该角色。 - 给该角色添加权限策略,允许执行
sts:AssumeRole操作,目标为监控账户中用于CloudWatch日志推送的角色ARN。
- 创建IAM角色(如
- 监控账户配置:
- 创建IAM角色(如
CloudWatchLogPushRole),信任策略允许工作负载账户的ADOTCrossAccountRole扮演该角色。 - 给该角色添加
CloudWatchLogs:*相关权限,确保能创建日志组、推送日志事件等。
- 创建IAM角色(如
- ADOT Collector配置:
- 无需在
awscloudwatchlogexporter中额外配置角色,ADOT会通过AWS SDK默认凭证链自动获取跨账户临时凭证。确保ADOT Pod使用绑定了工作负载账户IRSA角色的K8s服务账户运行。
- 无需在
方案2:使用OTEL Collector的awsauth扩展
- 配置
awsauth扩展:
在ADOT Collector配置文件中添加扩展,指定要扮演的监控账户角色ARN:extensions: awsauth: role_arn: "arn:aws:iam::监控账户ID:role/CloudWatchLogPushRole" region: "监控账户所在区域" - 关联扩展与exporter:
在awscloudwatchlogexporter配置中引用该扩展:exporters: awscloudwatchlogs: log_group_name: "/eks/workloads/app-logs" log_stream_name: "{pod-name}" region: "监控账户所在区域" auth: authenticator: awsauth - 启用扩展:
在service部分的extensions列表中加入awsauth确保生效:
需确保ADOT运行所用的IRSA角色有权限执行service: extensions: [awsauth] pipelines: logs: receivers: [otlp] processors: [batch] exporters: [awscloudwatchlogs]sts:AssumeRole操作目标角色。
方案3:通过环境变量指定跨账户角色
在ADOT Collector的Pod部署配置中添加AWS SDK相关环境变量,强制使用跨账户角色:
- 环境变量
AWS_ROLE_ARN:值为监控账户的CloudWatch日志推送角色ARN。 - 环境变量
AWS_WEB_IDENTITY_TOKEN_FILE:值为IRSA令牌路径(通常为/var/run/secrets/eks.amazonaws.com/serviceaccount/token)。 - 确保工作负载账户的IRSA角色有权限Assume监控账户的目标角色,且监控账户角色信任该IRSA角色。
这种方式依赖AWS SDK自动角色切换逻辑,ADOT的awscloudwatchlogexporter会自动使用跨账户凭证。
内容的提问来源于stack exchange,提问作者Jatin Mehrotra
相关产品推荐
相关产品推荐

