Аутентификация google.storage.Client без сохранения учетной записи службы JSON на диск - PullRequest
0 голосов
/ 09 апреля 2020

Для аутентификации клиента хранилища Google Cloud Platform я бы НЕ хотел записывать служебную учетную запись JSON (созданный вами файл учетных данных) на диск. Я хотел бы сохранить их в памяти после загрузки из хранилища ключей Hashicorp Vault, которое используется всеми экземплярами облака. Есть ли способ передать учетные данные JSON напрямую, вместо передачи объекта типа пути / файла?

Я понимаю, как это сделать, используя объект типа пути / файла следующим образом, но это то, что я хочу избегать (из-за проблем безопасности я предпочел бы никогда не записывать их на диск):

from google.cloud import storage

# set an environment variable that relies on a JSON file
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service_account.json"

# create the client (assumes the environment variable is set)
client = storage.Client()

# alternately, one can create the client without the environment 
# variable, but this still relies on a JSON file.
client = storage.Client.from_service_account_json("/path/to/service_account.json")

Я пытался обойти это путем прямой ссылки на JSON DATA (json_data), но это бросает ошибка: TypeError: expected str, bytes or os.PathLike object, not dict

json_data = {....[JSON]....}
client = storage.Client.from_service_account_json(json_data)

Кроме того, дамп до JSON, но я получаю ошибку:

with io.open(json_credentials_path, "r", encoding="utf-8") as json_fi: OSError: [Errno 63] File name too long: '{"type": "service_account", "project_id",......

json_data = {....[JSON]....}
client = storage.Client.from_service_account_json(json.dumps(json_data))

По предложению от @johnhanley, я также попытался:

from google.cloud import storage
from google.oauth2 import service_account

json_data = {...data loaded from keystore...}
type(json_data)
   dict

credentials = service_account.Credentials.from_service_account_info(json_data)
type(credentials)
   google.oauth2.service_account.Credentials

client = storage.Client(credentials=credentials)

Это привело к DefaultCredentialsError:

raise exceptions.DefaultCredentialsError(_HELP_MESSAGE) google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://developers.google.com/accounts/docs/application-default-credentials.

Если у вас есть идеи, как решить эту проблему, я Буду рад это услышать!

...