我有一个在 Google Container Builder 上触发构建的服务帐户。这工作正常,但现在我想使用该服务帐户检索构建日志。
这是获取日志的代码(令牌是使用 google-auto-auth 包获得的,这部分在其他地方运行良好,所以我真的不认为这是问题所在(:
var url = logsBucket + '/log-' + buildId + '.txt';
debug('Requesting log at %s', url);
request
.get(url)
.set('Authorization', 'Bearer ' + token)
.end(function(err, res) {
if (err) return cb(err);
var log = res.body;
debug('Received build log : %o', log);
cb(null, log);
});
目前,此操作失败并显示 401 未授权,尽管服务帐户有权访问以下角色:
- 管理引擎
- 管理员存储
- 存储中的管理对象
- 云容器构建器
- 读者云容器构建器
- 读取器存储对象
这是错误:
{
"message": "Forbidden",
"stack": "Error: Forbiddenn at Request.callback (/app/node_modules/superagent/lib/node/index.js:696:15)n [...]",
"status": 403,
"response": {
"req": {
"method": "GET",
"url": "https://storage.googleapis.com/{PROJECT_ID}.cloudbuild-logs.googleusercontent.com/log-42602b35-af02-4e75-8100-8a3bd0e720fb.txt",
"headers": {
"user-agent": "node-superagent/3.8.2",
"authorization": "Bearer {BEARER_TOKEN}"
}
},
"header": {
"x-guploader-uploadid": "{SOME-UPLOAD-ID}",
"content-type": "application/xml; charset=UTF-8",
"content-length": "337",
"date": "Wed, 10 Jan 2018 11:06:54 GMT",
"expires": "Wed, 10 Jan 2018 11:06:54 GMT",
"cache-control": "private, max-age=0",
"server": "UploadServer",
"alt-svc": "...",
"connection": "close"
},
"status": 403
}
}
知道为什么请求失败 403 吗?它是否来自缺失的范围?到目前为止,我只设置了scopes: 'https://www.googleapis.com/auth/cloud-platform'
。
GCS权限早于IAM,因此的工作方式略有不同。
要查看构建日志,相关服务帐户除了具有构建者编辑者角色外,还需要是项目的查看者。
-
role/viewer
包括角色role/cloudbuild.builds.viewer
-
role/cloudbuild.builds.editor
作为最后一步,您可能需要:(不是必需的(
- 禁用容器生成器 API 并重新启用它。这样做应该会让您的服务帐号再次访问您的项目。
另请查看:文档