PostgreSQL için Azure Veritabanı ile parolasız bağlantılar kullanmak üzere bir uygulamayı geçirme

Bu makalede, geleneksel kimlik doğrulama yöntemlerinden PostgreSQL için Azure Veritabanı ile daha güvenli, parolasız bağlantılara nasıl geçirilir açıklanmaktadır.

PostgreSQL için Azure Veritabanı'na yönelik uygulama isteklerinin kimliği doğrulanmalıdır. PostgreSQL için Azure Veritabanı, uygulamaların güvenli bir şekilde bağlanması için birkaç farklı yol sağlar. Yollardan biri parolaları kullanmaktır. Ancak, mümkün olduğunda uygulamalarınızda parolasız bağlantılara öncelik vermelisiniz.

Kimlik doğrulama seçeneklerini karşılaştırma

Uygulama PostgreSQL için Azure Veritabanı ile kimlik doğrulaması yaparken, veritabanını bağlamak için bir kullanıcı adı ve parola çifti sağlar. Kimliklerin depolandığı yere bağlı olarak iki kimlik doğrulaması türü vardır: Microsoft Entra kimlik doğrulaması ve PostgreSQL kimlik doğrulaması.

Microsoft Entra kimlik doğrulama

Microsoft Entra kimlik doğrulaması, Microsoft Entra Kimliği'nde tanımlanan kimlikleri kullanarak PostgreSQL için Azure Veritabanı'na bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması kullanarak, veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir.

Kimlik doğrulaması için Microsoft Entra Id kullanmak aşağıdaki avantajları sağlar:

  • Azure Hizmetleri genelinde kullanıcıların tekdüzen bir şekilde kimlik doğrulaması.
  • Parola ilkelerinin ve parola döndürmenin tek bir yerde yönetimi.
  • Microsoft Entra Id tarafından desteklenen ve parolaları depolama gereksinimini ortadan kaldırabilen birden çok kimlik doğrulaması biçimi.
  • Müşteriler dış (Microsoft Entra ID) grupları kullanarak veritabanı izinlerini yönetebilir.
  • Kimlikleri veritabanı düzeyinde doğrulamak için Microsoft Entra kimlik doğrulamasıyla PostgreSQL veritabanı kullanıcılarını kullanın.
  • PostgreSQL için Azure Veri Tabanı bağlanan uygulamalar için belirteç tabanlı kimlik doğrulamasını destekleyin.

PostgreSQL kimlik doğrulaması

PostgreSQL'de hesap oluşturabilirsiniz. Hesaplar için kimlik bilgileri olarak parolaları kullanmayı seçerseniz, bu kimlik bilgilerini tabloda depolayın user . PostgreSQL bu parolaları depoladığı için, parolaların dönüşünü kendiniz yönetmeniz gerekir.

parolalarla PostgreSQL için Azure Veri Tabanı bağlanabiliyor olsa da, bunları dikkatli kullanın. Parolaları hiçbir zaman güvenli olmayan bir konumda kullanıma sunma. Parolalara erişim kazanan herkes kimlik doğrulaması yapabilir. Örneğin, bir bağlantı dizesini yanlışlıkla kaynak denetimine eklerseniz, güvenli olmayan bir e-posta üzerinden gönderirseniz, yanlış bir sohbete yapıştırırsanız veya yetkisi olmayan biri onu görüntülerse, kötü amaçlı bir kullanıcı uygulamaya erişebilir. Bunun yerine, uygulamanızı parolasız bağlantıları kullanacak şekilde güncelleştirmeyi göz önünde bulundurun.

Parolasız bağlantılara giriş

Parolasız bağlantıyla, uygulama kodunda, yapılandırma dosyalarında veya ortam değişkenlerinde kimlik bilgilerini depolamadan Azure hizmetlerine bağlanabilirsiniz.

Birçok Azure hizmeti, örneğin Azure Yönetilen Kimliği aracılığıyla parolasız bağlantıları destekler. Bu teknikler, Azure Identity istemci kitaplıklarından DefaultAzureCredential kullanarak uygulayabileceğiniz güçlü güvenlik özellikleri sağlar. Bu öğreticide, DefaultAzureCredential kullanarak bağlantı dizeleri gibi alternatifler yerine mevcut bir uygulamayı nasıl güncelleştireceğinizi öğreneceksiniz.

DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve hangilerinin çalışma zamanında kullanılması gerektiğini otomatik olarak belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel geliştirme ve üretim) farklı kimlik doğrulama yöntemleri kullanmasını sağlar.

