Я пытаюсь реализовать функцию, которая будет возвращать подписанные URL-адреса для объектов облачного хранилища (я знаю, что это бета-версия и пока официально не поддерживается).
Я заставил его работать локально с
url, err := storage.SignedURL(bucket, filename, &storage.SignedURLOptions{
GoogleAccessID: "my-service-account@my-project.iam.gserviceaccount.com",
PrivateKey: pkey,
Method: "GET",
Expires: time.Now().Add(90 * time.Minute),
Scheme: storage.SigningSchemeV4,
})
Все отлично работает, и я использую переменную окружения GOOGLE_APPLICATION_CREDENTIALS
, чтобы указать на файл ключа my-service-account.json
.
Когда я внедряю тот же код, однако, в облачную функцию, все сгенерированные URL вернут 403
при попытке доступа.
Я разверну функцию с помощью
--service-account my-service-account@my-project.iam.gserviceaccount.com
и я могу проверить в облачной консоли, что функция работает под этой учетной записью службы.
Насколько я понимаю, это должно означать, что оба экземпляра работают с одинаковыми полномочиями / разрешениями, но только на локально работающихвыдает действительные URL, а развернутая версия Cloud - нет.
Что мне здесь не хватает и как мне заставить это работать?