Записать ключ учетной записи Google Cloud Service, созданный в скрипте Python API
Мне удалось создать служебную учетную запись и ее ключ через 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 ответ
Формат учетной записи службы 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'])