Kimlik bilgilerini arama sırası ve konumları DefaultAzureCredentialAzure Kimlik kitaplığına genel bakış sayfasında bulabilirsiniz. Örneğin, yerel olarak çalışırken genellikle DefaultAzureCredential geliştiricinin Visual Studio'da oturum açmak için kullandığı hesabı kullanarak kimlik doğrulaması yapar. Uygulama Azure'a dağıtıldığında, DefaultAzureCredentialotomatik olarak yönetilen kimlik kullanmaya geçer. Bu geçiş için kod değişikliği gerekmez.

Bağlantıların parolasız olduğundan emin olmak için hem yerel geliştirmeyi hem de üretim ortamını dikkate almanız gerekir. Her iki yerde de bağlantı dizesi gerekiyorsa uygulama parolasız değildir.

Yerel geliştirme ortamınızda, Visual Studio Code veya IntelliJ için Azure CLI, Azure PowerShell, Visual Studio veya Azure eklentileriyle kimlik doğrulaması yapabilirsiniz. Bu durumda, özellikleri yapılandırmak yerine uygulamanızda bu kimlik bilgilerini kullanabilirsiniz.

Uygulamaları sanal makine gibi bir Azure barındırma ortamına dağıttığınızda, bu ortamda yönetilen kimlik atayabilirsiniz. Ardından, Azure hizmetlerine bağlanmak için kimlik bilgileri sağlamanız gerekmez.

Uyarı

Yönetilen kimlik, bir uygulamayı veya hizmeti temsil eden bir güvenlik kimliği sağlar. Kimlik Azure platformu tarafından yönetilir ve gizli anahtarları tanımlamanızı veya yenilemenizi gerektirmez. Yönetilen kimlikler hakkında daha fazla bilgiyi genel bakış belgelerinde okuyabilirsiniz.

Var olan bir uygulamayı parolasız bağlantıları kullanacak şekilde geçirme

Aşağıdaki adımlarda, mevcut bir uygulamanın parola tabanlı bir çözüm yerine parolasız bağlantıları kullanacak şekilde nasıl geçirilir açıklanmaktadır.

0) Çalışma ortamını hazırlama

İlk olarak, bazı ortam değişkenlerini ayarlamak için aşağıdaki komutu kullanın.

export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)

Yer tutucuları, bu makale boyunca kullanılan aşağıdaki değerlerle değiştirin:

  • <YOUR_RESOURCE_GROUP>: Kaynaklarınız için kaynak grubunun adı.
  • <YOUR_DATABASE_SERVER_NAME>: PostgreSQL sunucunuzun adı. Azure genelinde benzersiz olmalıdır.
  • <YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: Microsoft Entra yönetici olmayan kullanıcınızın görünen adı. Adın Microsoft Entra kiracınızda geçerli bir kullanıcı olarak tanımlı olduğundan emin olun.
  • <YOUR_LOCAL_IP_ADDRESS>: Spring Boot uygulamanızı çalıştırdığınız yerel bilgisayarınızın IP adresi. Bunu bulmanın kullanışlı yollarından biri whatismyip.akamai.com açmaktır.

1) PostgreSQL için Azure Veritabanı'nı yapılandırma

1.1) Microsoft Entra Id tabanlı kimlik doğrulamasını etkinleştirme

PostgreSQL için Azure Veri Tabanı ile Microsoft Entra ID erişimi kullanmak için önce Microsoft Entra yönetici kullanıcısını ayarlayın. Kullanıcıları Microsoft Entra ID tabanlı kimlik doğrulaması için yalnızca Microsoft Entra yönetici kullanıcı oluşturabilir veya etkinleştirebilir.

Sunucuyu oluşturduktan sonra bir Microsoft Entra yöneticisi ayarlamak için PostgreSQL için Azure Veritabanı - Esnek Sunucu'da Microsoft Entra rollerini yönetme makalesindeki adımları izleyin.

Uyarı

PostgreSQL Esnek Sunucusu birden çok Microsoft Entra yöneticisi oluşturabilir.

2) Yerel geliştirme için PostgreSQL için Azure Veritabanı'nı yapılandırma

2.1) Yerel IP için güvenlik duvarı kuralı yapılandırma

PostgreSQL için Azure Veritabanı örnekleri varsayılan olarak güvenlidir. Gelen bağlantıya izin vermeyen bir güvenlik duvarı vardır. Veritabanınızı kullanmak için yerel IP adresinizin veritabanı sunucusuna erişmesine izin veren bir güvenlik duvarı kuralı eklemeniz gerekir.

