Настройка безопасности для приложения 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.