google-cloud-platform - 在 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 API和Stackdriver Monitoring API,我一定遗漏了一些东西,但我不能指望它,任何帮助将不胜感激。
解决方案
请注意,在 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)。然后您可以控制最终权限,只需向服务帐户添加/删除角色。
推荐阅读
- node.js - Docker-compose 变量未传递到生产 vue 应用程序中
- url - 应该如何解释这个 Google URL?
- javascript - Webpack@4.41 在构建反应脚本时出现 babel-loader@8 错误(模块解析失败:意外令牌)
- spring - 有没有办法使用 fxml 为 Spring Security 设置登录屏幕?
- mongodb - Mongodb Aggregate - 如何在匹配中引用其他字段
- javascript - 在 jQuery 中切换当前元素
- ssl - 在 Rust 中使用 async-tls 进行 tls 握手的未知发行者
- testng - testng 按时间段重复调用
- mysql - 查询以显示喜欢和不喜欢,不显示第一个表中的所有行
- c++ - IGraphicsCaptureItemInterop.CreateForWindow 遇到 winrt::hresult_access_denied ?