Записать ключ учетной записи Google Cloud Service, созданный в скрипте Python API - PullRequest
0 голосов
/ 21 декабря 2018

Мне удалось создать служебную учетную запись и ее собственный ключ через API Python iamcredetials.googleapis.com, но я не могу войти в него, поскольку ключ имеет формат P12 и получен как dict, и я могуНе можете найти ключ для входа в систему. Есть ли способ создать файл p12 или что-то еще, чтобы я мог использовать ключ?

Я пытался использовать функции, доступные в модуле oauth2clinet.service_account.ServiceAccountCredentials(), но ни одна из них не загружала его успешно, я понимаю, что в этой библиотеке есть некоторая степень устаревания, и, возможно, я использую устаревшие методы.

Я был ближе к успешному входу в систему, когда использовал функцию _from_p12_keyfile_contents(), которая вызвала ошибку «кодирования подпрограмм», что мне непонятно.

from oauth2client.service_account import ServiceAccountCredentials

from googleapiclient import discovery, errors, logging


default_creds = google_application_defaults()

service = discovery.build("iam", "v1", credentials=default_creds, cache_discovery = False)

key = service.projects().serviceAccounts().keys().create( name = serviceAccMail, body={}).execute()

creds = ServiceAccountCredentials._from_p12_keyfile_contents(accountEmail, newkey["privateKeyData"], "notasecret")

Error: [('asn1 encoding routines', 'asn1_check_tlen', 'wrong tag'), ('asn1 encoding routines', 'asn1_item_embed_d2i', 'nested asn1 error')]

Какой правильный способ записать этовведите?

1 Ответ

0 голосов
/ 21 декабря 2018

Формат учетной записи службы PFX (P12) устарел.Вернитесь в консоль Google и загрузите учетные данные учетной записи службы в формате Json.

После загрузки учетных данных в формате Json измените код:

from google.oauth2 import service_account

sa_file = 'full/path/to/service_account.json'

default_creds = service_account.Credentials.from_service_account_file(sa_file)

[Обновление: следующеекод покажет, как использовать учетные данные P12]

Примечание. Учетные данные P12 не работают со всеми API Google (тип учетных данных отличается).Этот пример для Google Discovery API.Этот пример не будет работать с google.cloud.storage, например.

'''
Test program to use P12 credentials with Google Cloud Storage
'''
from oauth2client.service_account import ServiceAccountCredentials
import googleapiclient.discovery

# Details on the Google Service Account. The email must match the Google Console.
project_id = 'development-123456'
sa_filename = 'compute-engine.p12'
sa_password = 'notasecret'
sa_email = 'development-123456@developer.gserviceaccount.com'

SCOPES = ["https://www.googleapis.com/auth/cloud-platform"]

cred = ServiceAccountCredentials.from_p12_keyfile(
        sa_email,
        sa_filename,
        private_key_password=sa_password,
        scopes=SCOPES)

client = googleapiclient.discovery.build('storage', 'v1', credentials=cred)

buckets = client.buckets().list(project=project_id).execute()

print('')
print('Listing buckets:')
for bucket in buckets['items']:
    print(bucket['name'])
...