স্প্রিং বুট দিয়ে সিক্রেট ম্যানেজার থেকে শংসাপত্র/গোপন তথ্য পুনরুদ্ধার করা হচ্ছে

১. সংক্ষিপ্ত বিবরণ

পাসওয়ার্ড, এপিআই কী-এর মতো গোপনীয় ও সংবেদনশীল তথ্য একটি সুরক্ষিত, এনক্রিপ্টেড, অ্যাক্সেস-নিয়ন্ত্রিত এবং নিরীক্ষণযোগ্য স্টোরেজে সংরক্ষণ করা উচিত। কিছু সিস্টেম এই গোপনীয় তথ্যগুলো সংরক্ষণের জন্য ভল্ট (Vault) ব্যবহার করে থাকে। গুগল ক্লাউডে, আপনি সিক্রেট ম্যানেজার (Secret Manager) নামক একটি পরিচালিত পরিষেবা ব্যবহার করে গোপনীয় তথ্যগুলো নিরাপদে সংরক্ষণ করতে পারেন এবং আইএএম (IAM) ব্যবহার করে প্রতিটি গোপনীয় তথ্যে অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন।

Spring Boot-এ, আপনি Spring Cloud GCP ব্যবহার করে এই সিক্রেটগুলোকে অন্য যেকোনো Spring প্রপার্টির মতোই উল্লেখ করে সহজেই অ্যাক্সেস করতে পারেন।

এই কোডল্যাবে, আপনি সিক্রেট ম্যানেজারে একটি সিক্রেট সংরক্ষণ করবেন, তারপর সহজ স্প্রিং বুট মাইক্রোসার্ভিস তৈরি করবেন এবং সিক্রেটটি পুনরুদ্ধার করবেন।

আপনি যা শিখবেন

  • কিভাবে একটি Spring Boot Java অ্যাপ্লিকেশন তৈরি করতে হয় এবং Secret Manager কনফিগার করতে হয়।

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড প্রজেক্ট
  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • Vim, EMACs বা Nano-এর মতো প্রচলিত লিনাক্স টেক্সট এডিটরগুলোর সাথে পরিচিতি।

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

HTML/CSS ওয়েব অ্যাপ তৈরির অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। (যদি আপনার আগে থেকে Gmail বা G Suite অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLpGtQd5Q55

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে এটিকে পরবর্তীতে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

গুগল ক্লাউড শেল

যদিও গুগল ক্লাউড পরিষেবাগুলো আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আমরা গুগল ক্লাউড শেল ব্যবহার করব, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

আপনি যদি আগে কখনো ক্লাউড শেল চালু না করে থাকেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন (নিচে দেওয়া আছে) আপনার সামনে আসবে। যদি তাই হয়, তাহলে 'Continue'-তে ক্লিক করুন (এবং আপনি এটি আর কখনো দেখতে পাবেন না)। একবারের জন্য আসা সেই স্ক্রিনটি দেখতে এইরকম:

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

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই শুধুমাত্র একটি ব্রাউজার বা আপনার ক্রোমবুক দিয়ে করা সম্ভব।

ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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].

৩. একটি গোপনীয় তথ্য কনফিগার করুন

সিক্রেট ম্যানেজার ব্যবহার করতে, প্রথমে API সক্রিয় করুন:

$ gcloud services enable secretmanager.googleapis.com

এরপর, greeting নামে একটি সিক্রেট তৈরি করুন, যার ভ্যালু হবে Hello :

$ echo -n "Hello" | \
 gcloud secrets create greeting \
 --data-file=-

এই কমান্ডটি কমান্ড লাইনে মান সরবরাহ করার জন্য STDIN ব্যবহার করে। তবে, আপনি গোপন মানটি একটি ফাইলে রেখে --data-file আর্গুমেন্টের জন্য ফাইলের নামও নির্দিষ্ট করে দিতে পারেন।

আপনি gcloud CLI ব্যবহার করে সমস্ত গোপনীয় তথ্য তালিকাভুক্ত করতে পারেন:

$ gcloud secrets list

৪. একটি নতুন Spring Boot REST Service তৈরি করুন

ক্লাউড শেল চালু হওয়ার পরে, আপনি কমান্ড লাইন ব্যবহার করে স্প্রিং ইনিশিয়ালাইজারের সাহায্যে একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে পারেন:

$ 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 Boot Config Data API সক্রিয় করতে, src/main/resources/application.properties ফাইলে নিম্নলিখিত কনফিগারেশনটি যোগ করুন।

spring.config.import=sm://

এটি একটি Spring Property Source কনফিগার করবে, যাতে আপনি sm:// প্রিফিক্স ব্যবহার করে একটি প্রপার্টি ভ্যালুর মাধ্যমে সিক্রেট উল্লেখ করতে পারেন, যেমন, sm://greeting

