У меня есть сервисный аккаунт, который запускает сборки в Google Container Builder. Это нормально работает, но теперь я хотел бы получать журналы сборки, используя эту учетную запись службы.

Вот код, который извлекает журнал (токен получается с помощью google-auto-auth package, и эта часть хорошо работает в других местах, поэтому я действительно не думаю, что это проблема):

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 Неавторизовано, хотя учетная запись службы имеет доступ к следующим ролям:

  • Admin kubernetes Engine
  • Хранилище администратора
  • Объекты администратора в хранилище
  • Конструктор облачных контейнеров
  • Конструктор контейнеров Reader Cloud
  • Читательские объекты хранения

Это ошибка:

{
  "message": "Forbidden",
  "stack": "Error: Forbidden\n    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'.

8
Overdrivr 10 Янв 2018 в 14:14

1 ответ

Лучший ответ

Разрешения GCS появились раньше, чем IAM, и поэтому работают немного иначе.

Для просмотра журналов сборки соответствующая учетная запись службы должна быть наблюдателем в проекте в дополнение к роли редактора построителя .

  • role/viewer включает роль role/cloudbuild.builds.viewer
  • role/cloudbuild.builds.editor

В качестве последнего шага вы можете захотеть: (Не обязательно)

  • Отключите API Конструктора контейнеров и снова включите его. Это должно снова предоставить вашей учетной записи службы доступ к вашему проекту.

См. Также: docs

9
gokcand 15 Янв 2018 в 09:33