Spring Vault

Keamanan Top

Saya baru saja mengumumkan kursus Learn Spring Security baru, termasuk materi lengkap yang berfokus pada tumpukan OAuth2 baru di Spring Security 5:

>> LIHAT KURSUSnya

1. Ikhtisar

HashiCorp's Vault adalah alat untuk menyimpan dan mengamankan rahasia. Vault, secara umum, memecahkan masalah keamanan pengembangan perangkat lunak tentang cara mengelola rahasia. Untuk mempelajari lebih lanjut tentang itu, lihat artikel kami di sini.

Spring Vault menyediakan abstraksi Musim Semi ke HashiCorp's Vault.

Dalam tutorial ini, kita akan membahas contoh tentang cara menyimpan dan mengambil rahasia dari Vault.

2. Ketergantungan Maven

Untuk memulainya, mari kita lihat dependensi yang kita perlukan untuk mulai bekerja dengan Spring Vault:

  org.springframework.vault spring-vault-core 2.1.1.RELEASE   

Versi terbaru dari pegas-kubah-inti dapat ditemukan di Maven Central.

3. Konfigurasi Vault

Sekarang mari kita lakukan langkah-langkah yang diperlukan untuk mengonfigurasi Vault.

3.1. Membuat VaultTemplate

Untuk mengamankan rahasia kami, kita harus instantiate VaultTemplate yang kami butuhkan VaultEndpoint dan TokenAuthentication contoh:

VaultTemplate vaultTemplate = new VaultTemplate(new VaultEndpoint(), new TokenAuthentication("00000000-0000-0000-0000-000000000000"));

3.2. Membuat VaultEndpoint

Ada beberapa cara untuk membuat instance VaultEndpoint . Mari kita lihat beberapa di antaranya.

Yang pertama adalah membuat instance menggunakan konstruktor default, yang akan membuat titik akhir default yang menunjuk ke // localhost: 8200:

VaultEndpoint endpoint = new VaultEndpoint();

Cara lain adalah membuat VaultEndpoint dengan menentukan host dan port Vault:

VaultEndpoint endpoint = VaultEndpoint.create("host", port);

Dan terakhir, kami juga dapat membuatnya dari URL Vault:

VaultEndpoint endpoint = VaultEndpoint.from(new URI("vault uri"));

Ada beberapa hal yang perlu diperhatikan di sini - Vault akan dikonfigurasi dengan token root 00000000-0000-0000-0000-000000000000 untuk menjalankan aplikasi ini.

Dalam contoh kami, kami telah menggunakan TokenAuthentication , tetapi ada juga metode otentikasi lain yang didukung.

4. Mengonfigurasi Vault Beans Menggunakan Spring

Dengan Spring, kami dapat mengonfigurasi Vault dengan beberapa cara. Salah satunya adalah dengan memperluas AbstractVaultConfiguration, dan yang lainnya adalah dengan menggunakan EnvironmentVaultConfiguration yang menggunakan properti lingkungan Spring.

Sekarang kita akan membahas kedua cara tersebut.

4.1. Menggunakan AbstractVaultConfiguration

Mari buat kelas yang memperluas AbstractVaultConfiguration, untuk mengonfigurasi Spring Vault:

@Configuration public class VaultConfig extends AbstractVaultConfiguration { @Override public ClientAuthentication clientAuthentication() { return new TokenAuthentication("00000000-0000-0000-0000-000000000000"); } @Override public VaultEndpoint vaultEndpoint() { return VaultEndpoint.create("host", 8020); } }

Pendekatan ini mirip dengan yang kita lihat di bagian sebelumnya. Yang berbeda adalah kita telah menggunakan Spring Vault untuk mengonfigurasi kacang Vault dengan memperluas kelas abstrak AbstractVaultConfiguration.

Kami hanya perlu menyediakan implementasi untuk mengonfigurasi VaultEndpoint dan ClientAuthentication .

4.2. Menggunakan EnvironmentVaultConfiguration

Kita juga dapat mengkonfigurasi Spring Vault menggunakan EnviromentVaultConfiguration :

@Configuration @PropertySource(value = { "vault-config.properties" }) @Import(value = EnvironmentVaultConfiguration.class) public class VaultEnvironmentConfig { }

EnvironmentVaultConfiguration memanfaatkan Spring's PropertySource untuk mengkonfigurasi kacang Vault. Kami hanya perlu menyediakan file properti dengan beberapa entri yang dapat diterima.

Informasi lebih lanjut tentang semua properti yang ditentukan sebelumnya dapat ditemukan di dokumentasi resmi.

Untuk mengonfigurasi Vault, kami membutuhkan setidaknya beberapa properti:

vault.uri=//localhost:8200 vault.token=00000000-0000-0000-0000-000000000000

5. Mengamankan Rahasia

Kami akan membuat kelas Kredensial sederhana yang memetakan ke nama pengguna dan kata sandi:

public class Credentials { private String username; private String password; // standard constructors, getters, setters }

Sekarang, mari kita lihat bagaimana kita bisa mengamankan objek Kredensial kita menggunakan VaultTemplate:

Credentials credentials = new Credentials("username", "password"); vaultTemplate.write("secret/myapp", credentials);

Dengan selesainya baris-baris ini, rahasia kita sekarang disimpan.

Selanjutnya, kita akan melihat cara mengaksesnya.

6. Mengakses Rahasia

Kita dapat mengakses rahasia yang diamankan menggunakan metode read () di VaultTemplate, yang mengembalikan VaultResponseSupport sebagai tanggapan:

VaultResponseSupport response = vaultTemplate .read("secret/myapp", Credentials.class); String username = response.getData().getUsername(); String password = response.getData().getPassword();

Nilai rahasia kita sekarang sudah siap.

7. Kesimpulan

Di artikel ini, kami telah mempelajari dasar-dasar Spring Vault dengan contoh yang menunjukkan cara kerja Vault dalam skenario umum .

Seperti biasa, kode sumber yang disajikan di sini dapat ditemukan di GitHub.

Keamanan bawah

Saya baru saja mengumumkan kursus Learn Spring Security baru, termasuk materi lengkap yang berfokus pada tumpukan OAuth2 baru di Spring Security 5:

>> LIHAT KURSUSnya