首页 > 解决方案 > 在 gcloud 实例上使用 stackdrvier 导出器的 403 响应

问题描述

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

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

我需要将 stackdrivers 监控指标添加到指标中,所以我在实例上添加了 stackdriver exporter,服务运行仍然没有问题,我可以使用 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 Monitoring API,我一定遗漏了一些东西,但我不能指望它,任何帮助将不胜感激。

标签: google-cloud-platformprometheusstackdriver

解决方案


请注意,在 gcloud 中,最终权限是服务帐户的角色/权限与实例范围之间的“掩码”。

当您将实例设置为作为服务账户运行时,服务账户的访问级别取决于授予实例的访问范围和授予服务账户的 IAM 角色的组合。

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

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.- 如 gcloud 最佳实践 ( https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-实例#best_practices)。然后您可以控制最终权限,只需向服务帐户添加/删除角色。


推荐阅读