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 uruchamiane w usłudze App Service mają ten sam zestaw najlepszych rozwiązań w zakresie zabezpieczeń co inne aplikacje.

Usługa Azure App Service uruchamia aplikacje internetowe Java w trzech typach w w pełni zarządzanej usłudze:

  • Java Standard Edition (SE). Środowisko Java SE może uruchamiać aplikację wdrożoną jako pakiet archiwum Java (JAR), który zawiera serwer osadzony, taki jak Spring Boot, Quarkus, Dropwizard lub aplikacja z osadzonym serwerem Tomcat lub Jetty.
  • Tomcat. Wbudowany serwer Tomcat może uruchamiać aplikację wdrożona jako pakiet archiwum aplikacji internetowej (WAR).
  • JBoss Enterprise Application Platform (EAP): wbudowany serwer JBoss EAP może uruchomić aplikację wdrożona jako pakiet WAR lub Enterprise Archive (EAR). Ta opcja jest obsługiwana w przypadku aplikacji systemu Linux w zestawie warstw cenowych obejmujących warstwy Bezpłatna, Premium v3 i Izolowana wersja 2.

Uwaga / Notatka

JBoss EAP na usłudze App Service obsługuje teraz rozliczenia BYOL (Bring Your Own License). Usługa BYOL umożliwia klientom, którzy mają istniejące subskrypcje oprogramowania Red Hat, aby zastosować te licencje bezpośrednio do wdrożeń protokołu EAP JBoss w usłudze Azure App Service. Aby uzyskać więcej informacji, zobacz BYOL Support for JBoss EAP on App Service (Obsługa protokołu JBoss EAP w usłudze App Service).

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 Microsoft Entra ID lub logowania społecznościowego, takiego 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, zobacz Dostosowywanie logów i wylogowywanie.

Deweloperzy platformy Spring Boot mogą używać startera 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 roszczenia na kolekcję roszczeń odpowiadającą temu typowi. W poniższym przykładzie kodowym request jest instancją HttpServletRequest.

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

Teraz możesz sprawdzić obiekt Map pod kątem konkretnego oświadczenia. Na przykład poniższy fragment kodu przechodzi przez wszystkie typy roszczeń i wyświetla 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 Dostosowywanie logowania i wylogowywanie. 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

Aby przekazać istniejący certyfikat TLS i powiązać go z nazwą domeny aplikacji, zobacz Włączanie protokołu HTTPS dla domeny niestandardowej w usłudze Azure App Service. Aplikację można również skonfigurować tak, aby wymuszała protokół TLS.

Użyj odwołań Azure Key Vault

Usługa Azure Key Vault zapewnia scentralizowane zarządzanie tajnymi informacjami z zasadami dostępu i rejestrem audytów. Sekrety, takie jak hasła lub ciągi połączeń, można przechowywać w magazynie kluczy. Do tych sekretów w aplikacji można uzyskać dostęp za pomocą zmiennych środowiskowych.

Najpierw przyznaj aplikacji dostęp do magazynu kluczy i utwórz odwołanie usługi Key Vault 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, zobacz Konfiguracja zewnętrzna.

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

Aby wstrzyknąć te sekrety 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 po uruchomieniu kontenera. Po przesłaniu certyfikatu należy ponownie uruchomić usługę App Service, aby załadować certyfikat do Java Key Store. Certyfikaty publiczne są ładowane do magazynu kluczy pod adresem $JRE_HOME/lib/security/cacerts. 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:

Inicjowanie magazynu kluczy Java w systemie Linux

Aby zainicjować obiekt, załaduj plik magazynu kluczy import java.security.KeyStore 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. Aby wyłączyć usługę App Service z automatycznego ładowania certyfikatów do magazynu kluczy, utwórz ustawienie aplikacji , SKIP_JAVA_KEYSTORE_LOADz wartością 1. Wszystkie certyfikaty publiczne przekazane do usługi App Service przy użyciu witryny Azure Portal są przechowywane w obszarze /var/ssl/certs/. Certyfikaty prywatne są przechowywane w obszarze /var/ssl/private/.

Aby wchodzić w interakcję z narzędziem Java Key Tool lub debugować go, otwórz połączenie SSH z usługą App Service i uruchom 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 Magazyn kluczy klas.

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