GCP: задание Cloud Scheduler с целевым HTTP-протоколом App Engine. Невозможно защитить соединение с администратором

Я создал задание Cloud Scheduler с таргетингом на HTTP App Engine. Целевой URL-адрес: / admin / task / create-documents.

У меня есть гибкий движок App Engine, работающий с java 8.

Он работает нормально, но теперь я хотел бы защитить доступ к сервлету, вызываемому заданием Cloud Scheduler (/ admin / task / create-documents), только для разработчиков GCP (обычно называемых «admin»). Я предположил, что задание Cloud Scheduler рассматривается как «администратор».

Вариант 1 - не сработало

Я попытался изменить файл web.xml как для стандартной среды, как упоминалось здесь, но безуспешно:

Файл web.xml:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-apphandlers1.xsd"
         version="3.1">

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>admin</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
</web-app>

Вариант 2 - не сработало

Я попытался изменить app.yaml, добавив login: admin в раздел handlers, как указано в документации здесь, но тоже безуспешно.

Файл app.yaml:

runtime:    java
env:        flex
threadsafe: true

runtime_config:
  jdk: openjdk8
  server: jetty9

handlers:
  - url: /admin/.*
    script: auto
    login: admin
  - url: /.*
    script: auto
    secure: always

env_variables:
  JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties

network:
  instance_tag: no-ip
  name: my-network
  subnetwork_name: my-subnet

Но я также заметил, что параметр входа в систему устарел, как упоминалось здесь и здесь. Они упоминают политики IAM, но я не уверен, как их настроить.

Как защитить конечную точку задания Cloud Scheduler только для администратора?


person lordofmax    schedule 07.11.2020    source источник


Ответы (1)


Вы не можете по конфигурации. Вам необходимо реализовать проверку в своем коде.

Вы можете добавить статическое значение к URL-адресу, например https://my-url.appspot.com/admin/task/create-documents?key=my_secret, или использовать аутентификацию OIDC с Cloud Scheduler, чтобы предоставить токен JWT вашей конечной точке.

В обоих случаях вам нужно будет проверить, является ли секрет (содержимое JWT) ожидаемым или нет.

person guillaume blaquiere    schedule 07.11.2020