Bu makalenin başında yerel IP adresinizi yapılandırdığınızdan, aşağıdaki komutu çalıştırarak sunucunun güvenlik duvarını açabilirsiniz:

az postgres flexible-server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_SERVER_NAME \
    --rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS \
    --output tsv

PostgreSQL sunucunuza bir Windows bilgisayarda Linux için Windows Alt Sistemi'nden (WSL) bağlanıyorsanız WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.

WSL'de aşağıdaki komutu çalıştırarak konak makinenizin IP adresini alın:

cat /etc/resolv.conf

teriminden nameserversonra IP adresini kopyalayın ve WSL IP Adresi için bir ortam değişkeni ayarlamak için aşağıdaki komutu kullanın:

export AZ_WSL_IP_ADDRESS=<the-copied-IP-address>

Ardından aşağıdaki komutu kullanarak sunucunun güvenlik duvarını WSL tabanlı uygulamanızda açın:

az postgres flexible-server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_SERVER_NAME \
    --rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
    --start-ip-address $AZ_WSL_IP_ADDRESS \
    --end-ip-address $AZ_WSL_IP_ADDRESS \
    --output tsv

2.2) PostgreSQL yönetici olmayan kullanıcı oluşturma ve izin verme

Ardından yönetici olmayan bir Microsoft Entra kullanıcısı oluşturun ve veritabanındaki $AZ_DATABASE_NAME tüm izinleri ona verin. Veritabanı adını $AZ_DATABASE_NAME gereksinimlerinize uyacak şekilde değiştirebilirsiniz.

Yönetici olmayan kullanıcı oluşturmak için create_ad_user_local.sql adlı bir SQL betiği oluşturun. Aşağıdaki içeriği ekleyin ve yerel olarak kaydedin:

cat << EOF > create_ad_user_local.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF

Ardından sql betiğini çalıştırmak ve yönetici olmayan Microsoft Entra kullanıcı oluşturmak için aşağıdaki komutu kullanın:

psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_local.sql

Şimdi geçici SQL betik dosyasını kaldırmak için aşağıdaki komutu kullanın:

rm create_ad_user_local.sql

Uyarı

PostgreSQL kullanıcıları oluşturma hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veri Tabanı'de kullanıcı oluşturma.

3) Parolasız bağlantıları kullanmak için oturum açın ve uygulama kodunu geçirin

Yerel geliştirme için PostgreSQL'inizde rolü atadığınız Microsoft Entra hesabıyla kimliğinizin doğrulanmış olduğundan emin olun. Azure CLI, Visual Studio, Azure PowerShell veya IntelliJ gibi diğer araçlar aracılığıyla kimlik doğrulaması yapın.

Aşağıdaki komutu kullanarak Azure CLI aracılığıyla Azure'da oturum açın:

az login

Ardından, aşağıdaki adımları kullanarak kodunuzu parolasız bağlantıları kullanacak şekilde güncelleştirin. Kavramsal olarak benzer olsa da, her dil farklı uygulama ayrıntıları kullanır.

  1. Projenizin içine azure-identity-extensions paketine aşağıdaki başvuruyu ekleyin. Bu kitaplık, parolasız bağlantılar uygulamak için gereken tüm varlıkları içerir.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-extensions</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. JDBC URL'sinde Azure PostgreSQL kimlik doğrulama eklentisini etkinleştirin. Kodunuzda postgreSQL için Azure Veritabanı'na bağlanmak için şu anda bir java.sql.Connection oluşturan konumları belirleyin. ve değerlerini application.properties dosyanızda aşağıdaki değerlerle eşleşecek şekilde güncelleyin:

    url=jdbc:postgresql://$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com:5432/$AZ_DATABASE_NAME?sslmode=require&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin
    user=$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME
    
  3. $AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME ve iki $AZ_DATABASE_SERVER_NAME değişkenini bu makalenin başında yapılandırdığınız değerle değiştirin.

Uygulamayı yerel olarak çalıştırma

Bu kod değişikliklerini yaptıktan sonra uygulamanızı yerel olarak çalıştırın. yeni yapılandırma, Azure CLI, Visual Studio veya IntelliJ gibi uyumlu bir IDE veya komut satırı aracında oturum açtıysanız yerel kimlik bilgilerinizi alır. Azure'de yerel geliştirme kullanıcınıza atadığınız roller, uygulamanızın Azure hizmetine yerel olarak bağlanmasına olanak tanır.

4) Azure barındırma ortamını yapılandırma

