Udostępnij za pośrednictwem


Konfigurowanie zabezpieczeń aplikacji Tomcat, JBoss lub Java SE w usłudze aplikacja systemu Azure

W tym artykule przedstawiono sposób konfigurowania ustawień zabezpieczeń specyficznych dla języka Java w usłudze App Service. Aplikacje Java działające w usłudze App Service mają ten sam zestaw najlepszych rozwiązań w zakresie zabezpieczeń co inne aplikacje.

usługa aplikacja systemu Azure uruchamia aplikacje internetowe Java w w pełni zarządzanej usłudze w trzech wariantach:

  • Java SE — może uruchomić aplikację wdrożoną jako pakiet JAR zawierający serwer osadzony (taki jak Spring Boot, Dropwizard, Quarkus lub jeden z osadzonym serwerem Tomcat lub Jetty).
  • Tomcat — wbudowany serwer Tomcat może uruchamiać aplikację wdrożona jako pakiet WAR.
  • JBoss EAP — obsługiwane tylko w przypadku aplikacji systemu Linux w warstwach cenowych Premium v3 i Izolowanych w wersji 2. Wbudowany serwer JBoss EAP może uruchamiać aplikację wdrożona jako pakiet WAR lub EAR.

Uwaga

W przypadku aplikacji Spring zalecamy używanie usługi Azure Spring Apps. Można jednak nadal używać usługi aplikacja systemu Azure jako miejsca docelowego. Aby uzyskać porady, zobacz Wskazówki dotyczące miejsca docelowego obciążenia w języku Java.

Uwierzytelnianie użytkowników (Easy Auth)

Skonfiguruj uwierzytelnianie aplikacji w witrynie Azure Portal przy użyciu opcji Uwierzytelnianie i autoryzacja . W tym miejscu możesz włączyć uwierzytelnianie przy użyciu identyfikatora Entra firmy Microsoft lub logów społecznościowych, takich jak Facebook, Google lub GitHub. Konfiguracja witryny Azure Portal działa tylko podczas konfigurowania pojedynczego dostawcy uwierzytelniania. Aby uzyskać więcej informacji, zobacz Configure your App Service app to use Microsoft Entra sign-in and the related articles for other identity providers (Konfigurowanie aplikacji usługi App Service pod kątem korzystania z logowania microsoft Entra) i powiązanych artykułów dla innych dostawców tożsamości. Jeśli musisz włączyć wielu dostawców logowania, postępuj zgodnie z instrukcjami w temacie Dostosowywanie logów i wylogowywanie.

Deweloperzy platformy Spring Boot mogą używać szablonu startowego Microsoft Entra Spring Boot do zabezpieczania aplikacji przy użyciu znanych adnotacji i interfejsów API rozwiązania Spring Security. Pamiętaj, aby zwiększyć maksymalny rozmiar nagłówka w pliku application.properties . Sugerujemy wartość 16384.

Aplikacja Tomcat może uzyskiwać dostęp do oświadczeń użytkownika bezpośrednio z serwletu przez rzutowanie obiektu Principal do obiektu Map. Obiekt Map mapuje każdy typ oświadczenia na kolekcję oświadczeń dla tego typu. W poniższym przykładzie request kodu jest wystąpieniem HttpServletRequestklasy .

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

Teraz możesz sprawdzić obiekt pod kątem Map dowolnego konkretnego oświadczenia. Na przykład poniższy fragment kodu iteruje wszystkie typy oświadczeń i drukuje zawartość każdej kolekcji.

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);
            }
        }
    }

Aby wylogować użytkowników, użyj ścieżki /.auth/ext/logout . Aby wykonać inne akcje, zobacz dokumentację dotyczącą dostosowywania logów i wylogowyń. Istnieje również oficjalna dokumentacja interfejsu Tomcat HttpServletRequest i jego metod. Następujące metody serwletu są również nawodnione na podstawie konfiguracji usługi App Service:

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

Aby wyłączyć tę funkcję, utwórz ustawienie aplikacji o nazwie WEBSITE_AUTH_SKIP_PRINCIPAL z wartością 1. Aby wyłączyć wszystkie filtry serwletów dodane przez usługę App Service, utwórz ustawienie o nazwie WEBSITE_SKIP_FILTERS z wartością 1.

