1. Ringkasan
Rahasia seperti sandi dan kunci API adalah informasi sensitif yang harus disimpan dalam penyimpanan terenkripsi yang aman, akses terkontrol, dan dapat diaudit. Beberapa sistem memilih menggunakan Vault untuk menyimpan rahasia ini. Di Google Cloud, Anda dapat menggunakan Secret Manager, sebuah layanan terkelola, untuk menyimpan secret dengan aman, dan mengontrol akses ke setiap secret menggunakan IAM.
Di Spring Boot, Anda dapat menggunakan Spring Cloud GCP untuk mengakses rahasia ini dengan mudah dengan menyebutnya sebagai properti Spring lainnya.
Dalam codelab ini, Anda akan menyimpan secret di Secret Manager, lalu membangun microservice Spring Boot sederhana dan mengambil secret.
Yang akan Anda pelajari
- Cara membuat aplikasi Java Spring Boot dan mengonfigurasi Secret Manager.
Yang Anda butuhkan
- Project Google Cloud
- Browser, seperti Chrome atau Firefox
- Pemahaman tentang editor teks Linux standar seperti Vim, EMACs, atau Nano
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana Anda menilai pengalaman Anda membuat aplikasi web HTML/CSS?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. (Jika belum memiliki akun Gmail atau G Suite, Anda harus membuatnya.)
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Google Cloud Shell
Meskipun layanan Google Cloud dapat dioperasikan secara jarak jauh dari laptop Anda, dalam codelab ini kita akan menggunakan Google Cloud Shell, yakni lingkungan command line yang berjalan di Cloud.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell .
Jika belum pernah memulai Cloud Shell, Anda akan melihat layar perantara (di paruh bawah) yang menjelaskan apa itu Cloud Shell. Jika demikian, klik Lanjutkan (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan hanya dengan browser atau Chromebook.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Mengonfigurasi Secret
Untuk menggunakan Secret Manager, aktifkan API terlebih dahulu:
$ gcloud services enable secretmanager.googleapis.com
Lalu, buat secret bernama greeting
, dengan nilai Hello
:
$ echo -n "Hello" | \ gcloud secrets create greeting \ --data-file=-
Perintah ini menggunakan STDIN
untuk memberikan nilai ke command line. Namun, Anda juga dapat memasukkan nilai rahasia dalam file, yang menentukan nama file untuk argumen --data-file
.
Anda dapat membuat daftar semua secret menggunakan gcloud CLI:
$ gcloud secrets list
4. Membuat Layanan REST Spring Boot baru
Setelah Cloud Shell diluncurkan, Anda dapat menggunakan command line untuk membuat aplikasi Spring Boot baru dengan Spring Initializr:
$ curl https://start.spring.io/starter.tgz -d packaging=jar \ -d dependencies=web,cloud-gcp \ -d bootVersion=3.0.6 \ -d type=maven-project \ -d baseDir=hello-secret-manager | tar -xzvf - \ && cd hello-secret-manager
Di pom.xml
, tambahkan dependensi starter GCP Spring Cloud:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Secret Manager Starter -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-secretmanager</artifactId>
</dependency>
</dependencies>
...
</project>
Di file src/main/resources/application.properties
, tambahkan konfigurasi berikut untuk mengaktifkan Spring Boot Config Data API.:
spring.config.import=sm://
Tindakan ini akan mengonfigurasi Sumber Properti Spring, sehingga Anda dapat merujuk ke secret menggunakan nilai properti, dengan awalan sm://
, misalnya, sm://greeting
.
Lihat dokumentasi Secret Manager GCP Spring Cloud untuk detail selengkapnya tentang format properti. Perhatikan bahwa persyaratan application.properties
baru di Spring Cloud GCP 4.x. Baca detail selengkapnya dalam panduan migrasi.
Buat pengontrol REST baru dengan menambahkan file class baru:
src/main/java/com/example/demo/HelloSecretController.java
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloSecretController {
String greeting = "Hi";
@GetMapping("/")
public String hello() {
return greeting + " World!";
}
}
Anda dapat memulai aplikasi Spring Boot secara normal dengan plugin Spring Boot.
Pastikan JAVA_HOME disetel ke versi JDK yang benar:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Mari lewati pengujian untuk lab ini, dan mulai aplikasi:
$ ./mvnw -DskipTests spring-boot:run
Setelah aplikasi dimulai, klik ikon Web Preview di toolbar Cloud Shell dan pilih preview di port 8080.
Setelah menunggu sebentar, Anda akan melihat hasilnya:
5. Mengambil Secret
Anda dapat menggunakan anotasi @Value
untuk merujuk ke properti rahasia menggunakan awalan sm://
.
Di class HelloSecretController, masukkan nilai greeting
menggunakan anotasi:
src/main/java/com/example/demo/HelloSecretController.java
import org.springframework.beans.factory.annotation.Value;
...
@RestController
public class HelloSecretController {
@Value("${sm://greeting}")
String greeting;
...
}
Anda dapat memulai aplikasi Spring Boot secara normal dengan plugin Spring Boot. Mari lewati pengujian untuk lab ini:
$ ./mvnw -DskipTests spring-boot:run
Setelah aplikasi dimulai, klik ikon Web Preview di toolbar Cloud Shell dan pilih preview di port 8080.
Setelah menunggu sebentar, Anda akan melihat hasilnya:
Anda juga dapat memetakan nilai ke properti di application.properties
:
src/main/resources/application.properties
greeting=${sm://greeting}
Di HelloSecretController, Anda dapat merujuk ke nama properti yang lebih umum ini, bukan nama Secret Manager:
src/main/java/com/example/demo/HelloSecretController.java
@RestController
public class HelloSecretController {
@Value("${greeting}")
String greeting;
...
}
Anda dapat memulai aplikasi Spring Boot secara normal dengan plugin Spring Boot. Mari lewati pengujian untuk lab ini:
$ ./mvnw -DskipTests spring-boot:run
Setelah aplikasi dimulai, klik ikon Web Preview di toolbar Cloud Shell dan pilih preview di port 8080.
Memperbarui nilai secret
Dengan sintaksis singkat sm://greeting
, Anda otomatis menggunakan rahasia versi terbaru. Dengan membuat versi rahasia yang baru, Anda bisa mengupdate aplikasi tanpa mengubah kode Anda.
Update nilai rahasia dengan menambahkan versi baru:
$ echo -n "Greetings" | gcloud secrets versions add greeting \ --data-file=-
Mulai ulang aplikasi dan lihat versi rahasia yang baru ditampilkan.
Memperluas konsep ini
Teknik ini berguna terutama jika Anda menggunakan profil aplikasi Spring Boot yang berbeda. Misalnya, Anda dapat membuat secret seperti greeting-dev
, greeting-staging
, greeting-prod
. Dan di setiap profil, petakan ke salam yang tepat.
Buat rahasia greeting-prod
:
$ echo -n "Hola" | \ gcloud secrets create greeting-prod \ --data-file=- --replication-policy=automatic
Buat file application-prod.properties
:
src/main/resources/application-prod.properties
greeting=${sm://greeting-prod}
Anda dapat memulai aplikasi Spring Boot seperti biasa dengan plugin Spring Boot, tetapi dengan profil prod
. Mari lewati pengujian untuk lab ini:
$ ./mvnw -DskipTests spring-boot:run -Dspring-boot.run.profiles=prod
Setelah aplikasi dimulai, klik ikon Web Preview di toolbar Cloud Shell dan pilih preview di port 8080.
Setelah menunggu sebentar, Anda akan melihat hasilnya:
6. Ringkasan
Di lab ini, Anda telah membuat layanan yang dapat dikonfigurasi menggunakan secret yang disimpan di Secret Manager menggunakan nama properti Spring yang diawali dengan sm://
dan memasukkan nilai dari file applications.properties
dan anotasi @Value
.
7. Selamat!
Anda telah mempelajari cara menggunakan Secret Manager API di Java.
Pelajari Lebih Lanjut
- Project musim semi di GCP: http://cloud.spring.io/spring-cloud-gcp/
- Repositori GitHub Spring di GCP: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Java di Google Cloud: https://cloud.google.com/java/
- Mengontrol akses ke secret di Secret Manager: https://cloud.google.com/secret-manager/docs/access-control
- Logging Audit di Secret manager: https://cloud.google.com/secret-manager/docs/audit-logging
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.