1. Ringkasan
Secret seperti sandi, kunci API, adalah informasi sensitif yang harus disimpan dalam penyimpanan yang aman dan terenkripsi, dikontrol aksesnya, dan dapat diaudit. Beberapa sistem memilih menggunakan Vault untuk menyimpan secret ini. Di Google Cloud, Anda dapat menggunakan Secret Manager, layanan terkelola, untuk menyimpan rahasia secara aman, dan mengontrol akses ke setiap rahasia menggunakan IAM.
Di Spring Boot, Anda dapat menggunakan Spring Cloud GCP untuk mengakses secret ini dengan mudah dengan merujuknya sebagai properti Spring lainnya.
Dalam codelab ini, Anda akan menyimpan rahasia di Secret Manager, lalu membuat microservice Spring Boot sederhana dan mengambil rahasia tersebut.
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?
Sejauh mana 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 dari jarak jauh menggunakan laptop Anda, dalam codelab ini, kita akan menggunakan Google Cloud Shell, 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
Kemudian, 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 ke dalam file, dan menentukan nama file untuk argumen --data-file.
Anda dapat mencantumkan semua secret menggunakan gcloud CLI:
$ gcloud secrets list
4. Buat 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 Spring Cloud GCP:
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 Spring Property Source, sehingga Anda dapat merujuk ke secret menggunakan nilai properti, dengan awalan sm://, misalnya, sm://greeting.
Lihat dokumentasi Spring Cloud GCP Secret Manager untuk mengetahui detail selengkapnya tentang format properti. Perhatikan bahwa persyaratan application.properties baru ada 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/
Lewati pengujian untuk lab ini, dan mulai aplikasi:
$ ./mvnw -DskipTests spring-boot:run
Setelah aplikasi dimulai, klik ikon Pratinjau Web
di toolbar Cloud Shell, lalu pilih preview on 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, injeksikan 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 Pratinjau Web
di toolbar Cloud Shell, lalu pilih preview on 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 Pratinjau Web
di toolbar Cloud Shell, lalu pilih preview on port 8080.
Memperbarui nilai secret
Dengan menggunakan sintaksis singkat sm://greeting, Anda otomatis menggunakan versi terbaru secret. Dengan membuat versi baru rahasia, Anda dapat mengupdate aplikasi tanpa mengubah kode.
Perbarui nilai secret dengan menambahkan versi baru:
$ echo -n "Greetings" | gcloud secrets versions add greeting \ --data-file=-
Mulai ulang aplikasi, dan lihat versi baru secret yang 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. Kemudian, di setiap profil, petakan ke ucapan yang tepat.
Buat secret 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 secara normal 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 Pratinjau Web
di toolbar Cloud Shell, lalu pilih preview on port 8080.
Setelah menunggu sebentar, Anda akan melihat hasilnya:

6. Ringkasan
Dalam lab ini, Anda telah membuat layanan yang dapat dikonfigurasi menggunakan secret yang disimpan di Secret Manager dengan menggunakan nama properti Spring yang diawali dengan sm:// dan menyuntikkan nilai dari file applications.properties dan anotasi @Value.
7. Selamat!
Anda telah mempelajari cara menggunakan Secret Manager API di Java.
Pelajari Lebih Lanjut
- Project Spring di GCP: http://cloud.spring.io/spring-cloud-gcp/
- Repositori GitHub Spring on 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
- Audit Logging di Secret Manager: https://cloud.google.com/secret-manager/docs/audit-logging
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.