Udostępnij za pośrednictwem


Poradnik: Nawiązywanie połączenia z bazą danych PostgreSQL z poziomu usługi Tomcat w języku Java bez użycia hasła, przy użyciu tożsamości zarządzanej

Azure App Service oferuje wysoce skalowalną, samopoprawczą usługę hostingu internetowego na platformie Azure. Zapewnia również tożsamość zarządzaną dla aplikacji, która jest rozwiązaniem kluczowym do zabezpieczania dostępu do usługi Azure Database for PostgreSQL i innych usług platformy Azure. Tożsamości zarządzane w usłudze App Service sprawiają, że aplikacja jest bezpieczniejsza, eliminując tajne wartości z aplikacji, takie jak dane uwierzytelniające w zmiennych środowiskowych. Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Utwórz bazę danych PostgreSQL.
  • Wdroż przykładową aplikację w usłudze Azure App Service na Tomcat przy użyciu pakietu WAR.
  • Skonfiguruj aplikację internetową Tomcat do korzystania z uwierzytelniania Microsoft Entra w bazie danych PostgreSQL.
  • Nawiązywanie połączenia z bazą danych PostgreSQL przy użyciu tożsamości zarządzanej przy użyciu łącznika usługi.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

Sklonuj przykładową aplikację i przygotuj repozytorium

Uruchom następujące polecenia w terminalu, aby sklonować przykładowe repozytorium i skonfigurować przykładowe środowisko aplikacji.

git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/Tomcat/

Tworzenie serwera usługi Azure Database for PostgreSQL

Wykonaj następujące kroki, aby utworzyć usługę Azure Database for Postgres w ramach subskrypcji. Aplikacja Tomcat łączy się z tą bazą danych i przechowuje swoje dane podczas działania, utrwalając stan aplikacji bez względu na to, gdzie jest uruchamiana aplikacja.

  1. Zaloguj się do Azure CLI i opcjonalnie ustaw subskrypcję, jeśli do Twoich danych logowania jest przypisanych więcej niż jedna.

    az login
    az account set --subscription <subscription-ID>
    
  2. Utwórz grupę zasobów platformy Azure i zanotuj jej nazwę.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Tworzenie serwera usługi Azure Database for PostgreSQL. Serwer jest tworzony przy użyciu konta administratora, ale nie jest używany, ponieważ będziemy używać konta administratora Microsoft Entra do wykonywania zadań administracyjnych.

    export POSTGRESQL_ADMIN_USER=azureuser
    # PostgreSQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database.
    export POSTGRESQL_ADMIN_PASSWORD=<admin-password>
    export POSTGRESQL_HOST=<postgresql-host-name>
    
    # Create a PostgreSQL server.
    az postgres flexible-server create \
        --resource-group $RESOURCE_GROUP \
        --name $POSTGRESQL_HOST \
        --location $LOCATION \
        --admin-user $POSTGRESQL_ADMIN_USER \
        --admin-password $POSTGRESQL_ADMIN_PASSWORD \
        --public-access 0.0.0.0 \
        --sku-name Standard_D2s_v3
    
  4. Utwórz bazę danych dla aplikacji.

    export DATABASE_NAME=checklist
    
    az postgres flexible-server db create \
        --resource-group $RESOURCE_GROUP \
        --server-name $POSTGRESQL_HOST \
        --database-name $DATABASE_NAME
    

Wdrażanie aplikacji w usłudze App Service

Wykonaj następujące kroki, aby utworzyć plik WAR i wdrożyć go w usłudze Azure App Service na serwerze Tomcat z opakowaniem WAR.

  1. Przykładowa aplikacja zawiera plik pom.xml , który może wygenerować plik WAR. Uruchom następujące polecenie, aby skompilować aplikację.

    mvn clean package -f pom.xml
    
  2. Utwórz zasób usługi Azure App Service w systemie Linux przy użyciu Tomcat 9.0.

    export APPSERVICE_PLAN=<app-service-plan>
    export APPSERVICE_NAME=<app-service-name>
    # Create an App Service plan
    az appservice plan create \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_PLAN \
        --location $LOCATION \
        --sku B1 \
        --is-linux
    
    # Create an App Service resource.
    az webapp create \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --plan $APPSERVICE_PLAN \
        --runtime "TOMCAT:10.0-java11"
    
  3. Wdróż pakiet WAR w usłudze App Service.

    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --src-path target/app.war \
        --type war
    

Łączenie bazy danych Postgres z łącznością tożsamości

Następnie połącz bazę danych przy użyciu łącznika usługi.

Zainstaluj rozszerzenie konnektora usługi bez użycia hasła dla Azure CLI.

az extension add --name serviceconnector-passwordless --upgrade

Następnie połącz swoją aplikację z bazą danych Postgres za pomocą przypisanej przez system zarządzanej tożsamości, korzystając z Service Connector.

Aby nawiązać to połączenie, wykonaj polecenie az webapp connection create.

az webapp connection create postgres-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $POSTGRESQL_HOST \
    --database $DATABASE_NAME \
    --system-identity \
    --client-type java

To polecenie tworzy połączenie między aplikacją internetową a serwerem PostgreSQL i zarządza uwierzytelnianiem za pomocą tożsamości zarządzanej przypisanej przez system.

Następnie zaktualizuj ustawienia aplikacji i dodaj wtyczkę w parametry połączenia

export AZURE_POSTGRESQL_CONNECTIONSTRING=$(\
    az webapp config appsettings list \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
    | jq -c -r '.[] \
    | select ( .name == "AZURE_POSTGRESQL_CONNECTIONSTRING" ) \
    | .value')

az webapp config appsettings set \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --settings 'CATALINA_OPTS=-DdbUrl="'"${AZURE_POSTGRESQL_CONNECTIONSTRING}"'&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"'

Testowanie przykładowej aplikacji internetowej

Uruchom następujące polecenie, aby przetestować aplikację.

export WEBAPP_URL=$(az webapp show \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --query defaultHostName \
    --output tsv)

# Create a list
curl -X POST -H "Content-Type: application/json" -d '{"name": "list1","date": "2022-03-21T00:00:00","description": "Sample checklist"}' https://${WEBAPP_URL}/checklist

# Create few items on the list 1
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/checklist/1/item

# Get all lists
curl https://${WEBAPP_URL}/checklist

# Get list 1
curl https://${WEBAPP_URL}/checklist/1

Czyszczenie zasobów

W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie będą raczej potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w usłudze Cloud Shell:

az group delete --name myResourceGroup

Wykonanie tego polecenia może potrwać około minutę.

Następne kroki

Dowiedz się więcej na temat uruchamiania aplikacji w języku Java w usłudze App Service dla systemu Linux w przewodniku dla deweloperów.

Java in App Service Linux dev guide (Przewodnik dla deweloperów dotyczący języka Java w usłudze App Service dla systemu Linux)

Dowiedz się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.