Samouczek: Połączenie do bazy danych PostgreSQL z usługi Java Tomcat App Service bez wpisów tajnych przy użyciu tożsamości zarządzanej

usługa aplikacja systemu Azure Service oferuje wysoce skalowalną, samonastosową 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 wpisy tajne z aplikacji, takie jak poświadczenia w zmiennych środowiskowych. Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Utwórz bazę danych PostgreSQL.
  • Wdróż przykładową aplikację w usłudze aplikacja systemu Azure w usłudze Tomcat przy użyciu pakietu WAR.
  • Skonfiguruj aplikację internetową Tomcat do korzystania z uwierzytelniania Firmy Microsoft Entra z bazą danych PostgreSQL.
  • Połączenie do bazy danych PostgreSQL z tożsamością zarządzaną przy użyciu Połączenie or 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 interfejsu wiersza polecenia platformy Azure i opcjonalnie ustaw subskrypcję, jeśli masz więcej niż jedno połączenie z poświadczeniami logowania.

    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 aplikacja systemu Azure Na serwerze Tomcat przy użyciu pakietu 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 aplikacja systemu Azure w systemie Linux przy użyciu serwera 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
    

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

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

Zainstaluj rozszerzenie service Połączenie or passwordless dla interfejsu wiersza polecenia platformy Azure:

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

Następnie połącz aplikację z bazą danych Postgres przy użyciu przypisanej przez system tożsamości zarządzanej przy użyciu Połączenie or usługi.

Aby nawiązać to połączenie, uruchom 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.