स्प्रिंग बूट की मदद से, सीक्रेट मैनेजर से क्रेडेंशियल/सीक्रेट हासिल करना

1. खास जानकारी

पासवर्ड, एपीआई पासकोड जैसे सीक्रेट, संवेदनशील जानकारी होती है. इसे किसी सुरक्षित, एन्क्रिप्ट (सुरक्षित) किए गए स्टोरेज, ऐक्सेस कंट्रोल, और ऑडिट किए जा सकने वाले डिवाइस में सेव करें. कुछ सिस्टम, इन सीक्रेट को सेव करने के लिए Vault का इस्तेमाल करते हैं. Google Cloud पर, सीक्रेट मैनेजर का इस्तेमाल किया जा सकता है. यह मैनेज की जा रही सेवा है. इससे सीक्रेट को सुरक्षित तरीके से सेव किया जा सकता है और आईएएम का इस्तेमाल करके, अलग-अलग सीक्रेट का ऐक्सेस कंट्रोल किया जा सकता है.

Spring बूट में, आप Spring Cloud GCP का इस्तेमाल करके इन सीक्रेट को आसानी से ऐक्सेस कर सकते हैं. ऐसा करने के लिए, उन्हें किसी भी दूसरी Spring प्रॉपर्टी के तौर पर रेफ़र किया जा सकता है.

इस कोडलैब में, सीक्रेट मैनेजर में सीक्रेट स्टोर किया जा सकता है. इसके बाद, स्प्रिंग बूट की आसान माइक्रोसर्विस बनाई जा सकती हैं और सीक्रेट को वापस पाया जा सकता है.

आपको इनके बारे में जानकारी मिलेगी

  • स्प्रिंग बूट Java ऐप्लिकेशन बनाने और Secret Manager कॉन्फ़िगर करने का तरीका.

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट
  • ब्राउज़र, जैसे कि Chrome या Firefox
  • Vim, EMAC या Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे सिर्फ़ पढ़ें इसे पढ़ें और कसरतों को पूरा करें

एचटीएमएल/सीएसएस वेब ऐप्लिकेशन बनाने के अपने अनुभव को आप कितनी रेटिंग देंगे?

शुरुआती इंटरमीडिएट कुशल

Google Cloud की सेवाएं इस्तेमाल करने का आपका अनुभव कैसा रहा?

शुरुआती इंटरमीडिएट कुशल

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करना

  1. Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. (अगर आपके पास पहले से Gmail या G Suite खाता नहीं है, तो आपको एक खाता बनाना होगा.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

प्रोजेक्ट आईडी याद रखें. यह Google Cloud के सभी प्रोजेक्ट के लिए एक खास नाम होता है (ऊपर दिया गया नाम पहले ही ले लिया गया है और यह आपके लिए काम नहीं करेगा!). बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID के तौर पर दिखाया जाएगा.

  1. इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.

इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. "साफ़ करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है. इससे इस ट्यूटोरियल के अलावा बिलिंग की सुविधा नहीं मिलेगी. Google Cloud के नए उपयोगकर्ता, 300USD डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में हिस्सा ले सकते हैं.

Google Cloud शेल

Google Cloud की सेवाओं को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें H7JlbhKGHITmsxhQIcL प्रयोग पर क्लिक करें.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

अगर आपने Cloud Shell का इस्तेमाल पहले कभी नहीं किया है, तो आपको इसके बारे में जानकारी देने वाली एक इंटरमीडिएट स्क्रीन (पेज के फ़ोल्ड के नीचे) दिखेगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें (यह आपको फिर कभी नहीं दिखेगा). एक बार इस्तेमाल होने वाली स्क्रीन कुछ इस तरह दिखती है:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाने में मदद मिलती है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम बस किसी ब्राउज़र या आपके Chromebook से किया जा सकता है.

Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है.

  1. यह पुष्टि करने के लिए 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 टूलबार में वेब झलक आइकॉन e18df08334f0d809.png पर क्लिक करें और पोर्ट 8080 पर झलक देखें को चुनें.

थोड़ी देर इंतज़ार करने के बाद आपको नतीजा दिखेगा:

1e9a7884ff113c14.png

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 टूलबार में वेब झलक आइकॉन e18df08334f0d809.png पर क्लिक करें और पोर्ट 8080 पर झलक देखें को चुनें.

थोड़ी देर इंतज़ार करने के बाद आपको नतीजा दिखेगा:

चल रहे ऐप्लिकेशन का स्क्रीनशॉट, जो &#39;नमस्ते दुनिया!&#39; दिखा रहा है

वैल्यू को 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=-

ऐप्लिकेशन रीस्टार्ट करें और सीक्रेट का नया वर्शन देखें.

चल रहे ऐप्लिकेशन का स्क्रीनशॉट, जो &#39;Greeings World!&#39; को दिखा रहा है

इस कॉन्सेप्ट को ज़्यादा से ज़्यादा लोगों तक पहुंचाया जा रहा है

यह तकनीक खास तौर पर तब काम आती है, जब 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 पर झलक देखें को चुनें.

थोड़ी देर इंतज़ार करने के बाद आपको नतीजा दिखेगा:

चल रहे ऐप्लिकेशन का स्क्रीनशॉट, जिसमें &#39;Hola World!&#39; दिख रहा है

6. खास जानकारी

इस लैब में, आपने एक ऐसी सेवा बनाई है जिसे सीक्रेट मैनेजर में सेव किए गए सीक्रेट का इस्तेमाल करके कॉन्फ़िगर किया जा सकता है. इसके लिए, sm:// से पहले Spring की प्रॉपर्टी के नाम इस्तेमाल किए जाते हैं. साथ ही, applications.properties फ़ाइल और @Value एनोटेशन से वैल्यू डाली जाती है.

7. बधाई हो!

आपने Java में Secret Manager API को इस्तेमाल करने का तरीका सीखा.

ज़्यादा जानें

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.