Включить API-интерфейсы, используя API-интерфейс serviceusage с учетной записью службы - PullRequest
0 голосов
/ 08 мая 2019

Я хочу создать автоматическое развертывание GCP для клиентов.

Для этого я открыл страницу для входа в систему с помощью Google, а затем включил IAM API и API использования сервиса.

Затем я создал служебную учетную запись, которую я хочу использовать с этого момента, чтобы включить другие необходимые API по требованию, а не все сразу.

Когда я пытаюсь включить API cloudkms, я получаю

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://serviceusage.googleapis.com/v1/projects/x-y-z/services/cloudkms.googleapis.com?alt=json returned "The caller does not have permission"

Я попытался использовать учетные данные учетной записи службы (google.auth.jwt.Credentials), которые я создал в ответ на создание учетной записи службы, и добавил все необходимые разрешения. Я не хочу предоставлять владельца роли учетной записи службы, поскольку хочу, чтобы у этой учетной записи было как можно меньше разрешений.

Когда я пытаюсь получить статус API cloudkms, используя разрешения пользователя, он работает.

Я видел, как некоторые решения обращались ко мне с необходимостью создания учетных данных для учетной записи службы здесь: https://console.developers.google.com/apis/credentials, но мне действительно нужно делать это и программно.

Мой код:

credentials = jwt.Credentials.from_service_account_file(service_account_info['email'] + '.json', audience="https://www.googleapis.com/auth/cloud-platform")
# credentials = GoogleCredentials.get_application_default() - it works with this
service_usage = googleapiclient.discovery.build('serviceusage', 'v1', credentials=credentials)
service_usage.services().get(name="projects/<project_id>/services/cloudkms.googleapis.com").execute()

Ошибка была упомянута выше.

1 Ответ

0 голосов
/ 09 мая 2019

Вам необходимо разрешение Cloud IAM serviceusage.services.enable, чтобы включить службы.В зависимости от того, какие функции вам требуются, например, перечисление услуг, вам нужно serviceusage.services.list.

Обычно вы добавляете роль roles/serviceusage.serviceUsageAdmin, которая включает следующие разрешения:

  • serviceusage.services.get
  • serviceusage.services.list
  • serviceusage.services.enable
  • serviceusage.services.disable
...