1. खास जानकारी
पासवर्ड और एपीआई कुंजियों जैसे सीक्रेट, संवेदनशील जानकारी होती है. इन्हें सुरक्षित और एन्क्रिप्ट (सुरक्षित) किए गए स्टोरेज में सेव किया जाना चाहिए. साथ ही, इनके ऐक्सेस को कंट्रोल किया जाना चाहिए और इनकी ऑडिट की जा सकती हो. कुछ सिस्टम, इन सीक्रेट को सेव करने के लिए Vault का इस्तेमाल करते हैं. Google Cloud पर, मैनेज की गई सेवा Secret Manager का इस्तेमाल करके, सीक्रेट को सुरक्षित तरीके से सेव किया जा सकता है. साथ ही, IAM का इस्तेमाल करके, अलग-अलग सीक्रेट के ऐक्सेस को कंट्रोल किया जा सकता है.
Spring Boot में, Spring Cloud GCP का इस्तेमाल करके इन सीक्रेट को आसानी से ऐक्सेस किया जा सकता है. इसके लिए, आपको इन्हें किसी अन्य Spring प्रॉपर्टी के तौर पर रेफ़र करना होगा.
इस कोडलैब में, आपको Secret Manager में सीक्रेट सेव करने के बारे में बताया जाएगा. इसके बाद, आपको Spring Boot की सामान्य माइक्रोसेवाएं बनाने और सीक्रेट वापस पाने के बारे में बताया जाएगा.
आपको क्या सीखने को मिलेगा
- Spring Boot Java ऐप्लिकेशन बनाने और Secret Manager को कॉन्फ़िगर करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud प्रोजेक्ट
- कोई ब्राउज़र, जैसे कि Chrome या Firefox
- Vim, EMACs या Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी होना
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
एचटीएमएल/सीएसएस वेब ऐप्लिकेशन बनाने के अपने अनुभव को आप क्या रेटिंग देंगे?
Google Cloud की सेवाओं को इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेट अप करना
- Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. (अगर आपके पास पहले से Gmail या G Suite खाता नहीं है, तो आपको एक खाता बनाना होगा.)
प्रोजेक्ट आईडी याद रखें. यह सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इस कोडलैब में इसे बाद में PROJECT_ID के तौर पर दिखाया जाएगा.
- इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.
इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. "सफ़ाई करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें. इसमें आपको संसाधनों को बंद करने का तरीका बताया गया है, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ता, 300 डॉलर का क्रेडिट मुफ़्त में आज़माने के प्रोग्राम के लिए ज़रूरी शर्तें पूरी करते हैं.
Google Cloud Shell
Google Cloud की सेवाओं को लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें
पर क्लिक करें.
अगर आपने पहले कभी Cloud Shell का इस्तेमाल नहीं किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में जानकारी दी गई होगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें. इसके बाद, आपको यह स्क्रीन कभी नहीं दिखेगी. एक बार दिखने वाली स्क्रीन ऐसी दिखती है:
Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.
इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम, सिर्फ़ ब्राउज़र या Chromebook की मदद से किया जा सकता है.
Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर पहले ही सेट कर दिया गया है.
- पुष्टि करें कि आपने Cloud Shell में पुष्टि कर ली है. इसके लिए, यह कमांड चलाएं:
gcloud auth list
कमांड का आउटपुट
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
कमांड का आउटपुट
[core] project = <PROJECT_ID>
अगर ऐसा नहीं है, तो इस कमांड का इस्तेमाल करके इसे सेट किया जा सकता है:
gcloud config set project <PROJECT_ID>
कमांड का आउटपुट
Updated property [core/project].
3. सीक्रेट कॉन्फ़िगर करना
Secret Manager का इस्तेमाल करने के लिए, पहले एपीआई चालू करें:
$ gcloud services enable secretmanager.googleapis.com
इसके बाद, Hello वैल्यू के साथ greeting नाम का सीक्रेट बनाएं:
$ echo -n "Hello" | \ gcloud secrets create greeting \ --data-file=-
यह कमांड, कमांड लाइन को वैल्यू देने के लिए STDIN का इस्तेमाल करती है. हालांकि, सीक्रेट वैल्यू को किसी फ़ाइल में भी रखा जा सकता है. साथ ही, --data-file आर्ग्युमेंट के लिए फ़ाइल का नाम तय किया जा सकता है.
gcloud CLI का इस्तेमाल करके, सभी सीक्रेट की सूची बनाई जा सकती है:
$ gcloud secrets list
4. नई Spring Boot REST सेवा बनाना
Cloud Shell लॉन्च होने के बाद, Spring Initializr की मदद से नया Spring Boot ऐप्लिकेशन जनरेट करने के लिए, कमांड लाइन का इस्तेमाल किया जा सकता है:
$ 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
pom.xml में, 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>
src/main/resources/application.properties फ़ाइल में, Spring Boot Config Data API को चालू करने के लिए, यह कॉन्फ़िगरेशन जोड़ें:
spring.config.import=sm://
इससे एक Spring Property Source कॉन्फ़िगर होगा, ताकि प्रॉपर्टी वैल्यू का इस्तेमाल करके सीक्रेट को रेफ़र किया जा सके. इसके लिए, sm:// प्रीफ़िक्स का इस्तेमाल करें. उदाहरण के लिए, sm://greeting.
प्रॉपर्टी के फ़ॉर्मैट के बारे में ज़्यादा जानने के लिए, Spring Cloud GCP Secret Manager का दस्तावेज़ देखें. ध्यान दें कि application.properties की ज़रूरी शर्त, Spring Cloud GCP 4.x में नई है. माइग्रेशन गाइड में ज़्यादा जानकारी पढ़ें.
नई क्लास फ़ाइल जोड़कर, नया REST कंट्रोलर बनाएं:
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!";
}
}
Spring Boot प्लगिन की मदद से, Spring Boot ऐप्लिकेशन को सामान्य तरीके से शुरू किया जा सकता है.
पक्का करें कि JAVA_HOME को सही JDK वर्शन पर सेट किया गया हो:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
आइए, इस लैब के लिए टेस्ट छोड़ें और ऐप्लिकेशन शुरू करें:
$ ./mvnw -DskipTests spring-boot:run
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में मौजूद वेब प्रीव्यू आइकॉन
पर क्लिक करें. इसके बाद, पोर्ट 8080 पर प्रीव्यू करें को चुनें.
कुछ देर इंतज़ार करने के बाद, आपको यह नतीजा दिखेगा:

