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 bemutatja, hogyan használhatja a Key Vaultot a Spring Boot-alkalmazásokban a bizalmas konfigurációs adatok védelmére és a konfigurációs tulajdonságok Key Vaultból való lekérésére. A Key Vault általános titkos kulcsok, például jelszavak és adatbázis-kapcsolati sztring biztonságos tárolását biztosítja.
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen.
- A Java Development Kit (JDK) 8- vagy újabb verziója.
- Apache Maven
- Azure CLI
- Egy Key Vault-példány. Ha nincs, nézze meg a Gyorsútmutatót: Kulcstartó tároló létrehozása az Azure Portal használatával. Jegyezze fel a 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 nem rendelkezik ilyennel, hozzon létre egy Maven-projektet a Spring Initializrrel. Mindenképpen válassza a Maven Projectet, és a Függőségek területen adja hozzá a Spring Web, a Spring Data JPA és a H2 Database függőségeit, majd válassza a Java 8-es vagy újabb verziójá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 kulcs beállítása az Azure Key Vaulthoz
Ez az oktatóanyag bemutatja, hogyan olvashatja be az adatbázis hitelesítő adatait a Key Vaultból egy Spring Boot-alkalmazásban. A Key Vault hitelesítő adatainak olvasásához először az adatbázis hitelesítő adatait kell tárolnia a Key Vaultban.
Ha egy H2-adatbázis URL-címét új titkos kódként szeretné tárolni a Key Vaultban, olvassa el a rövid útmutatót: Titkos kulcs beállítása és lekérése az Azure Key Vaultból az Azure Portal 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 kód beállítása után adjon alkalmazásának hozzáférést a Key Vaulthoz, a Key Vault hozzáférési szabályzat hozzárendelése című útmutatás követésével.
Titkos kód beolvasása az Azure Key Vaultból
Most, hogy az adatbázis hitelesítő adatai a Key Vaultban lettek tárolva, lekérheti őket a Spring Cloud Azure-ban.
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éke (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Megjegyzés
Ha Spring Boot 3.0.x-3.4.x verziót használ, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót5.23.0.Ha a(z) Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>pom.xml 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.A BOM-hez használt verzióról további információt a Spring Cloud Azure melyik verzióját érdemes használni.
A Spring Cloud Azure Key Vault Starter artefaktum:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
A Spring Cloud Azure számos módszerrel rendelkezik a Key Vault titkos kulcsainak 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:
- Használja az Azure SDK for Key Vaultot.
- A Spring KeyVault
PropertySourcehasználata.
Az Azure SDK használata a Key Vaulthoz
Az Azure SDK for Key Vault lehetőséget kínál a titkok kezelésére a Key Vaultban.
Az alábbi példakód bemutatja, hogyan lehet lekérni SecretClient a H2-adatbázis hitelesítő adatait az Azure Key Vaultból.
Ha az Azure SDK-val szeretne titkos kódot olvasni a Key Vaultból, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Key Vault-végpont konfigurálása az 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 az Azure Identity-et kell használnia. A Spring Cloud Azure
DefaultAzureCredentialaz Azure Identity-kódtár használatával segít a hitelesítő adatok kódmódosítások nélküli beszerzésében.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álhatja az Azure CLI-t, a Visual Studio Code-ot, a PowerShellt vagy más módszereket. További információ: Azure-hitelesítés Java-fejlesztési környezetekben. A hitelesítés azure-beli üzemeltetési környezetekben való elvégzéséhez javasoljuk a felhasználó által hozzárendelt felügyelt identitás használatát. További információ: Mik 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.
A Spring Cloud Azure-ban szerencsére nem szükséges önállóan összeállítani a SecretClient babot. Ehelyett közvetlenül injektálhatja SecretClient és használhatja a Key Vault konfigurálásához már ismert konfigurációs tulajdonságokat. 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ó: Az Azure Service SDK-k globális konfigurációja a Spring Cloud Azure fejlesztői útmutatójában.
- 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ó: Csatlakozá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ás jelszavát a Key Vaultban 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 spring environment-integrációt biztosít a Key Vault titkos kulcsainak betöltéséhez az alkalmazáskörnyezet létrehozása előtt. 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 egy átlátható módot biztosít arra, hogy titkokat érhessen el a Key Vaultból, és nincs szükség arra, hogy módosítsa a kódot.
Az alábbi példakód bemutatja, hogyan lehet PropertySource segítségével az Azure Key Vaultból lekérni a H2-adatbázis hitelesítő adatait az adatforrás létrehozásához.
Ha le szeretné kérni egy H2-adatbázis URL-címét a Key Vaultból, é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égpontot és adatforrás-tulajdonságokat az 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-beli tulajdonságkonfigurációra vonatkozó példákért tekintse meg a Spring Cloud Azure fejlesztői útmutatójának Konfigurációs példák szakaszát.
Ez a példa egy H2-adatbázist használó egyszerű adatbázis-forgatókönyv. Javasoljuk, hogy éles környezetben használja az Azure Database for MySQL-t vagy az Azure Database for PostgreSQL-t, és tárolja az adatbázis URL-címét, felhasználónevét és jelszavát az Azure Key Vaultban. Ha el szeretné kerülni a jelszót, a jelszó nélküli kapcsolatok jó választás. További információ: Jelszó nélküli kapcsolatok az Azure-szolgáltatásokhoz.
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éssettersmetó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 Vaultból, 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 az Azure Spring Appsben
Most, hogy a Spring Boot alkalmazás helyben fut, ideje áthelyezni éles környezetbe. Az Azure Spring Apps megkönnyíti a Spring Boot-alkalmazások üzembe helyezését az Azure-ban 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. Az Azure Spring Apps átfogó monitorozási és diagnosztikai, konfigurációkezelési, szolgáltatásfelderítési, CI/CD-integrációs, kék-zöld környezetek és egyebek használatával biztosítja az életciklus-felügyeletet. Az alkalmazás Azure Spring Appsben való üzembe helyezéséről az első alkalmazás üzembe helyezése az Azure Spring Appsben című témakörben olvashat.