Как использовать учетные записи службы с gsutil, для загрузки в CS + BigQuery
Как загрузить данные в Google BigQuery с помощью gsutil с помощью учетной записи службы, созданной в консоли API Google?
Сначала я пытаюсь загрузить данные в облачное хранилище с помощью gsutil, так как это кажется рекомендуемой моделью. Все работает отлично с одобрением пользователя gmail, но оно не позволяет мне использовать учетную запись службы.
Кажется, я могу использовать API Python для получения токена доступа, используя подписанные учетные данные JWT, но я бы предпочел использовать инструмент командной строки как gsutil с поддержкой возобновляемых загрузок и т.д.
EDIT: я хотел бы использовать gsutil в cron для загрузки файлов в Cloud Storage каждую ночь, а затем импортировать их в BigQuery.
Любая помощь или указания, которые нужно пойти, будут оценены.
Ответы
Ответ 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, вам нужно
- Загрузите файл ключа учетной записи службы и поместите его, например, в
/etc/backup-account.json
-
gcloud auth activate-service-account --key-file/etc/backup-account.json
И теперь все звонки используют указанный сервисный аккаунт.