Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az oktatóanyag megmutatja, hogyan használhatja a Key Vaultot a Spring Boot alkalmazásokban a bizalmas konfigurációs adatok védelmére, és hogyan kérhet le konfigurációs tulajdonságokat a Key Vaultból. Key Vault általános titkos kódok, például jelszavak és adatbázis-kapcsolati sztringek biztonságos tárolását biztosítja.
Előfeltételek
- Egy Azure előfizetés – ingyenes előfizetés.
- Java Fejlesztői készlet (JDK) 8-os vagy újabb verzió.
- Apache Maven
- Azure CLI
- Egy Key Vault példány. Ha nincs ilyenje, nézze meg a Gyorsútmutató: Kulcstároló létrehozása az Azure portál használatával. Jegyezze fel az Key Vault-példány URI-ját is, mivel szüksége van rá az oktatóanyaghoz tartozó tesztalkalmazáshoz.
- Egy Spring Boot-alkalmazás. Ha még nem rendelkezik ilyennel, hozzon létre egy Maven-projektet a Spring Initializrsegítségével. Mindenképpen válassza ki a Maven Project lehetőséget, majd a Dependencies területen adja hozzá a Spring Web, Spring Data JPA és H2 Adatbázis függőségeket, majd válassza Java 8-es vagy újabb verziót.
Fontos
A cikkben ismertetett lépések elvégzéséhez a Spring Boot 2.5-ös vagy újabb verziójára van szükség.
Titkos adat beállítása az Azure Key Vaultban
Ez az oktatóanyag bemutatja, hogyan olvashatja be az adatbázis hitelesítő adatait egy Spring Boot-alkalmazásban Key Vault. A hitelesítő adatok olvasásához a Key Vaultból először el kell tárolnia az adatbázis hitelesítő adatait a Key Vaultban.
Ha az H2-adatbázis URL-címét új titkos adatként szeretné tárolni a Key Vault rendszerben, tekintse meg a Quickstart: Titkos adat beállítása és lekérése az Azure Key Vault rendszerből az Azure portál használatával. Ebben az oktatóanyagban egy titkos kulcsot fog beállítani névvel h2url és értékkel jdbc:h2:~/testdb;user=sa;password=password.
Megjegyzés
A titkos kulcs megadása után biztosítson hozzáférést az alkalmazásnak a Key Vault-hoz a A Key Vault hozzáférési szabályzat hozzárendelése utasításait követve.
Titok beolvasása az Azure Key Vaultból
Most, hogy az adatbázis hitelesítő adatai Key Vault lettek tárolva, lekérheti őket a Spring Cloud Azure.
A Spring Cloud Azure Key Vault Starter modul telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (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>Megjegyzés
Ha a Spring Boot 4.0.x-et használja, mindenképpen állítsa a
spring-cloud-azure-dependenciesverziót7.2.0értékre.Ha Spring Boot 3.5.x-et használ, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót6.2.0.Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az ebben az anyagjegyzékben használt verzióval kapcsolatos további információkért lásd: Melyik Spring Cloud Azure verziót érdemes használnom.
A Spring Cloud Azure Key Vault Starter összetevő:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
A Spring Cloud Azure számos módszert használ a titkos kódok Key Vault való olvasására. A következő módszereket egymástól függetlenül használhatja, vagy kombinálhatja őket különböző használati esetekhez:
- Az Azure SDK használata a Key Vault-tal.
- A Spring KeyVault
PropertySourcehasználata.
Azure SDK használata a Key Vault könyvtárral
Az Azure SDK a Key Vault számára SecretClient biztosít a titkok kezeléséhez a Key Vaultban.
Az alábbi példakód bemutatja, hogyan lehet SecretClient használatával lekérni a H2-adatbázis hitelesítő adatait Azure Key Vault.
Ha Key Vault Azure SDK használatával szeretne titkos kódot olvasni, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Konfiguráljon egy Key Vault végpontot a application.properties konfigurációs fájlban.
spring.cloud.azure.keyvault.secret.endpoint=https://<your-keyvault-name>.vault.azure.net/Injektálja a
SecretClientbabot a Spring-alkalmazásba, és használja agetSecretmetódust egy titkos kód lekéréséhez, ahogyan az alábbi példában látható: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()); } }Tipp
Ebben az oktatóanyagban nincsenek hitelesítési műveletek a konfigurációkban vagy a kódban. Az Azure szolgáltatásokhoz való csatlakozáshoz azonban hitelesítés szükséges. A hitelesítés befejezéséhez Azure Identitást kell használnia. A Spring Cloud Azure
DefaultAzureCredentialhasznál, amelyet az Azure Identitástár biztosít a hitelesítő adatok kódmódosítások nélküli beszerzéséhez.DefaultAzureCredentialtöbb hitelesítési módszert támogat, és meghatározza, hogy melyik metódust használja futásidőben. Ez a megközelítés lehetővé teszi, hogy az alkalmazás különböző hitelesítési módszereket használjon különböző környezetekben (például helyi és éles környezetekben) környezetspecifikus kód implementálása nélkül. További információ: DefaultAzureCredential.A helyi fejlesztési környezetekben a hitelesítés befejezéséhez használhat Azure CLI, Visual Studio Code, PowerShellt vagy más módszereket. További információ: Azure hitelesítés Java fejlesztési környezetekben. Ha Azure üzemeltetési környezetekben szeretné elvégezni a hitelesítést, javasoljuk, hogy használja a felhasználó által hozzárendelt felügyelt identitást. További információ: Mi az Azure-erőforrások felügyelt identitásai?
Indítsa el az alkalmazást. A következő példához hasonló naplók láthatók:
h2url: jdbc:h2:~/testdb;user=sa;password=password
Önállóan is elkészítheti a SecretClient babot, de a folyamat bonyolult. A Spring Boot-alkalmazásokban kezelnie kell a tulajdonságokat, meg kell tanulnia a szerkesztői mintát, és regisztrálnia kell az ügyfelet a Spring-alkalmazás környezetében. Az alábbi példakód bemutatja, hogyan hozhat létre egy SecretClient bean-t:
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();
}
}
Az alábbi listában látható néhány ok, amiért ez a kód nem rugalmas vagy kecses:
- A Key Vault végpont kódolt.
- Ha a Spring-környezetből szeretne
@Valuekonfigurációkat lekérni, az application.properties fájlban nem szerepelhetnek IDE-tippek. - Ha mikroszolgáltatási forgatókönyve van, a kódot minden projektben duplikálni kell, és könnyű hibákat elkövetni, és nehéz konzisztensnek lenni.
Szerencsére a SecretClient babot nem szükséges saját magának létrehoznia a Spring Cloud Azure-val. Ehelyett közvetlenül injektálhat SecretClient, és használhatja a már ismert konfigurációs tulajdonságokat a Key Vault konfigurálásához. További információ: Konfigurációs példák.
A Spring Cloud Azure a következő globális konfigurációkat is biztosítja a különböző forgatókönyvekhez. További információkért lásd: Az Azure Service SDK-k globális konfigurációja a Spring Cloud Azure fejlesztői útmutató című részben.
- Proxybeállítások.
- Újrapróbálkozás beállításai.
- HTTP átviteli ügyfél beállításai.
Különböző Azure felhőkhöz is csatlakozhat. További információ: Kapcsolódás különböző Azure felhőkhöz.
A Spring Key Vault PropertySource használata
Az előző szakaszok bemutatták, hogyan használható SecretClient a CommandLineRunner titkos kód olvasására az alkalmazás elindítása után. A Spring Boot-alkalmazásokban azonban a titkos kódok olvasására van szükség az alkalmazás elindítása előtt. Az adatforrás jelszótulajdonságára például az alkalmazás elindítása előtt van szükség. Az előző forgatókönyv nem fog működni, ha az adatforrásjelszót Key Vault szeretné tárolni, és továbbra is a Spring automatikus konfigurációját használja az adatforrás lekéréséhez.
Ebben az esetben a Spring Cloud Azure biztosítja a Spring környezeti integrációt, hogy az alkalmazáskörnyezet létrehozása előtt betöltse a Key Vault titkokat. A titkos kóddal létrehozhatja és konfigurálhatja a babot a Spring-alkalmazás környezetének inicializálása során. Ez a megközelítés átlátható módja annak, hogy hozzáférhessen a Key Vault titkos kulcsaihoz, és nincs szükség kódmódosításra.
Az alábbi példakód bemutatja, hogyan használható a PropertySource a H2-adatbázis hitelesítő adatainak lekérésére az adatforrás Azure Key Vault-ből való létrehozásához.
Ha le szeretné kérni egy H2-adatbázis URL-címét Key Vault és adatokat szeretne tárolni a H2-adatbázisból a Spring Data JPA használatával, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Adja hozzá a következő Key Vault végpont- és adatforrás-tulajdonságokat a application.properties konfigurációs fájlhoz.
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.H2DialectTipp
A Spring Cloud Azure tulajdonságkonfigurációját a Spring Cloud Azure fejlesztői útmutatókonfigurációs példák szakaszában találja.
Ez a példa egy H2-adatbázist használó egyszerű adatbázis-forgatókönyv. Javasoljuk, hogy éles környezetben használja Azure Database for MySQL vagy Azure Database for PostgreSQL, és tárolja az adatbázis URL-címét, felhasználónevét és jelszavát Azure Key Vault. Ha el szeretné kerülni a jelszót, a jelszó nélküli kapcsolatok jó választás. További információ: A Azure szolgáltatások jelszó nélküli kapcsolatai.
Hozzon létre egy új
TodoJava osztályt. Ez az osztály egy olyan tartománymodell, amely atodoJPA által automatikusan létrehozott táblára van leképezve. Az alábbi kód figyelmen kívül hagyja agettersés asettersmetódusokat.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; }Szerkessze az indítási osztályfájlt a következő tartalom megjelenítéséhez.
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> { }Indítsa el az alkalmazást. Az alkalmazás lekéri a H2-adatbázis URL-címét a Key Vault, majd csatlakozik a H2 adatbázishoz, és adatokat tárol az adatbázisba. A következő példához hasonló naplók láthatók:
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
Üzembe helyezés a Azure Spring Apps
Most, hogy a Spring Boot alkalmazás helyben fut, ideje áthelyezni éles környezetbe. Azure Spring Apps megkönnyíti a Spring Boot-alkalmazások Azure való üzembe helyezését kódmódosítások nélkül. A szolgáltatás kezeli a Spring-alkalmazások infrastruktúráját, hogy a fejlesztők a kódjukra összpontosíthassanak. Azure Spring Apps teljes körű monitorozás és diagnosztika, konfigurációkezelés, szolgáltatásfelderítés, CI/CD-integráció, kék-zöld környezetek és egyebek használatával biztosítja az életciklus-felügyeletet. Az alkalmazás Azure Spring Apps való üzembe helyezéséről a A Azure Spring Apps első alkalmazás üzembe helyezéséről szóló cikkben olvashat.