Как правильно авторизовать запрос к Google Cloud Storage API?

Я пытаюсь использовать JSON API Google Cloud Storage для извлечения файлов из корзины с помощью HTTP-вызовов.

Я скручиваюсь из контейнера в GCE в том же проекте, что и сегмент хранилища, и учетная запись службы имеет доступ для чтения к сегменту.

Вот схема запросов:

https://storage.googleapis.com/{bucket}/{object}

Согласно консоли API, мне не нужно ничего особенного, поскольку учетная запись службы предоставляет учетные данные приложения по умолчанию. Однако я продолжаю это:

Anonymous caller does not have storage.objects.get

Я также попытался создать ключ API для проекта и добавил его к URL-адресу (https://storage.googleapis.com/{bucket}/{object}?key={key}), но все равно получил ту же ошибку 401.

Как я могу разрешить запросы на запросы к этому API?


person znat    schedule 03.11.2018    source источник
comment
ты пользуешься кубернетами? или это просто вычислительный движок?   -  person John Balvin Arias    schedule 05.11.2018
comment
Kubernetes на GKE   -  person znat    schedule 05.11.2018


Ответы (2)


URL-адрес, который вы используете, неверен. В API используется URL-адрес, который начинается с https://www.googleapis.com/storage/v1/b.

Не рекомендуется использовать ключи API. Вместо этого вы должны использовать Bearer: token. Я покажу оба метода.

Чтобы получить токен доступа для конфигурации gcloud по умолчанию:

gcloud auth print-access-token

Затем используйте токен в своем curl запросе. Замените TOKEN на токен из команды gcloud.

Чтобы перечислить сегменты:

curl -s -H "Authorization: Bearer TOKEN" https://www.googleapis.com/storage/v1/b

curl https://www.googleapis.com/storage/v1/b?key=APIKEY

Чтобы перечислить объекты:

curl -s -H "Authorization: Bearer TOKEN" https://www.googleapis.com/storage/v1/b/examplebucket/o

curl https://www.googleapis.com/storage/v1/b/examplebucket/o?key=APIKEY

Справочник по API: сегменты списка

person John Hanley    schedule 05.11.2018
comment
Спасибо. Я прошел через gcloud auth print-access-token, но он производит только недолговечный токен. Я использую этот API в проекте GCP, и мне бы хотелось избежать реализации всего потока Oauth. - person znat; 05.11.2018
comment
Все токены доступа недолговечны. Генерировать токены доступа довольно просто. затем вы авторизуете еще один до истечения срока его действия. Другой вариант - использовать SDK и учетные данные учетной записи службы, которые предназначены для вашего варианта использования. Однако вы меняете вопрос - создаете новый. - person John Hanley; 05.11.2018
comment
Дополнительный элемент, когда вы используете curl, ваши учетные данные не используются. Используется только то, что вы указали для curl. - person John Hanley; 05.11.2018

Если вы можете создать еще один кластер, вы можете получить такое разрешение: Щелкните в расширенном редактировании first затем нажмите Разрешить полный доступ ко всем облачным API  second

И все: D

person John Balvin Arias    schedule 05.11.2018