প্রপার্টির ফরম্যাট সম্পর্কে আরও বিস্তারিত জানতে Spring Cloud GCP Secret Manager ডকুমেন্টেশন দেখুন। উল্লেখ্য যে, 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 Boot প্লাগইন ব্যবহার করে স্বাভাবিকভাবে Spring Boot অ্যাপ্লিকেশনটি চালু করতে পারেন।

নিশ্চিত করুন যে JAVA_HOME সঠিক JDK সংস্করণে সেট করা আছে:

$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

এই ল্যাবের পরীক্ষাগুলো বাদ দিয়ে অ্যাপ্লিকেশনটি শুরু করা যাক:

$ ./mvnw -DskipTests spring-boot:run

অ্যাপ্লিকেশনটি চালু হয়ে গেলে, ওয়েব প্রিভিউ আইকনে ক্লিক করুন। e18df08334f0d809.png ক্লাউড শেল টুলবারে এবং পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন।

কিছুক্ষণ অপেক্ষা করার পর আপনি ফলাফল দেখতে পাবেন:

1e9a7884ff113c14.png

৫. একটি গোপন তথ্য উদ্ধার করুন

আপনি 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

অ্যাপ্লিকেশনটি চালু হয়ে গেলে, ওয়েব প্রিভিউ আইকনে ক্লিক করুন। e18df08334f0d809.png ক্লাউড শেল টুলবারে এবং পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন।

কিছুক্ষণ অপেক্ষা করার পর আপনি ফলাফল দেখতে পাবেন:

চলমান অ্যাপ্লিকেশনটির স্ক্রিনশট, যেখানে 'Hello World!' দেখা যাচ্ছে।

আপনি application.properties এর কোনো প্রপার্টিতে ভ্যালুটি ম্যাপ করতে পারেন:

src/main/resources/application.properties

greeting=${sm://greeting}

HelloSecretController-এ, আপনি সিক্রেট ম্যানেজার নামের পরিবর্তে এই আরও সাধারণ প্রপার্টি নামটি উল্লেখ করতে পারেন:

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

অ্যাপ্লিকেশনটি চালু হয়ে গেলে, ওয়েব প্রিভিউ আইকনে ক্লিক করুন। ওয়েব প্রিভিউ আইকন ক্লাউড শেল টুলবারে এবং পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন।

গোপন মান আপডেট করা হচ্ছে

sm://greeting সংক্ষিপ্ত সিনট্যাক্সটি ব্যবহার করে, আপনি স্বয়ংক্রিয়ভাবে সিক্রেটের সর্বশেষ সংস্করণটি ব্যবহার করেন। সিক্রেটের একটি নতুন সংস্করণ তৈরি করার মাধ্যমে, আপনি আপনার কোড পরিবর্তন না করেই অ্যাপ্লিকেশনটি আপডেট করতে পারেন।

একটি নতুন সংস্করণ যোগ করে গোপনীয় তথ্যের মান আপডেট করুন:

$ echo -n "Greetings" |
 gcloud secrets versions add greeting \
 --data-file=-

অ্যাপ্লিকেশনটি পুনরায় চালু করুন এবং দেখুন সিক্রেটটির নতুন সংস্করণটি ফেরত আসছে কিনা।

চলমান অ্যাপ্লিকেশনটির স্ক্রিনশট, যেখানে 'Greeings World!' দেখা যাচ্ছে।

এই ধারণাটি প্রসারিত করা

এই কৌশলটি বিশেষ করে তখন কাজে আসে যখন আপনি বিভিন্ন 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 প্লাগইন ব্যবহার করে prod প্রোফাইল দিয়ে Spring Boot অ্যাপ্লিকেশনটি স্বাভাবিকভাবে চালু করতে পারেন। এই ল্যাবের জন্য টেস্টগুলো বাদ দেওয়া যাক:

$ ./mvnw -DskipTests spring-boot:run -Dspring-boot.run.profiles=prod

অ্যাপ্লিকেশনটি চালু হয়ে গেলে, ওয়েব প্রিভিউ আইকনে ক্লিক করুন। ওয়েব প্রিভিউ আইকন ক্লাউড শেল টুলবারে এবং পোর্ট ৮০৮০-তে প্রিভিউ নির্বাচন করুন।

কিছুক্ষণ অপেক্ষা করার পর আপনি ফলাফল দেখতে পাবেন:

চলমান অ্যাপ্লিকেশনটির স্ক্রিনশট, যেখানে 'Hola World!' দেখা যাচ্ছে।

৬. সারসংক্ষেপ

এই ল্যাবে, আপনি এমন একটি সার্ভিস তৈরি করেছেন যা সিক্রেট ম্যানেজারে সংরক্ষিত সিক্রেট ব্যবহার করে কনফিগার করা যায়। এর জন্য আপনি Spring-এর প্রপার্টি নামের আগে sm:// যুক্ত করেছেন এবং applications.properties ফাইল ও @Value অ্যানোটেশন থেকে ভ্যালু ইনজেক্ট করেছেন।

৭. অভিনন্দন!

আপনি জাভাতে সিক্রেট ম্যানেজার এপিআই (Secret Manager API) ব্যবহার করতে শিখেছেন।

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।