Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğretici, hassas yapılandırma verilerinin güvenliğini sağlamak ve Key Vault yapılandırma özelliklerini almak için Spring Boot uygulamalarında Key Vault nasıl kullanacağınızı gösterir. Key Vault parolalar ve veritabanı bağlantı dizeleri gibi genel gizli dizilerin güvenli bir şekilde depolanmasını sağlar.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik .
- Java Geliştirme Seti (JDK) sürüm 8 veya üzeri.
- Apache Maven
- Azure CLI
- Key Vault örneği. Eğer yoksa bkz. Quickstart: Azure portalını kullanarak anahtar kasası oluşturma. Ayrıca, bu öğretici için test uygulamasına ihtiyacınız olduğu için Key Vault örneğinin URI'sini not edin.
- Spring Boot uygulaması. Eğer bir tane yoksa, Spring Initializr ile bir Maven projesi oluşturun. Maven Project ve Dependencies altında Spring Web, Spring Data JPA ve H2 Veritabanı bağımlılıklarını ekleyin ve ardından Java sürüm 8 veya üzerini seçin.
Önemli
Bu makaledeki adımları tamamlamak için Spring Boot sürüm 2.5 veya üzeri gereklidir.
Azure Key Vault'a sır ekleme
Bu öğreticide, Spring Boot uygulamasındaki Key Vault veritabanı kimlik bilgilerinin nasıl okunduğu açıklanır. Key Vault kimlik bilgilerini okumak için önce veritabanı kimlik bilgilerini Key Vault'de depolamanız gerekir.
H2 veritabanının URL'sini Key Vault'da yeni bir gizli dizi olarak depolamak için bkz. Hızlı Başlangıç: Azure portalını kullanarak Azure Key Vault'ta gizli bir anahtar ayarlayıp alma. Bu öğreticide, adı h2url ve değeri jdbc:h2:~/testdb;user=sa;password=password olacak olan bir gizli bilgi ayarlayacaksınız.
Not
Gizliyi ayarladıktan sonra, Key Vault erişim ilkesi atama rehberindeki yönergeleri izleyerek uygulamanıza Key Vault erişimi verin.
Azure Key Vault'tan bir sır oku
Artık veritabanı kimlik bilgileri Key Vault depolandığına göre Spring Cloud Azure ile bunları alabilirsiniz.
Spring Cloud Azure Key Vault Starter modülünü yüklemek için pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
Spring Cloud Azure Ürün Reçetesi( BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Not
Spring Boot 4.0.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü7.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü6.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.1.x-3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü5.25.0olarak ayarladığınızdan emin olun.Eğer Spring Boot 2.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü4.20.0olarak ayarladığınızdan emin olun.Bu Parça Listesi (BOM),
<dependencyManagement>bölümünde pom.xml dosyanızda yapılandırılmalıdır. Bu, tüm Spring Cloud Azure bağımlılıklarının aynı sürümü kullanmasını sağlar.Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.
Spring Cloud Azure Key Vault Starter artefaktı:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
Spring Cloud Azure, Key Vault gizli dizileri okumak için çeşitli yöntemlere sahiptir. Aşağıdaki yöntemleri bağımsız olarak kullanabilir veya farklı kullanım örnekleri için birleştirebilirsiniz:
- Key Vault için Azure SDK kullanın.
- Spring KeyVault
PropertySourcekullanın.
Key Vault için Azure SDK kullanma
Key Vault için Azure SDK, Key Vault sırları yönetmek için SecretClient sağlar.
Aşağıdaki kod örneği, Azure Key Vault H2 veritabanı kimlik bilgilerini almak için SecretClient nasıl kullanacağınızı gösterir.
Azure SDK kullanarak Key Vault'tan bir gizli anahtarı okumak için, aşağıdaki adımları takip ederek uygulamayı yapılandırınız:
application.properties yapılandırma dosyasında bir Key Vault uç noktası yapılandırın.
spring.cloud.azure.keyvault.secret.endpoint=https://<your-keyvault-name>.vault.azure.net/Spring uygulamanızda
SecretClientnesnesini ekleyin ve bir gizliyi almak içingetSecretyöntemini, aşağıdaki örneklerde gösterildiği gibi, kullanın.import com.azure.security.keyvault.secrets.SecretClient; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SecretClientApplication implements CommandLineRunner { // Spring Cloud Azure will automatically inject SecretClient in your ApplicationContext. private final SecretClient secretClient; public SecretClientApplication(SecretClient secretClient) { this.secretClient = secretClient; } public static void main(String[] args) { SpringApplication.run(SecretClientApplication.class, args); } @Override public void run(String... args) { System.out.println("h2url: " + secretClient.getSecret("h2url").getValue()); } }İpucu
Bu öğreticide yapılandırmalarda veya kodda kimlik doğrulama işlemi yoktur. Ancak, Azure hizmetlerine bağlanmak için kimlik doğrulaması gerekir. Kimlik doğrulamasını tamamlamak için Azure Identity kullanmanız gerekir. Spring Cloud Azure, Azure Kimlik kitaplığının herhangi bir kod değişikliği yapmadan kimlik bilgilerini almanıza yardımcı olmak için sağladığı
DefaultAzureCredentialkullanır.DefaultAzureCredentialbirden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim ortamları gibi) farklı kimlik doğrulama yöntemleri kullanmasını sağlar. Daha fazla bilgi için bkz. DefaultAzureCredential.Yerel geliştirme ortamlarında kimlik doğrulamasını tamamlamak için Azure CLI, Visual Studio Code, PowerShell veya diğer yöntemleri kullanabilirsiniz. Daha fazla bilgi için bkz. Java geliştirme ortamlarında Azure kimlik doğrulaması. Azure barındırma ortamlarında kimlik doğrulamasını tamamlamak için kullanıcı tarafından atanan yönetilen kimliği kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?
Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler görürsünüz:
h2url: jdbc:h2:~/testdb;user=sa;password=password
Çekirdeği kendiniz oluşturabilirsiniz SecretClient , ancak işlem karmaşıktır. Spring Boot uygulamalarında özellikleri yönetmeniz, oluşturucu desenini öğrenmeniz ve istemciyi Spring uygulama bağlamınıza kaydetmeniz gerekir. Aşağıdaki kod örneği, bir SecretClient fasulyeyi nasıl oluşturabileceğinizi gösterir:
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SecretClientConfiguration {
@Bean
public SecretClient createSecretClient() {
return new SecretClientBuilder()
.vaultUrl("https://<your-key-vault-url>.vault.azure.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
}
}
Aşağıdaki listede, bu kodun esnek veya düzgün olmamasının nedenlerinden bazıları gösterilmektedir.
- Key Vault uç noktası sabit kodlanmış.
- Spring ortamından yapılandırmaları almak için kullanıyorsanız
@Value, application.properties dosyanızda IDE ipuçlarına sahip olamazsınız. - Mikro hizmet senaryonuz varsa, kodun her projede çoğaltılması gerekir ve hata yapmak kolaydır ve tutarlı olması zordur.
Neyse ki Spring Cloud Azure ile SecretClient çekirdeğini kendiniz oluşturmak gerekli değildir. Bunun yerine doğrudan SecretClient ekleyebilir ve Key Vault yapılandırmak için zaten bildiğiniz yapılandırma özelliklerini kullanabilirsiniz. Daha fazla bilgi için bkz . Yapılandırma örnekleri.
Spring Cloud Azure, farklı senaryolar için aşağıdaki genel yapılandırmaları da sağlar. Daha fazla bilgi için Spring Cloud Azure geliştirici kılavuzu Azure Hizmet SDK'ları için Global yapılandırması bölümüne bakın.
- Vekil sunucu seçenekleri.
- Yeniden deneme seçenekleri.
- HTTP aktarım istemcisi seçenekleri.
Ayrıca farklı Azure bulutlara da bağlanabilirsiniz. Daha fazla bilgi için bkz. Farklı Azure bulutlarına bağlanma.
Spring Key Vault PropertySource kullanma
Önceki bölümlerde, uygulama başlatıldıktan sonra sırları okumak için SecretClient’yi CommandLineRunner içinde nasıl kullanacağınız gösterildi. Ancak Spring Boot uygulamalarında, uygulama başlamadan önce gizli bilgileri okumak gerekir. Örneğin, uygulama başlamadan önce veri kaynağı parola özelliği gereklidir. Veri kaynağı parolasını Key Vault depolamak ve yine de spring otomatik yapılandırmasını kullanarak veri kaynağı almak istiyorsanız önceki senaryo çalışmaz.
Bu durumda, Spring Cloud Azure, uygulama bağlamını oluşturmadan önce Key Vault'tan gizli anahtarları yüklemek için Spring ortamı ile entegrasyon sağlar. Spring uygulama bağlamı başlatılırken bean'i oluşturmak ve yapılandırmak için gizli anahtarı kullanabilirsiniz. Bu yaklaşım, Key Vault gizli dizilere erişmeniz için saydam bir yoldur ve kod değişikliği gerekmez.
Aşağıdaki kod örneği, Azure Key Vault veri kaynağını oluşturmak üzere H2 veritabanı kimlik bilgilerini almak için PropertySource nasıl kullanacağınızı gösterir.
Key Vault bir H2 veritabanının URL'sini almak ve Spring Data JPA kullanarak H2 veritabanından veri depolamak için aşağıdaki adımları izleyerek uygulamayı yapılandırın:
aşağıdaki Key Vault uç noktasını ve veri kaynağı özelliklerini application.properties yapılandırma dosyasına ekleyin.
logging.level.org.hibernate.SQL=DEBUG spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=https://<your-keyvault-name>.vault.azure.net/ spring.datasource.url=${h2url} spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.database-platform=org.hibernate.dialect.H2Dialectİpucu
Spring Cloud Azure özellik yapılandırması örnekleri için Spring Cloud Azure geliştirici kılavuzunun Configuration örnekleri bölümüne bakın.
Bu örnek, H2 veritabanı kullanan basit bir veritabanı senaryosudur. Üretim ortamında MySQL için Azure Veritabanı veya PostgreSQL için Azure Veri Tabanı kullanmanızı ve veritabanı URL'sini, kullanıcı adını ve parolayı Azure Key Vault depolamanızı öneririz. Paroladan kaçınmak istiyorsanız parolasız bağlantılar iyi bir seçimdir. Daha fazla bilgi için bkz. Azure hizmetleri için Parolasız bağlantılar.
Yeni bir
TodoJava sınıfı oluşturun. Bu sınıf, JPA tarafından otomatik olarak oluşturulacak tabloyatodoeşlenen bir etki alanı modelidir. Aşağıdaki kod,gettersvesettersyöntemlerini yoksayar.import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @Entity public class Todo { public Todo() { } public Todo(String description, String details, boolean done) { this.description = description; this.details = details; this.done = done; } @Id @GeneratedValue private Long id; private String description; private String details; private boolean done; }Aşağıdaki içeriği göstermek için başlangıç sınıfı dosyasını düzenleyin.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.JpaRepository; import java.util.stream.Stream; @SpringBootApplication public class KeyvaultApplication { public static void main(String[] args) { SpringApplication.run(KeyvaultApplication.class, args); } @Bean ApplicationListener<ApplicationReadyEvent> basicsApplicationListener(TodoRepository repository) { return event->repository .saveAll(Stream.of("A", "B", "C").map(name->new Todo("configuration", "congratulations, you have set up " + "correctly!", true)).toList()) .forEach(System.out::println); } } interface TodoRepository extends JpaRepository<Todo, Long> { }Uygulamayı başlatın. Uygulama, H2 veritabanının URL'sini Key Vault alır, ardından H2 veritabanına bağlanır ve verileri veritabanına depolar. Aşağıdaki örneğe benzer günlükler görürsünüz:
2023-01-13 15:51:35.498 DEBUG 5616 --- [main] org.hibernate.SQL: insert into todo (description, details, done, id) values (?, ?, ?, ?) com.contoso.keyvault.Todo@1f
Azure Spring Apps'e dağıtım yapma
Spring Boot uygulamasını yerel olarak çalıştırdığınıza göre artık uygulamayı üretim ortamına taşımanın zamanı geldi. Azure Spring Apps Spring Boot uygulamalarını kod değişikliği olmadan Azure dağıtmayı kolaylaştırır. Hizmet, geliştiricilerin kodlarına odaklanabilmesi için Spring uygulamalarının altyapısını yönetir. Azure Spring Apps kapsamlı izleme ve tanılama, yapılandırma yönetimi, hizmet bulma, CI/CD tümleştirmesi, mavi-yeşil dağıtımlar ve daha fazlasını kullanarak yaşam döngüsü yönetimi sağlar. Uygulamanızı Azure Spring Apps dağıtmak için bkz. İlk uygulamanızı Azure Spring Apps'a dağıtma.
Sonraki adımlar
Spring geliştiricileri için AzureSpring Cloud Azure KeyVault Samples