5. किसी सीक्रेट को वापस पाना
sm:// प्रीफ़िक्स का इस्तेमाल करके, सीक्रेट प्रॉपर्टी को रेफ़र करने के लिए @Value एनोटेशन का इस्तेमाल किया जा सकता है.
HelloSecretController क्लास में, एनोटेशन का इस्तेमाल करके greeting वैल्यू इंजेक्ट करें:
src/main/java/com/example/demo/HelloSecretController.java
import org.springframework.beans.factory.annotation.Value;
...
@RestController
public class HelloSecretController {
@Value("${sm://greeting}")
String greeting;
...
}
Spring Boot प्लगिन की मदद से, Spring Boot ऐप्लिकेशन को सामान्य तरीके से शुरू किया जा सकता है. इस लैब के लिए टेस्ट छोड़ें:
$ ./mvnw -DskipTests spring-boot:run
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में मौजूद वेब प्रीव्यू आइकॉन
पर क्लिक करें. इसके बाद, पोर्ट 8080 पर प्रीव्यू करें को चुनें.
कुछ देर इंतज़ार करने के बाद, आपको यह नतीजा दिखेगा:

application.properties में मौजूद किसी प्रॉपर्टी के लिए भी वैल्यू मैप की जा सकती है:
src/main/resources/application.properties
greeting=${sm://greeting}
HelloSecretController में, Secret Manager के नाम के बजाय, इस सामान्य प्रॉपर्टी के नाम का रेफ़रंस दिया जा सकता है:
src/main/java/com/example/demo/HelloSecretController.java
@RestController
public class HelloSecretController {
@Value("${greeting}")
String greeting;
...
}
Spring Boot प्लगिन की मदद से, Spring Boot ऐप्लिकेशन को सामान्य तरीके से शुरू किया जा सकता है. इस लैब के लिए टेस्ट छोड़ें:
$ ./mvnw -DskipTests spring-boot:run
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में मौजूद वेब प्रीव्यू आइकॉन
पर क्लिक करें. इसके बाद, पोर्ट 8080 पर प्रीव्यू करें को चुनें.
सीक्रेट वैल्यू अपडेट करना
sm://greeting के छोटे सिंटैक्स का इस्तेमाल करने पर, सीक्रेट के सबसे नए वर्शन का इस्तेमाल अपने-आप होता है. सीक्रेट का नया वर्शन बनाकर, अपने ऐप्लिकेशन को अपडेट किया जा सकता है. इसके लिए, कोड में बदलाव करने की ज़रूरत नहीं होती.
नया वर्शन जोड़कर, सीक्रेट की वैल्यू अपडेट करें:
$ echo -n "Greetings" | gcloud secrets versions add greeting \ --data-file=-
ऐप्लिकेशन को फिर से चालू करें और देखें कि सीक्रेट का नया वर्शन वापस आ रहा है.

इस कॉन्सेप्ट के बारे में ज़्यादा जानकारी
यह तकनीक खास तौर पर तब काम आती है, जब अलग-अलग Spring Boot ऐप्लिकेशन प्रोफ़ाइलों का इस्तेमाल किया जाता है. उदाहरण के लिए, greeting-dev, greeting-staging, greeting-prod जैसे सीक्रेट बनाए जा सकते हैं. साथ ही, हर प्रोफ़ाइल में, दाईं ओर मौजूद ग्रीटिंग को मैप करें.
greeting-prod सीक्रेट बनाएं:
$ echo -n "Hola" | \ gcloud secrets create greeting-prod \ --data-file=- --replication-policy=automatic
application-prod.properties फ़ाइल बनाने के लिए:
src/main/resources/application-prod.properties
greeting=${sm://greeting-prod}
Spring Boot प्लगिन की मदद से, Spring Boot ऐप्लिकेशन को सामान्य तरीके से शुरू किया जा सकता है. हालांकि, इसके लिए prod प्रोफ़ाइल का इस्तेमाल करना होगा. इस लैब के लिए टेस्ट छोड़ें:
$ ./mvnw -DskipTests spring-boot:run -Dspring-boot.run.profiles=prod
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में मौजूद वेब प्रीव्यू आइकॉन
पर क्लिक करें. इसके बाद, पोर्ट 8080 पर प्रीव्यू करें को चुनें.
कुछ देर इंतज़ार करने के बाद, आपको यह नतीजा दिखेगा:

6. खास जानकारी
इस लैब में, आपने एक ऐसी सेवा बनाई है जिसे Secret Manager में सेव किए गए सीक्रेट का इस्तेमाल करके कॉन्फ़िगर किया जा सकता है. इसके लिए, Spring के प्रॉपर्टी नामों के साथ sm:// प्रीफ़िक्स का इस्तेमाल किया जाता है. साथ ही, applications.properties फ़ाइल और @Value एनोटेशन से वैल्यू इंजेक्ट की जाती है.
7. बधाई हो!
आपने Java में Secret Manager API इस्तेमाल करने का तरीका सीखा.
ज़्यादा जानें
- GCP प्रोजेक्ट पर स्प्रिंग: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub रिपॉज़िटरी पर Spring: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google Cloud पर Java: https://cloud.google.com/java/
- Secret Manager में सीक्रेट के ऐक्सेस को कंट्रोल करना: https://cloud.google.com/secret-manager/docs/access-control
- Secret Manager में ऑडिट लॉगिंग: https://cloud.google.com/secret-manager/docs/audit-logging
लाइसेंस
इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.