Как конечная точка шлюза Google Cloud API может доставлять данные из файла облачного хранилища?

Я нахожусь в процессе создания большого API, который будет использовать Google Cloud API Gateway для маршрутизации различных конечных точек к различным службам - некоторые из них могут быть бессерверными облачными функциями, другие будут обслуживаться приложением Rails в наших кластерах Kubernetes и так далее.

У нас будет набор информационных конечных точек, для которых требуется неаутентифицированный доступ от клиента, при этом информация будет меняться редко - примерно раз в несколько месяцев. Я надеялся записать содержимое этих конечных точек в Google Cloud Storage (в сегменте, который не доступен для чтения всем), а затем разрешить конфигурации шлюза API указывать на них определенные конечные точки (сегмент, доступный для чтения во всем мире, не будет соответствовать критерии безопасности для этого проекта).

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

Однако после создания конфигурации API с использованием этой учетной записи службы и запроса конечной точки в Postman вместо ожидаемого вывода JSON я вижу HTML-код страницы входа в Google.

Определение конечной точки в моей конфигурации OpenAPI:

paths:
  /products:
    get:
      x-google-backend:
        address: https://storage.cloud.google.com/<BUCKET_NAME>/products.json
      summary: List of products in JSON format
      operationId: listProductsJson
      produces:
        - application/json
      responses:
        "200":
          description: a product list
          schema:
            type: array
            items:
              $ref: '#/definitions/Product'

И это ответ Почтальона:

Скриншот почтальона, показывающий HTML-код для входа в Google

Есть ли способы заставить эту настройку работать или даже отладить, что здесь происходит? Я видел, как у людей были похожие проблемы с облачными функциями и значением JWT aud, но следование тому, что сработало для них, похоже, не оказывает никакого влияния на облачное хранилище.

Любая помощь приветствуется! (Я новичок в мире GCloud, поэтому, если у кого-то есть альтернативные реализации для таких в основном статических конечных точек, это тоже было бы круто.)


person Scott Matthewman    schedule 20.04.2021    source источник


Ответы (1)


Вы используете неправильный URL. Используйте https://storage.googleapis.com/<BUCKET_NAME>/products.json вместо https://storage.cloud.google.com/<BUCKET_NAME>/products.json

person guillaume blaquiere    schedule 20.04.2021
comment
Спасибо, это определенно изменило ситуацию, так что я чувствую, что двигаюсь вперед! Однако теперь я получаю сообщение об ошибке AuthenticationRequired в кодировке XML. Я продолжу исследовать себя, но с радостью приму указатели или решения :) - person Scott Matthewman; 21.04.2021
comment
Если ваша корзина не publc, вы, по-видимому, не можете попросить API Gateway добавить токен доступа к запросу от имени запрашивающей стороны. Напротив, вы можете сделать это для токена идентификации. Это странно... - person guillaume blaquiere; 21.04.2021
comment
Хорошо, спасибо за вашу помощь! Похоже, что этот конкретный вариант использования все равно уходит - похоже, этот список не может быть таким статичным, как мы изначально думали, поэтому GCS как хранилище может оказаться непригодным для использования в конце концов. Но, по крайней мере, с твоей помощью я продвинулся дальше, чем в одиночку! Принимаю этот ответ соответственно. - person Scott Matthewman; 21.04.2021