I sh для автоматизации всех этапов настройки нового проекта Firebase без какого-либо взаимодействия с пользователем. Я выполнил большинство шагов с помощью gCloud CLI , Firebase CLI или GoogleApis NodeJS библиотеки.
Аутентификация имеет Это было сделано с помощью инструментов CLI или через служебные учетные записи.
Единственное, что я пока не смог сделать, - это добавить Google Analytics во вновь созданный проект Firebase. Я нашел это Google Api , которое должно выполнить sh, но у меня возникли проблемы с аутентификацией запроса.
Как я могу аутентифицировать запрос к этому API без какого-либо взаимодействия с пользователем? API не доступен через инструменты CLI, поэтому я бы предпочел использовать служебную учетную запись с владельцем IAM-ролью, но запрос продолжает давать сбой.
Мои действия до сих пор
- Обеспечение того, что API управления включен
- Добавить учетную запись службы в проект GCloud с правами владельца
- Загрузить служебная учетная запись
- Выполните следующий код
import { google } from 'googleapis';
import * as fetch from 'node-fetch';
async function addGoogleAnalytics {
const token = await getJWTAcessToken();
await addAnalyticsFetch(token);
};
async function addAnalyticsFetch(accessToken) {
const url = `https://firebase.googleapis.com/v1beta1/projects/<my-project-id>:addGoogleAnalytics`;
const fetchResult = await fetch(url, {
method: 'POST',
headers: { Authorization: `Bearer ${accessToken}` },
json: true,
body: JSON.stringify({ analyticsAccountId: '<my-analytics-account-id>' }),
});
const fetchResultText = await fetchResult.text();
console.log('Fetch result: ', fetchResultText);
}
function getJWTAcessToken() {
const SCOPES = ['https://www.googleapis.com/auth/cloud-platform'];
const key = require('../../serviceAccount.json');
return new Promise((resolve, reject) => {
const jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, SCOPES, null);
jwtClient.authorize((err, tokens) => {
if (err) {
reject(err);
return;
}
resolve(tokens.access_token);
});
});
}
В результате вызова API получается простое 403 - «Вызывающий не имеет разрешения». Я также пытался сделать это с помощью библиотеки GoogleApis NodeJS с похожими результатами.
Если владелец проекта не дает достаточных привилегий, как разрешить этой учетной записи службы выполнять этот вызов API? У меня есть подозрение, что мне не удается, потому что учетная запись службы никоим образом не связана с учетной записью Google Analytics, но в документации это не указано как требование. Он также не указан как шаг в собственном руководстве Google .