Настройка безопасности для приложения Tomcat, JBoss или Java SE в службе приложение Azure

В этой статье показано, как настроить параметры безопасности Java в Службах приложений. Приложения Java, выполняемые в службе приложений, имеют тот же набор рекомендаций по безопасности , что и другие приложения.

Служба приложений Azure запускает веб-приложения Java в трех типах в полностью управляемой службе:

  • Java Standard Edition (SE). Java SE может запускать приложение, развернутое в виде пакета JAR-файла Java, содержащего внедренный сервер, например Spring Boot, Quarkus, Dropwizard или приложение с внедренным сервером Tomcat или Jetty.
  • Tomcat. Встроенный сервер Tomcat может запускать приложение, развернутое как пакет веб-приложения (WAR).
  • Платформа корпоративных приложений JBoss (EAP): встроенный сервер JBoss EAP может запускать приложение, развернутое как пакет WAR или корпоративного архива (EAR). Этот параметр поддерживается для приложений Linux в наборе ценовых категорий, включая Бесплатный, Премиум версии 3 и Изолированный версии 2.

Замечание

JBoss EAP в службе приложений теперь поддерживает выставление счетов за использование собственной лицензии (BYOL). BYOL позволяет клиентам, имеющим подписки Red Hat, применять эти лицензии непосредственно к развертываниям JBoss EAP в Службе приложений Azure. Дополнительные сведения см. в разделе "Поддержка BYOL для JBoss EAP" в службе приложений.

Аутентификация пользователей (Easy Auth)

Настройте аутентификацию приложения на портале Azure с помощью параметра Проверка подлинности и авторизация. Оттуда можно включить проверку подлинности с помощью идентификатора Microsoft Entra или социальных входов, таких как Facebook, Google или GitHub. Настройка через портал Azure работает только при конфигурации одного поставщика аутентификации. Дополнительные сведения см. в статье «Настройка приложения службы приложений для использования входа в Microsoft Entra» и в связанных статьях о других поставщиках удостоверений. Если необходимо включить несколько поставщиков входа, см. статью "Настройка входов и выходов".

Разработчики Spring Boot могут использовать начальное средство Microsoft Entra Spring Boot для защиты приложений с помощью знакомых заметок Spring Security и API. Увеличьте максимальный размер заголовка в файле application.properties. Мы рекомендуем использовать значение 16384.

Приложение Tomcat может получить доступ к утверждениям пользователя непосредственно из сервлета, преобразовав объект Principal в объект Map. Объект Map сопоставляет каждый тип утверждения с коллекцией утверждений для этого типа. В следующем примере кода request является экземпляром HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

Теперь можно проверить объект Map для любого конкретного утверждения. Например, следующий фрагмент кода выполняет перебор всех типов утверждений и выводит содержимое каждой коллекции.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

Для выхода пользователей используйте путь /.auth/ext/logout. Сведения о других действиях см. в разделе "Настройка входов и выходов". Существует также официальная документация по интерфейсу Tomcat HttpServletRequest и его методам. В зависимости от конфигурации службы приложений также происходит гидратирование следующих методов сервлета:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

Чтобы отключить эту функцию, создайте параметр приложения с именем WEBSITE_AUTH_SKIP_PRINCIPAL со значением 1. Чтобы отключить все фильтры сервлета, добавленные службой приложений, создайте параметр с именем WEBSITE_SKIP_FILTERS со значением 1.

Сведения о JBoss EAP см. на вкладке Tomcat.

Настройка TLS

Чтобы отправить существующий сертификат TLS и привязать его к доменному имени приложения, см. раздел "Включить HTTPS" для личного домена в службе приложений Azure. Вы также можете настроить приложение для принудительного применения TLS.

Используйте ссылки Azure Key Vault

Azure Key Vault обеспечивает централизованное управление секретами с политиками доступа и журналом аудита. Вы можете хранить секреты, такие как пароли или строки подключения, в хранилище ключей. Эти секреты можно получить в приложении с помощью переменных среды.

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

Файлы конфигурации Spring см. в разделе "Внешняя конфигурация".

Чтобы внедрить эти секреты в файл конфигурации Spring, используйте синтаксис внедрения переменных среды (${MY_ENV_VAR}).

Чтобы внедрить эти секреты в файл конфигурации Tomcat, используйте синтаксис внедрения переменных среды (${MY_ENV_VAR}).

Использование хранилища ключей Java в Linux

По умолчанию все общедоступные или частные сертификаты, отправленные в Linux службы приложений , загружаются в соответствующие хранилища ключей Java при запуске контейнера. После отправки сертификата необходимо перезапустить службу приложений, чтобы она была загружена в хранилище ключей Java. Общедоступные сертификаты загружаются в хранилище ключей по адресу $JRE_HOME/lib/security/cacerts. Частные сертификаты хранятся в $JRE_HOME/lib/security/client.jks.

Для шифрования подключения JDBC с сертификатами в хранилище ключей Java может потребоваться дополнительная конфигурация:

Инициализация хранилища ключей Java в Linux

Чтобы инициализировать объект import java.security.KeyStore, загрузите файл хранилища ключей с паролем. Пароль по умолчанию для обоих хранилищ ключей — changeit.

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

Загрузка хранилища ключей вручную в Linux

Сертификаты можно загрузить в хранилище ключей вручную. Чтобы отключить автоматическую загрузку сертификатов в хранилище ключей, создайте параметр приложения SKIP_JAVA_KEYSTORE_LOAD, со значением 1. Все общедоступные сертификаты, отправленные в Службу приложений, с помощью портала Azure хранятся в разделе /var/ssl/certs/. Закрытые сертификаты хранятся в /var/ssl/private/.

Чтобы взаимодействовать или отлаживать средство ключа Java, откройте подключение SSH к службе приложений и выполните команду keytool. Список команд см. в документации по инструменту для работы с ключами. Дополнительные сведения об API KeyStore см. в разделе "Хранилище ключей класса".

Посетите центр Azure для разработчиков на Java, чтобы найти быстрые стартовые руководства Azure, учебные пособия и справочную документацию по Java.