1. खास जानकारी
पासवर्ड, एपीआई पासकोड जैसे सीक्रेट, संवेदनशील जानकारी होती है. इसे किसी सुरक्षित, एन्क्रिप्ट (सुरक्षित) किए गए स्टोरेज, ऐक्सेस कंट्रोल, और ऑडिट किए जा सकने वाले डिवाइस में सेव करें. कुछ सिस्टम, इन सीक्रेट को सेव करने के लिए Vault का इस्तेमाल करते हैं. Google Cloud पर, सीक्रेट मैनेजर का इस्तेमाल किया जा सकता है. यह मैनेज की जा रही सेवा है. इससे सीक्रेट को सुरक्षित तरीके से सेव किया जा सकता है और आईएएम का इस्तेमाल करके, अलग-अलग सीक्रेट का ऐक्सेस कंट्रोल किया जा सकता है.
Spring बूट में, आप Spring Cloud GCP का इस्तेमाल करके इन सीक्रेट को आसानी से ऐक्सेस कर सकते हैं. ऐसा करने के लिए, उन्हें किसी भी दूसरी Spring प्रॉपर्टी के तौर पर रेफ़र किया जा सकता है.
इस कोडलैब में, सीक्रेट मैनेजर में सीक्रेट स्टोर किया जा सकता है. इसके बाद, स्प्रिंग बूट की आसान माइक्रोसर्विस बनाई जा सकती हैं और सीक्रेट को वापस पाया जा सकता है.
आपको इनके बारे में जानकारी मिलेगी
- स्प्रिंग बूट Java ऐप्लिकेशन बनाने और Secret Manager कॉन्फ़िगर करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud प्रोजेक्ट
- ब्राउज़र, जैसे कि Chrome या Firefox
- Vim, EMAC या Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
एचटीएमएल/सीएसएस वेब ऐप्लिकेशन बनाने के अपने अनुभव को आप कितनी रेटिंग देंगे?
Google Cloud की सेवाएं इस्तेमाल करने का आपका अनुभव कैसा रहा?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
- Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. (अगर आपके पास पहले से Gmail या G Suite खाता नहीं है, तो आपको एक खाता बनाना होगा.)
प्रोजेक्ट आईडी याद रखें. यह Google Cloud के सभी प्रोजेक्ट के लिए एक खास नाम होता है (ऊपर दिया गया नाम पहले ही ले लिया गया है और यह आपके लिए काम नहीं करेगा!). बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID
के तौर पर दिखाया जाएगा.
- इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.
इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. "साफ़ करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है. इससे इस ट्यूटोरियल के अलावा बिलिंग की सुविधा नहीं मिलेगी. Google Cloud के नए उपयोगकर्ता, 300USD डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में हिस्सा ले सकते हैं.
Google Cloud शेल
Google Cloud की सेवाओं को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें पर क्लिक करें.
अगर आपने Cloud Shell का इस्तेमाल पहले कभी नहीं किया है, तो आपको इसके बारे में जानकारी देने वाली एक इंटरमीडिएट स्क्रीन (पेज के फ़ोल्ड के नीचे) दिखेगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें (यह आपको फिर कभी नहीं दिखेगा). एक बार इस्तेमाल होने वाली स्क्रीन कुछ इस तरह दिखती है:
प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.
इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और 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. सीक्रेट कॉन्फ़िगर करें
सीक्रेट मैनेजर का इस्तेमाल करने के लिए, सबसे पहले एपीआई चालू करें:
$ gcloud services enable secretmanager.googleapis.com
इसके बाद, Hello
की वैल्यू वाला greeting
नाम का सीक्रेट बनाएं:
$ echo -n "Hello" | \ gcloud secrets create greeting \ --data-file=-
यह निर्देश, कमांड लाइन के लिए वैल्यू देने के लिए STDIN
का इस्तेमाल करता है. हालांकि, किसी फ़ाइल में सीक्रेट वैल्यू भी डाली जा सकती है. --data-file
आर्ग्युमेंट के लिए, फ़ाइल का नाम बताएं.
gcloud सीएलआई का इस्तेमाल करके सारे सीक्रेट लिस्ट किए जा सकते हैं:
$ gcloud secrets list
4. नई स्प्रिंग बूट REST सेवा बनाएं
Cloud Shell के लॉन्च होने के बाद, कमांड लाइन का इस्तेमाल करके Spring Initializr वाला नया Spring बूट ऐप्लिकेशन जनरेट किया जा सकता है:
$ 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>
Spring बूट कॉन्फ़िगरेशन Data API को चालू करने के लिए, src/main/resources/application.properties
फ़ाइल में यह कॉन्फ़िगरेशन जोड़ें.:
spring.config.import=sm://
इससे एक स्प्रिंग प्रॉपर्टी सोर्स कॉन्फ़िगर हो जाएगा, ताकि आप sm://
के प्रीफ़िक्स, जैसे कि sm://greeting
के साथ प्रॉपर्टी वैल्यू का इस्तेमाल करके सीक्रेट देख सकें.
प्रॉपर्टी के फ़ॉर्मैट के बारे में ज़्यादा जानकारी के लिए, Spring Cloud GCP सीक्रेट मैनेजर दस्तावेज़ देखें. ध्यान दें कि Spring Cloud GCP 4.x में, application.properties
की ज़रूरी शर्त नई है. माइग्रेशन गाइड में ज़्यादा जानकारी पढ़ें.
नई क्लास फ़ाइल जोड़कर, एक नया 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 बूट प्लग इन से Spring बूट ऐप्लिकेशन को सामान्य रूप से शुरू कर सकते हैं.
सुनिश्चित करें कि JAVA_HOME को सही JDK वर्शन पर सेट किया गया है:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
इस लैब के लिए टेस्ट छोड़ें और ऐप्लिकेशन शुरू करें:
$ ./mvnw -DskipTests spring-boot:run
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में वेब झलक आइकॉन पर क्लिक करें और पोर्ट 8080 पर झलक देखें को चुनें.
थोड़ी देर इंतज़ार करने के बाद आपको नतीजा दिखेगा:
5. सीक्रेट वापस पाएं
सीक्रेट प्रॉपर्टी की जानकारी देने के लिए, @Value
एनोटेशन का इस्तेमाल किया जा सकता है. इसके लिए, sm://
प्रीफ़िक्स का इस्तेमाल करें.
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 बूट प्लग इन से Spring बूट ऐप्लिकेशन को सामान्य रूप से शुरू कर सकते हैं. आइए, इस लैब के लिए की जाने वाली जांचों को छोड़ दें:
$ ./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 बूट प्लग इन से Spring बूट ऐप्लिकेशन को सामान्य रूप से शुरू कर सकते हैं. आइए, इस लैब के लिए की जाने वाली जांचों को छोड़ दें:
$ ./mvnw -DskipTests spring-boot:run
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में वेब झलक आइकॉन पर क्लिक करें और पोर्ट 8080 पर झलक देखें को चुनें.
सीक्रेट वैल्यू अपडेट करना
sm://greeting
शॉर्ट सिंटैक्स का इस्तेमाल करने पर, सीक्रेट का नया वर्शन अपने-आप इस्तेमाल हो जाता है. सीक्रेट का नया वर्शन बनाकर, कोड बदले बिना अपना ऐप्लिकेशन अपडेट किया जा सकता है.
नया वर्शन जोड़कर, सीक्रेट की वैल्यू अपडेट करें:
$ echo -n "Greetings" | gcloud secrets versions add greeting \ --data-file=-
ऐप्लिकेशन रीस्टार्ट करें और सीक्रेट का नया वर्शन देखें.
इस कॉन्सेप्ट को ज़्यादा से ज़्यादा लोगों तक पहुंचाया जा रहा है
यह तकनीक खास तौर पर तब काम आती है, जब Spring बूट ऐप्लिकेशन की अलग-अलग प्रोफ़ाइल का इस्तेमाल किया जा रहा हो. उदाहरण के लिए, 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 बूट ऐप्लिकेशन को सामान्य रूप से, Spring बूट प्लगिन से शुरू किया जा सकता है. हालांकि, ऐसा सिर्फ़ prod
प्रोफ़ाइल से किया जा सकता है. आइए, इस लैब के लिए की जाने वाली जांचों को छोड़ दें:
$ ./mvnw -DskipTests spring-boot:run -Dspring-boot.run.profiles=prod
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में वेब झलक आइकॉन पर क्लिक करें और पोर्ट 8080 पर झलक देखें को चुनें.
थोड़ी देर इंतज़ार करने के बाद आपको नतीजा दिखेगा:
6. खास जानकारी
इस लैब में, आपने एक ऐसी सेवा बनाई है जिसे सीक्रेट मैनेजर में सेव किए गए सीक्रेट का इस्तेमाल करके कॉन्फ़िगर किया जा सकता है. इसके लिए, sm://
से पहले Spring की प्रॉपर्टी के नाम इस्तेमाल किए जाते हैं. साथ ही, applications.properties
फ़ाइल और @Value
एनोटेशन से वैल्यू डाली जाती है.
7. बधाई हो!
आपने Java में Secret Manager API को इस्तेमाल करने का तरीका सीखा.
ज़्यादा जानें
- GCP प्रोजेक्ट के मुताबिक स्प्रिंग सीज़न: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub के डेटा स्टोर करने की जगह पर वसंत के लिए: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google Cloud पर Java: https://cloud.google.com/java/
- सीक्रेट मैनेजर में सीक्रेट के ऐक्सेस को कंट्रोल करना: https://cloud.google.com/secret-manager/docs/access-control
- सीक्रेट मैनेजर में ऑडिट लॉग इन करें: https://cloud.google.com/secret-manager/docs/audit-logging
लाइसेंस
इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.