Как я могу использовать переменную среды GOOGLE_APPLICATION_CREDENTIALS, чтобы подписать URL-адрес облачного хранилища? - PullRequest
0 голосов
/ 11 апреля 2019

Как я могу использовать неявную переменную среды GOOGLE_APPLICATION_CREDENTIALS, предоставленную облачной функции , для подписи URL-адреса облачного хранилища?

Следующее работает локально, когда существует переменная окружения GOOGLE_APPLICATION_CREDENTIALS, но не работает с KeyError при запуске внутри облачной функции.

google_credentials = service_account.Credentials.from_service_account_file(
    os.environ['GOOGLE_APPLICATION_CREDENTIALS']
)
client_email = google_credentials.service_account_email
credential_scope = '{}/auto/storage/goog4_request'.format(datestamp)
credential = '{}/{}'.format(client_email, credential_scope)
# ...
signature = binascii.hexlify(
    google_credentials.signer.sign(string_to_sign)
).decode()

Облачная функция, о которой идет речь, будет развернута в нескольких средах, поэтому я бы не хотел на самом деле развертывать файл учетных данных - который работает .

На случай, если это уместно, я использую Python 3.7 и основываю свое решение на этом примере.

1 Ответ

1 голос
/ 25 апреля 2019

GOOGLE_APPLICATION_CREDENTIALS не требуется при развертывании вашей функции. Пожалуйста, посмотрите на это [1], чтобы увидеть, как обрабатывать аутентифицированные запросы.

Как видно из [2], клиентским библиотекам облачного хранилища может потребоваться API IAM (iam.googleapis.com) и разрешение iam.serviceAccounts.signBlob. Хотя облачные функции имеют «учетные данные приложения по умолчанию», они (как правило) не включают разрешение iam.serviceAccounts.signBlob.

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

Пожалуйста, дайте мне знать, если эта информация поможет решить вашу проблему.


[1] https://cloud.google.com/functions/docs/writing/http#authentication_and_cors
[2] https://cloud.google.com/functions/docs/writing/http#uploading_files_via_cloud_storage

...