W przypadku aplikacji JBoss EAP zobacz kartę Tomcat.

Konfigurowanie protokołu TLS/SSL

Aby przekazać istniejący certyfikat TLS/SSL i powiązać go z nazwą domeny aplikacji, postępuj zgodnie z instrukcjami w temacie Zabezpieczanie niestandardowej nazwy DNS z powiązaniem TLS/SSL w usłudze aplikacja systemu Azure Service. Aplikację można również skonfigurować tak, aby wymuszała protokół TLS/SSL.

Używanie odwołań do usługi KeyVault

Usługa Azure KeyVault zapewnia scentralizowane zarządzanie wpisami tajnymi za pomocą zasad dostępu i historii inspekcji. Wpisy tajne (takie jak hasła lub parametry połączenia) można przechowywać w usłudze KeyVault i uzyskiwać dostęp do tych wpisów tajnych w aplikacji za pomocą zmiennych środowiskowych.

Najpierw postępuj zgodnie z instrukcjami dotyczącymi udzielania aplikacji dostępu do magazynu kluczy i tworzenia odwołania do magazynu kluczy do wpisu tajnego w ustawieniu aplikacji. Możesz sprawdzić, czy odwołanie jest rozpoznawane jako wpis tajny, wyświetlając zmienną środowiskową podczas zdalnego uzyskiwania dostępu do terminalu usługi App Service.

Aby uzyskać informacje o plikach konfiguracji platformy Spring, zapoznaj się z tą dokumentacją dotyczącą konfiguracji zewnętrznych.

Aby wstrzyknąć te wpisy tajne w pliku konfiguracji platformy Spring, użyj składni iniekcji zmiennej środowiskowej (${MY_ENV_VAR}).

Aby wstrzyknąć te wpisy tajne w pliku konfiguracji serwera Tomcat, użyj składni iniekcji zmiennej środowiskowej (${MY_ENV_VAR}).

Korzystanie z magazynu kluczy Java w systemie Linux

Domyślnie wszystkie certyfikaty publiczne lub prywatne przekazane do usługi App Service Dla systemu Linux są ładowane do odpowiednich magazynów kluczy Java podczas uruchamiania kontenera. Po przekazaniu certyfikatu należy ponownie uruchomić usługę App Service, aby była ładowana do magazynu kluczy Java. Certyfikaty publiczne są ładowane do magazynu kluczy w $JRE_HOME/lib/security/cacertslokalizacji , a certyfikaty prywatne są przechowywane w programie $JRE_HOME/lib/security/client.jks.

Do szyfrowania połączenia JDBC z certyfikatami w magazynie kluczy Java może być konieczna większa konfiguracja. Zapoznaj się z dokumentacją wybranego sterownika JDBC.

Inicjowanie magazynu kluczy Java w systemie Linux

Aby zainicjować obiekt, załaduj import java.security.KeyStore plik magazynu kluczy przy użyciu hasła. Domyślne hasło dla obu magazynów kluczy to 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());

Ręczne ładowanie magazynu kluczy w systemie Linux

Certyfikaty można załadować ręcznie do magazynu kluczy. Utwórz ustawienie aplikacji z SKIP_JAVA_KEYSTORE_LOADwartością 1 , aby wyłączyć usługę App Service z automatycznego ładowania certyfikatów do magazynu kluczy. Wszystkie certyfikaty publiczne przekazane do usługi App Service za pośrednictwem witryny Azure Portal są przechowywane w obszarze /var/ssl/certs/. Certyfikaty prywatne są przechowywane w obszarze /var/ssl/private/.

Możesz wchodzić w interakcję z narzędziem Java Key Tool lub debugować go, otwierając połączenie SSH z usługą App Service i uruchamiając polecenie keytool. Zapoznaj się z dokumentacją narzędzia key, aby uzyskać listę poleceń. Aby uzyskać więcej informacji na temat interfejsu API magazynu kluczy, zobacz oficjalną dokumentację.

Następne kroki

Odwiedź centrum Azure for Java Developers, aby znaleźć przewodniki Szybki start platformy Azure, samouczki i dokumentację referencyjną języka Java.