Uygulamanızı parolasız bağlantılar kullanacak şekilde yapılandırıp yerel olarak çalıştırdıktan sonra, aynı kod uygulamayı Azure’a dağıttıktan sonra da Azure hizmetlerinde kimlik doğrulaması yapabilir. Örneğin, yönetilen kimliği atanmış bir Azure App Service örneğine dağıtılan bir uygulama Azure Depolama'ya bağlanabilir.

Bu bölümde, uygulamanızın Azure barındırma ortamında parolasız bir şekilde çalışmasını sağlamak için iki adım yürüteceksiniz:

  • Azure barındırma ortamınız için yönetilen kimliği atayın.
  • Yönetilen kimliğe roller atayın.

Uyarı

Azure, barındırma hizmetinizi PostgreSQL'e bağlamanıza yardımcı olabilecek Hizmet Bağlayıcısı da sağlar. Barındırma ortamınızı yapılandırmak için Hizmet Bağlayıcısı'nı kullanarak yönetilen kimliğinize rol atama adımını atlayabilirsiniz çünkü Service Connector bunları sizin yerinize atar. Aşağıdaki bölümde Azure barındırma ortamınızı iki şekilde yapılandırma adımları açıklanmaktadır: Biri Service Connector aracılığıyla, diğeri ise her barındırma ortamını doğrudan yapılandırarak.

Önemli

Hizmet Bağlayıcısı komutları için Azure CLI 2.41.0 veya üzeri gerekir.

Azure portalını kullanarak yönetilen kimliği ata

Aşağıdaki adımlarda, çeşitli web barındırma hizmetleri için sistem tarafından atanan yönetilen kimliğin nasıl atandığı gösterilmektedir. Yönetilen kimlik, daha önce ayarladığınız uygulama yapılandırmalarını kullanarak diğer Azure hizmetlerine güvenli bir şekilde bağlanabilir.

  1. Azure App Service örneğinizin ana genel bakış sayfasında gezinti bölmesinden Kimlik'i seçin.

  2. Sistem tarafından atanan sekmesinde Durum alanını açık olarak ayarladığınızdan emin olun. Sistem tarafından atanan kimlik, Azure tarafından şirket içinde yönetilir ve yönetim görevlerini sizin için gerçekleştirir. Kimliğin ayrıntıları ve kimlik tanımlayıcıları kodunuzda asla gösterilmez.

ayrıca Azure CLI kullanarak Azure barındırma ortamına yönetilen kimlik atayabilirsiniz.

Aşağıdaki örnekte gösterildiği gibi az webapp identity assign komutuyla Azure App Service örneğine yönetilen kimlik atayabilirsiniz:

export AZ_MI_OBJECT_ID=$(az webapp identity assign \
    --resource-group $AZ_RESOURCE_GROUP \
    --name <service-instance-name> \
    --query principalId \
    --output tsv)

Yönetilen kimliğe roller atayın

Ardından, PostgreSQL örneğine erişmek için atadığınız yönetilen kimliğe izin verin.

Hizmetlerinizi Service Connector kullanarak bağladıysanız, önceki adımdaki komutlar rolü zaten atadığından bu adımı atlayabilirsiniz.

Uygulamayı test edin

Uygulamayı barındırma ortamına dağıtmadan önce, uygulama yönetilen kimlik için oluşturduğunuz kullanıcıyı kullanarak PostgreSQL'e bağlandığından kodda bir değişiklik daha yapmanız gerekir.

Kodunuzu yönetilen kimlik için oluşturulan kullanıcıyı kullanacak şekilde güncelleştirin:

Uyarı

Service Connector komutunu kullandıysanız bu adımı atlayın.

properties.put("user", "$AZ_POSTGRESQL_AD_MI_USERNAME");

Bu kod değişikliklerini yaptıktan sonra uygulamayı derleyebilir ve yeniden dağıtabilirsiniz. Ardından tarayıcıda barındırılan uygulamanıza göz atın. Uygulamanızın PostgreSQL veritabanına başarıyla bağlanabilmesi gerekir. Rol atamalarının Azure ortamınızda yayılması birkaç dakika sürebilir. Uygulamanız artık geliştiricilerin uygulamadaki gizli dizileri yönetmek zorunda kalmadan hem yerel hem de üretim ortamında çalışacak şekilde yapılandırılmıştır.

Sonraki Adımlar

Bu öğreticide, bir uygulamayı parolasız bağlantılara geçirmeyi öğrendiniz.

Bu makalede ele alınan kavramları daha ayrıntılı bir şekilde incelemek için aşağıdaki kaynaklara bakın: