403与gcloud实例上的stackdrvier导出器的响应



我花了一天的时间在这上面,我只是看不出我做错了什么,在其他帖子中也找不到我的问题的答案,所以我请求帮助。

我有一个已经安装了prometheus的计算实例,还有一个已经配置了角色/查看器的服务帐户,用于自动发现和工作。

我需要在这些度量中添加stackdrivers监控度量,所以我在实例上添加了stackdriver导出器,但服务运行中仍然没有问题,我可以用prometheus在上面启动请求。

该服务是这样启动的:

/usr/local/bin/stackdriver_exporter --google.project-id PROJECTID --monitoring.metrics-type-prefixes 
cloudsql.googleapis.com/,compute.googleapis.com/,vpn.googleapis.com/,loadbalancing.googleapis.com/,storage.googleapis.com/,redis.googleapis.com/

那里似乎没有什么问题,我反复检查了这个项目,以防我失明,它看起来很好。

我的问题是,我总是以这个错误结束:

Nov 30 16:15:34 INSTANCENAME stackdriver_exporter[19149]: time="2018-11-30T16:15:34Z" leve
l=error msg="Error while getting Google Stackdriver Monitoring metrics: googleapi: Error 403: Request had
insufficient authentication scopes., forbidden" source="monitoring_collector.go:132"

我想到了一个角色问题,所以我添加了监视查看器,然后添加了监视管理员甚至添加了角色/所有者。

我还尝试将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为该帐户的特定变量,但仍然存在相同的错误。

我检查并启用了Stackdriver APIStackdriver监控API,我一定遗漏了什么,但我就是无法确定,如果有任何帮助,将不胜感激。

请注意,在gcloud中,最终权限是服务帐户的角色/权限与实例作用域之间的"掩码"。

将实例设置为作为服务帐户运行时,服务帐户的访问级别由授予该实例的访问范围和授予该服务帐户的IAM角色的组合决定。

因此,如果您在没有作用域https://www.googleapis.com/auth/monitoring.read的实例中使用角色为monitoring viewer的服务帐户运行此操作,您将无法读取监控器指标。

1.-使用gcloud compute instances describe INSTANCE检查实例的范围。你会看到这样的东西:

- email: 487724816353-compute@developer.gserviceaccount.com scopes: - https://www.googleapis.com/auth/monitoring.write - https://www.googleapis.com/auth/logging.write - https://www.googleapis.com/auth/devstorage.read_only 你能看到正确的瞄准镜吗?

2.-如果没有,请尝试设置您需要的范围:(你需要停止实例(

gcloud compute instances set-service-account INSTANCE --service-account SERVICE_ACCOUNT@xxxxxxxx.iam.gserviceaccount.com --scopes cloud-platform

3.-前面的命令允许完全访问实例中的所有APIS,如gcloud最佳实践中所建议的(https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#best_practices)。然后,您可以通过向服务帐户添加/删除角色来控制最终权限。

最新更新