В разрешении отказано при создании бюджетного предупреждения с облачной функцией в облачной платформе Google

Я хочу создавать бюджетные оповещения с помощью облачной функции, написанной на Python, с использованием бета-версии BillingBudgets API.

Моя облачная функция написана на Python и находится в административном проекте и направлена ​​на создание одного бюджетного предупреждения для каждого существующего проекта в той же родительской учетной записи.

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

{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

Довольно очевидное сообщение, но учетная запись службы, используемая облачной функцией, имеет роль администратора учетной записи биллинга, поэтому я не могу понять, какое разрешение отсутствует.

Извлечение кода облачной функции:

import google.auth
from googleapiclient import discovery

scopes = ['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/cloud-billing']

credentials, project_id = google.auth.default(scopes)

billingbudgetsService = discovery.build('billingbudgets', 'v1beta1', credentials=credentials, cache_discovery=False)
billing_account = "billingAccounts/000000-AAAAAA-BBBBBB"
budget_body = {
    "budget": {
        "displayName": "MyBudget",
        "budgetFilter": {
            "projects": [
                "projects/11111111"
            ],
            "creditTypesTreatment": "INCLUDE_ALL_CREDITS"
        },
        "amount": {
            "specifiedAmount": {
                "currencyCode": "EUR",
                "units": "300"
            }
        },
        "thresholdRules": [
            {
                "thresholdPercent": 0.5,
                "spendBasis": "CURRENT_SPEND"
            },
            {
                "thresholdPercent": 0.9,
                "spendBasis": "CURRENT_SPEND"
            },
            {
                "thresholdPercent": 1,
                "spendBasis": "CURRENT_SPEND"
            }
        ],
        "allUpdatesRule": {
            "pubsubTopic": "projects/billing-project/topics/budgets-alerts",
            "schemaVersion": "1.0"
        }
    }
}

res = billingbudgetsService.billingAccounts().budgets().create(parent=billing_account, body=budget_body).execute()

Я уже проверил вызов API через API Explorer. с моей личной учетной записью (также администратором платежной учетной записи).

Кроме того, я получил ту же несанкционированную ошибку, отправив запрос с помощью команды curl, даже с моей личной учетной записью (которая работает с проводником API)

curl --request POST \
  'https://billingbudgets.googleapis.com/v1beta1/billingAccounts/AAAAAA-BBBBBB-DDDDDDD/budgets' \
  --header "authorization: Bearer $(gcloud auth application-default print-access-token)" \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"budget":{"displayName":"mybudget","budgetFilter":{"projects":["projects/11111111111"],"creditTypesTreatment":"INCLUDE_ALL_CREDITS"},"amount":{"specifiedAmount":{"currencyCode":"EUR","units":"300"}},"thresholdRules":[{"thresholdPercent":0.5,"spendBasis":"CURRENT_SPEND"},{"thresholdPercent":0.9,"spendBasis":"CURRENT_SPEND"},{"thresholdPercent":1,"spendBasis":"CURRENT_SPEND"}],"allUpdatesRule":{"pubsubTopic":"projects/project-billing/topics/budgets-alerts","schemaVersion":"1.0"}}}' \
  --compressed

Поэтому я подозреваю, что это проблема с OAuth, но после нескольких обходных путей для учетных данных OAuth и генерации токенов я до сих пор понятия не имею.

Любые мысли или предложения приветствуются. Спасибо


comment
не могли бы вы попробовать предоставить больше разрешений, чтобы отказаться, если это может быть проблема с разрешениями?   -  person Oliver Aragon    schedule 29.10.2020


Ответы (2)


Я исправил проблему, назначив роль владельца проекта GCP учетной записи службы, используемой облачной функцией. Но мне до сих пор непонятно, зачем нужно это разрешение (может, для доступа к API?)

person slelann    schedule 30.10.2020

В разрешении отказано при создании бюджетного предупреждения с облачной функцией в облачной платформе Google:

Решение:

Если вы планируете настроить тему Pub / Sub для программных бюджетных уведомлений, вам также необходимо добавить учетную запись службы в качестве участника проекта, в котором находится ваша тема Pub / Sub, и назначить роль администратора безопасности IAM учетной записи службы.

пожалуйста, обратитесь по ссылке для ясности

https://cloud.google.com/billing/docs/how-to/budget-api-setup

person saurabh pathak    schedule 05.05.2021