Я пытаюсь программно обновить платежный аккаунт для одного из моих проектов. Я использую клиентскую библиотеку узла для googleapis REST. Это мой код:
const { google } = require('googleapis');
const cloudbilling = google.cloudbilling('v1');
async function main() {
let authClient;
try {
authClient = await authorize();
console.log('AUTH', authClient);
} catch (err) {
console.error(err);
}
const request = {
name: "projects/rensi-28",
requestBody: {
billingAccountName: "billingAccounts/My Billing Account"
}
};
google.options({auth: authClient});
try {
const response = (await cloudbilling.projects.updateBillingInfo(request)).data;
console.log(JSON.stringify(response, null, 2));
} catch (err) {
console.error('error:', err);
}
}
main();
async function authorize() {
const auth = new google.auth.GoogleAuth({
scopes: ['https://www.googleapis.com/auth/cloud-platform']
});
return await auth.getClient();
}
Это ошибка, которую я получаю:
errors: [
{
message: 'The caller does not have permission',
domain: 'global',
reason: 'forbidden'
}
]
Я использую учетную запись службы, и переменная среды установлена правильно, потому что я могу создавать проекты и использовать другие API.
Моя учетная запись службы имеет следующие роли:
Level | Role |
---|---|
Project | Project Billing Manager |
Project | Owner |
Organization | Billing Account Administrator |
Organization | Billing Account Creator |
Organization | Project Billing Manager |
Organization | Billing Account Viewer |
Organization | Owner |
Billing Account | Billing Account Administrator |
Billing Account | Billing Account User |
Billing Account | Billing Account Viewer |
Если включить биллинг из gcloud с той же учетной записью службы, он работает:
gcloud alpha billing projects link p001 --billing-account 45FG32-45FG32-45FG32
gcloud alpha billing projects link p001 --billing-account 45FG32-45FG32-45FG32
billingAccountName: billingAccounts/45FG32-45FG32-45FG32
billingEnabled: true
name: projects/p001/billingInfo
projectId: bxtrb-rensi-28
Что мне не хватает?