Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan Java Tomcat App Service'ten Postgre SQL Veritabanı'ye bağlanma
Azure Uygulaması Hizmeti, Azure'da yüksek oranda ölçeklenebilir, kendi kendine düzeltme eki uygulamalı bir web barındırma hizmeti sağlar. Ayrıca uygulamanız için yönetilen bir kimlik sağlar ve bu, PostgreSQL için Azure Veritabanı ve diğer Azure hizmetlerine erişimin güvenliğini sağlamaya yönelik anahtar teslimi bir çözümdür. App Service'teki yönetilen kimlikler, uygulamanızdaki ortam değişkenlerindeki kimlik bilgileri gibi gizli dizileri ortadan kaldırarak uygulamanızı daha güvenli hale getirir. Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- PostgreSQL veritabanı oluşturun.
- WAR paketlemesini kullanarak örnek uygulamayı Tomcat'te Azure Uygulaması Hizmeti'ne dağıtın.
- Postgre SQL Veritabanı ile Microsoft Entra kimlik doğrulamasını kullanmak için bir Tomcat web uygulaması yapılandırın.
- Hizmet Bağlayıcısı'nı kullanarak Yönetilen Kimlik ile Postgre SQL Veritabanı'ye bağlanın.
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Önkoşullar
Örnek uygulamayı kopyalama ve depoyu hazırlama
Örnek depoyu kopyalamak ve örnek uygulama ortamını ayarlamak için terminalinizde aşağıdaki komutları çalıştırın.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/Tomcat/
PostgreSQL için Azure Veritabanı oluşturma
Aboneliğinizde Postgres için Azure Veritabanı oluşturmak için bu adımları izleyin. Tomcat uygulaması bu veritabanına bağlanır ve çalıştırırken verilerini depolar ve uygulamayı nerede çalıştırdığınızdan bağımsız olarak uygulama durumunu kalıcı hale getirmektedir.
Azure CLI'da oturum açın ve oturum açma kimlik bilgilerinize bağlı birden fazla aboneliğiniz varsa aboneliğinizi isteğe bağlı olarak ayarlayın.
az login az account set --subscription <subscription-ID>
Kaynak grubu adını not ederek bir Azure Kaynak Grubu oluşturun.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
PostgreSQL için Azure Veritabanı sunucusu oluşturma. Sunucu bir yönetici hesabıyla oluşturulur, ancak yönetim görevlerini gerçekleştirmek için Microsoft Entra yönetici hesabını kullanacağımız için kullanılmaz.
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
Uygulama için bir veritabanı oluşturun.
export DATABASE_NAME=checklist az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $POSTGRESQL_HOST \ --database-name $DATABASE_NAME
Uygulamayı App Service'e dağıtma
War dosyası oluşturmak ve WAR paketi kullanarak Tomcat'te Azure Uygulaması Hizmetine dağıtmak için bu adımları izleyin.
Örnek uygulama WAR dosyasını oluşturabilen bir pom.xml dosyası içerir. Uygulamayı derlemek için aşağıdaki komutu çalıştırın.
mvn clean package -f pom.xml
Tomcat 9.0 kullanarak Linux üzerinde bir Azure Uygulaması Hizmeti kaynağı oluşturun.
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"
WAR paketini App Service'e dağıtın.
az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path target/app.war \ --type war
Postgres veritabanını kimlik bağlantısıyla bağlama
Ardından, Service Connector'ı kullanarak veritabanını bağlayın.
Azure CLI için Hizmet Bağlayıcısı parolasız uzantısını yükleyin:
az extension add --name serviceconnector-passwordless --upgrade
Ardından, Service Connector'ı kullanarak uygulamanızı sistem tarafından atanan yönetilen kimlikle postgres veritabanına bağlayın.
Bu bağlantıyı kurmak için az webapp connection create komutunu çalıştırın.
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
Bu komut, web uygulamanızla PostgreSQL sunucunuz arasında bir bağlantı oluşturur ve sistem tarafından atanan yönetilen kimlik aracılığıyla kimlik doğrulamasını yönetir.
Ardından Uygulama Ayarlarını güncelleştirin ve bağlantı dizesi eklenti ekleyin
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"'
Örnek web uygulamasını test etme
Uygulamayı test etmek için aşağıdaki komutu çalıştırın.
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
Kaynakları temizleme
Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:
az group delete --name myResourceGroup
Bu komutun çalıştırılması bir dakika sürebilir.
Sonraki adımlar
Geliştirici kılavuzunda java uygulamalarını Linux üzerinde App Service çalıştırma hakkında daha fazla bilgi edinin.
Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenin.