Поделиться через


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

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

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

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

Примечание.

Для приложений Spring рекомендуется использовать Azure Spring Apps. Однако вы по-прежнему можете использовать службу приложение Azure в качестве назначения. Рекомендации по назначению рабочей нагрузки Java см. в руководстве по назначению рабочей нагрузки Java.

Аутентификация пользователей (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/SSL

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

Использование возможностей Key Vault

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

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

Дополнительные сведения о файлах конфигурации 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 может потребоваться дополнительная конфигурация. Дополнительные сведения см. в документации по выбранному драйверу JDBC.

Инициализация хранилища ключей 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.