Подтвердить что ты не робот

Как использовать учетные записи службы с gsutil, для загрузки в CS + BigQuery

Как загрузить данные в Google BigQuery с помощью gsutil с помощью учетной записи службы, созданной в консоли API Google?

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

Кажется, я могу использовать API Python для получения токена доступа, используя подписанные учетные данные JWT, но я бы предпочел использовать инструмент командной строки как gsutil с поддержкой возобновляемых загрузок и т.д.

EDIT: я хотел бы использовать gsutil в cron для загрузки файлов в Cloud Storage каждую ночь, а затем импортировать их в BigQuery.

Любая помощь или указания, которые нужно пойти, будут оценены.

4b9b3361

Ответ 1

Облачное хранилище Google только что выпустило новую версию (3.26) gsutil, которая поддерживает учетные записи служб (а также ряд других функций и исправлений ошибок). Если у вас уже установлен gsutil, вы можете получить эту версию, запустив:

gsutil update

Вкратце, вы можете настроить служебную учетную запись, выполнив:

gsutil config -e

Смотрите gsutil help config для более подробной информации об использовании команды config.
См. gsutil help creds для получения информации о различных вариантах учетных данных (и различных вариантах использования), которые поддерживает gsutil.

Майк Шварц, команда Google Cloud Storage

Ответ 2

Учетные записи служб обычно используются для идентификации приложений, но при использовании gsutil вы являетесь интерактивным пользователем, и более естественно использовать свою личную учетную запись. Вы всегда можете связать свои ресурсы Google Cloud Storage с личным аккаунтом и/или учетной записью службы (через списки управления доступом или вкладку "Панель разработчиков" ), поэтому я бы посоветовал использовать вашу личную учетную запись в gsutil, а затем использовать учетную запись службы для вашего приложения.

Ответ 3

Прежде всего, вы должны использовать инструмент командной строки bq для взаимодействия с BigQuery из командной строки. (Прочитайте об этом здесь и скачайте здесь).

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

bq --service_account [email protected] --service_account_credential_store keep_me_safe --service_account_private_key_file myfile.key query 'select count(*) from publicdata:samples.shakespeare' 

Введите bq --help для получения дополнительной информации.

Также довольно легко использовать учетные записи служб в вашем коде через Python или Java. Ниже приведен краткий пример использования некоторого кода из Руководство по авторизации BigQuery.

import httplib2

from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

# REPLACE WITH YOUR Project ID
PROJECT_NUMBER = 'XXXXXXXXXXX'
# REPLACE WITH THE SERVICE ACCOUNT EMAIL FROM GOOGLE DEV CONSOLE
SERVICE_ACCOUNT_EMAIL = '[email protected]'

f = file('key.p12', 'rb')
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
    SERVICE_ACCOUNT_EMAIL,
    key,
    scope='https://www.googleapis.com/auth/bigquery')

http = httplib2.Http()
http = credentials.authorize(http)

service = build('bigquery', 'v2')
datasets = service.datasets()
response = datasets.list(projectId=PROJECT_NUMBER).execute(http)

print('Dataset list:\n')
for dataset in response['datasets']:
  print("%s\n" % dataset['id'])

Ответ 4

Проводка в качестве ответа вместо комментария на основе запроса Джонатана

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

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

Вы можете сделать одно из следующих действий:

  • Вероятно, добавьте функцию быстро, чтобы gsutil/oauth2_plugin/oauth2_helper.py с использованием существующего python oauth реализация клиентских учетных записей
  • Извлеките токен доступа извне через поток учетной записи службы и сохраните его в местоположении кэша, указанном в ~/.boto(слегка взломанный).
  • Создайте учетную запись роли самостоятельно (через gmail.com или google apps) и предоставите разрешение этой учетной записи и используйте ее для потока OAuth.

Мы отправили запрос функции для поддержки учетных записей службы gsutil и получили некоторые положительные отзывы от команды. (хотя не может дать ETA)

Ответ 5

Чтобы расширить ответ @Mike, вам нужно

  1. Загрузите файл ключа учетной записи службы и поместите его, например, в /etc/backup-account.json
  2. gcloud auth activate-service-account --key-file/etc/backup-account.json

И теперь все звонки используют указанный сервисный аккаунт.