запросить API групп Google из gcp instance / function python - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь создать скрипт для запроса API групп Google из экземпляра GCP. Экземпляр имеет присоединенный SA, этот SA имеет SCOPE - 'https://www.googleapis.com/auth/admin.directory.group.readonly', разрешенный в GSuite, и пользователь также настроен в GSuite с пользовательской ролью, прикрепленной к нему (группы списков).

Для SA я создал файл ключа в консоли GCP. Затем я получаю учетные данные, поскольку в документации написано:

from googleapiclient.discovery import build
from google.oauth2 import service_account

creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

, затем добавьте пользователя - чтобы действовать как.

creds = creds.with_subject('user@domain.com')

service = build('admin', 'directory_v1', credentials=creds)

results = service.groups().list(domain=tenant, maxResults=10,
                    orderBy='email',
                    query='email:{}*'.format(group_name)).execute()

Затем я запрашиваю API, все работает отлично, и я получаю группы.

Итак, мой вопрос: есть ли способ использовать SA, прикрепленный к экземпляру, без генерации файла ключа json. Как получить compute_instance / учетные данные по умолчанию / из метаданных экземпляра и затем каким-то образом аутентифицировать их в API GSuite?

Или есть способ запрашивать группы, не обращаясь к API Gsuite, просто вызвать некоторые из них из GCP?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Ответы, которые я получил от Google:

  1. Нет, невозможно создать личный ключ для SA для олицетворения.
  2. Нет, правильный способ получения групп - запросить API Gsuite.
0 голосов
/ 06 февраля 2020

Вы должны прочитать статью next на официальной странице документации GCP

Вот пример того, как привязать служебную учетную запись к VM

gcloud compute instances create example-vm \
--service-account my-sa@my-project.iam.gserviceaccount.com \
--scopes https://www.googleapis.com/auth/admin.directory.group.readonly
...