1. بررسی اجمالی
رازهایی مانند رمز عبور، کلیدهای API، اطلاعات حساسی هستند که باید در یک فضای ذخیرهسازی امن، رمزگذاریشده، دسترسی کنترلشده و قابل بازرسی ذخیره شوند. برخی از سیستم ها ترجیح می دهند از Vault برای ذخیره این اسرار استفاده کنند. در Google Cloud، میتوانید از Secret Manager، یک سرویس مدیریتشده، برای ذخیره امن اسرار و کنترل دسترسی به اسرار فردی با استفاده از IAM استفاده کنید.
در Spring Boot، میتوانید از Spring Cloud GCP برای دسترسی آسان به این اسرار با ارجاع به آنها به عنوان سایر ویژگیهای Spring استفاده کنید.
در این کد، شما یک راز را در Secret Manager ذخیره میکنید، سپس میکروسرویسهای ساده Spring Boot را میسازید و راز را بازیابی میکنید.
چیزی که یاد خواهید گرفت
- نحوه ایجاد یک برنامه Java Boot Spring و پیکربندی Secret Manager.
آنچه شما نیاز دارید
- یک پروژه Google Cloud
- یک مرورگر، مانند کروم یا فایرفاکس
- آشنایی با ویرایشگرهای متن استاندارد لینوکس مانند Vim، EMACs یا Nano
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با ساختن برنامه های وب HTML/CSS چگونه ارزیابی می کنید؟
تجربه خود را در استفاده از خدمات Google Cloud چگونه ارزیابی می کنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Google Cloud Shell
در حالی که خدمات Google Cloud را می توان از راه دور از لپ تاپ شما اداره کرد، در این کد لبه از Google Cloud Shell استفاده خواهیم کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر قبلاً Cloud Shell را راهاندازی نکردهاید، با یک صفحه میانی (زیر تاشو) روبرو میشوید که آن را توصیف میکند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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، ابتدا 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
4. یک سرویس Spring Boot REST جدید ایجاد کنید
پس از راه اندازی Cloud Shell، می توانید از خط فرمان برای ایجاد یک برنامه Spring Boot جدید با 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
در 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 را پیکربندی می کند، به طوری که می توانید با استفاده از یک مقدار ویژگی، با پیشوند 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
پس از شروع برنامه، روی نماد Web Preview کلیک کنید در نوار ابزار 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 Boot را به طور معمول با افزونه Spring Boot راه اندازی کنید. بیایید از آزمایش های این آزمایشگاه بگذریم:
$ ./mvnw -DskipTests spring-boot:run
پس از شروع برنامه، روی نماد Web Preview کلیک کنید در نوار ابزار 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
پس از شروع برنامه، روی نماد Web Preview کلیک کنید در نوار ابزار Cloud Shell و پیش نمایش در پورت 8080 را انتخاب کنید.
به روز رسانی مقدار مخفی
با استفاده از نحو کوتاه sm://greeting
، به طور خودکار از آخرین نسخه Secret استفاده می کنید. با ایجاد یک نسخه جدید از Secret، می توانید برنامه خود را بدون تغییر کد خود به روز کنید.
با افزودن یک نسخه جدید، مقدار Secret را به روز کنید:
$ 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
پس از شروع برنامه، روی نماد Web Preview کلیک کنید در نوار ابزار Cloud Shell و پیش نمایش در پورت 8080 را انتخاب کنید.
پس از مدت کوتاهی باید نتیجه را مشاهده کنید:
6. خلاصه
در این آزمایشگاه، سرویسی ایجاد کردهاید که میتواند با استفاده از اسرار ذخیرهشده در Secret Manager با استفاده از نام ویژگی Spring با پیشوند sm://
و تزریق مقدار از فایل applications.properties
و حاشیهنویسی @Value
پیکربندی شود.
7. تبریک می گویم!
شما یاد گرفتید که چگونه از Secret Manager API در جاوا استفاده کنید.
بیشتر بدانید
- پروژه Spring on GCP: http://cloud.spring.io/spring-cloud-gcp/
- Spring در مخزن GCP GitHub: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- جاوا در Google Cloud: https://cloud.google.com/java/
- کنترل دسترسی به اسرار در Secret Manager: https://cloud.google.com/secret-manager/docs/access-control
- حسابرسی ورود به سیستم مدیر مخفی: https://cloud.google.com/secret-manager/docs/audit-logging
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.