Передайте json ключевой файл из облачного хранилища в функцию ServiceAccountCredentials - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть следующие несколько строк кода

credentials = ServiceAccountCredentials.from_json_keyfile_name(
    filename,
    scopes=['https://www.googleapis.com/auth/analytics',
        'https://www.googleapis.com/auth/analytics.edit'])

Ожидается filename. Мой ключ json хранится в облачном хранилище Google. Как вернуть имя файла, чтобы я мог передать его в ServiceAccountCredentials, если мой контейнер называется bucket_name, а мой ключ - имя json.key

Пока я застрял с этим:

bucket = read_storage_client.get_bucket(bucket_name)
blob = bucket.get_blob("key.json")
json_data_string = blob.download_as_string()

Я могу напечатать json_data_string:

{\n "type": "service_account",\n "project_id": "xxxxxxxxx",\n "private_key_id": "xxxxxxxxxxx",\n "private_key": "-----BEGIN PRIVATE KEY-----\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQ=\\n-----END PRIVATE KEY-----\\n",\n "client_email": "xxxxxxxxxx@xxxxxxxxxxxx.iam.gserviceaccount.com",\n "client_id": "xxxxxxxxxxxxxxxx",\n "auth_uri": "https://accounts.google.com/o/oauth2/auth",\n "token_uri": "https://oauth2.googleapis.com/token",\n "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",\n "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxxxxxxxxx"\n}

Как использовать эту переменную json_data_string? как я могу передать ему функцию ServiceAccountCredentials. Я не уверен, что на самом деле это json_data_string переменная.

1 Ответ

1 голос
/ 08 февраля 2020

Вы застряли, потому что вам нужны учетные данные, чтобы иметь возможность загрузить ключ JSON. Msgstr "Вам нужен ключ json для загрузки ключа json". Совершенно абсурдно, нет?

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

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

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

Во-вторых, потому что учетная запись службы автоматически загружается в функцию, вы можете просто использовать учетные данные по умолчанию в своем коде

credentials = ServiceAccountCredentials.create_scoped(['https://www.googleapis.com/auth/analytics','https://www.googleapis.com/auth/analytics.edit'])

Дайте мне знать, если вам нужно больше.

РЕДАКТИРОВАТЬ

Я разрешу первую часть, потому что я настоятельно рекомендую вам не использовать JSON файл ключа в среде платформы GCP. Управлять ужасно: вам нужно хранить его надежно, вы должны регулярно его вращать (рекомендуется каждые 90 дней), ... Если вы действительно хотите его использовать, попробуйте секретный менеджер для безопасного хранения и извлечения

Итак, чтобы разблокировать вас (потому что это суть вашего вопроса), вы можете взглянуть на документацию класса python. Вы можете увидеть метод с именем from_json(). Но этот метод не позволяет определить область. Если вы хотите использовать область, вы можете использовать это from_json_keyfile_dict(). Таким образом, я сделаю что-то вроде этого

bucket = read_storage_client.get_bucket(bucket_name)
blob = bucket.get_blob("key.json")
json_data_string = blob.download_as_string()

import json
credentials = ServiceAccountCredentials.from_json_keyfile_dict(
    json.loads(json_data_string),
    scopes=['https://www.googleapis.com/auth/analytics',
        'https://www.googleapis.com/auth/analytics.edit'])

Примечание. Вы можете загрузить файл JSON, хранящийся в облачном хранилище, благодаря учетной записи службы по умолчанию, используемой облачной функцией. Это учетная запись службы по умолчанию для вычислительного механизма , которую я не рекомендую использовать по 2 причинам: во-первых, она широко открыта (это редактор проектов), во-вторых, все службы используют эту учетную запись службы по умолчанию, если ничего особенного определено, за исключением некоторых редких сервисов (например, планировщик или pubsub)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...