Spring Boot ile Secret Manager'dan Kimlik Bilgisi/Gizli Anahtar Alma

1. Genel Bakış

Şifre ve API anahtarı gibi gizli anahtarlar hassas bilgilerdir. Güvenli ve şifrelenmiş bir depolama alanında, erişim kontrollü ve denetlenebilir. Bazı sistemler bu gizli anahtarları depolamak için Apps Kasası'nı kullanmayı tercih eder. Google Cloud'da, gizli anahtarları güvenli bir şekilde depolamak ve IAM kullanarak gizli anahtarlara erişimi kontrol etmek için yönetilen bir hizmet olan Secret Manager'ı kullanabilirsiniz.

Spring Boot'ta, Spring Cloud GCP'yi kullanarak diğer Spring mülkleri olarak adlandırarak bu gizli anahtarlara kolayca erişebilirsiniz.

Bu codelab'de, Secret Manager'da bir gizli anahtar depolayacak, ardından basit Spring Boot mikro hizmetleri derleyecek ve gizli anahtarı alacaksınız.

Neler öğreneceksiniz?

  • Spring Boot Java uygulaması oluşturma ve Secret Manager'ı yapılandırma.

Gerekenler

  • Bir Google Cloud projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • Vim, EMAC veya Nano gibi standart Linux metin düzenleyicileri hakkında bilgi

Bu eğiticiden nasıl yararlanacaksınız?

Yalnızca okuma Okuyun ve alıştırmaları tamamlayın

HTML/CSS web uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

  1. Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.

Google Cloud Shell

Google Cloud hizmetleri dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da, Cloud Shell'i etkinleştir H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_UZQZZGzGzGzqzQzGLzGzGzqqLqSqLG simgesini tıklayın.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell'i daha önce hiç çalıştırmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

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

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Gizli Anahtar Yapılandırma

Secret Manager'ı kullanmak için önce API'yi etkinleştirin:

$ gcloud services enable secretmanager.googleapis.com

Ardından, Hello değerine sahip greeting adında bir gizli anahtar oluşturun:

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

Bu komut, değeri komut satırına sağlamak için STDIN yöntemini kullanır. Bununla birlikte, --data-file bağımsız değişkeni için dosya adı belirterek gizli anahtar değerini bir dosyaya yerleştirmeniz yeterlidir.

gcloud KSA'yı kullanarak tüm gizli anahtarları listeleyebilirsiniz:

$ gcloud secrets list

4. Yeni bir Spring Boot REST Hizmeti oluşturma

Cloud Shell başlatıldıktan sonra, Spring Initializr ile yeni bir Spring Boot uygulaması oluşturmak için komut satırını kullanabilirsiniz:

$ 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 içinde, Spring Cloud GCP başlangıç bağımlılığını ekleyin:

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'yi etkinleştirmek için src/main/resources/application.properties dosyasına aşağıdaki yapılandırmayı ekleyin.

spring.config.import=sm://

Bu işlem, sm:// önekine sahip bir özellik değeri (örneğin, sm://greeting) kullanarak gizli anahtarlara başvurabilmeniz için bir Spring Mülk Kaynağı yapılandırır.

Mülkün biçimi hakkında daha ayrıntılı bilgi için Spring Cloud GCP Secret Manager belgelerine göz atın. application.properties şartının Spring Cloud GCP 4.x sürümünde yeni olduğunu unutmayın. Taşıma rehberinde ayrıntılı bilgi bulabilirsiniz.

Yeni bir sınıf dosyası ekleyerek yeni bir REST denetleyicisi oluşturun:

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 uygulamasını, Spring Boot eklentisiyle normal bir şekilde başlatabilirsiniz.

JAVA_HOME öğesinin doğru JDK sürümüne ayarlandığından emin olun:

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

Bu laboratuvara yönelik testleri atlayıp uygulamayı başlatalım:

$ ./mvnw -DskipTests spring-boot:run

Uygulama başladıktan sonra Cloud Shell araç çubuğunda Web Önizlemesi simgesini e18df08334f0d809.png tıklayın ve 8080 bağlantı noktasında önizle'yi seçin.

Kısa bir beklemenin ardından sonucu görürsünüz:

1e9a7884ff113c14.png

5. Gizli Anahtar Alma

Gizli mülke referans vermek için sm:// önekini kullanarak @Value ek açıklamasını kullanabilirsiniz.

HelloSecretController sınıfında, ek açıklamayı kullanarak greeting değerini ekleyin:

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 uygulamasını, Spring Boot eklentisiyle normal bir şekilde başlatabilirsiniz. Bu laboratuvara yönelik testleri atlayalım:

$ ./mvnw -DskipTests spring-boot:run

Uygulama başladıktan sonra Cloud Shell araç çubuğunda Web Önizlemesi simgesini e18df08334f0d809.png tıklayın ve 8080 bağlantı noktasında önizle'yi seçin.

Kısa bir beklemenin ardından sonucu görürsünüz:

Çalışan uygulamanın &quot;Hello World!&quot; ifadesini gösteren ekran görüntüsü

Değeri application.properties öğesindeki bir özellikle de eşleyebilirsiniz:

src/main/resources/application.properties

greeting=${sm://greeting}

HelloSecretController'da, bir Secret Manager adı yerine bu daha genel mülk adına referans verebilirsiniz:

src/main/java/com/example/demo/HelloSecretController.java

@RestController
public class HelloSecretController {
  @Value("${greeting}")
  String greeting;
  ...
}

Spring Boot uygulamasını, Spring Boot eklentisiyle normal bir şekilde başlatabilirsiniz. Bu laboratuvara yönelik testleri atlayalım:

$ ./mvnw -DskipTests spring-boot:run

Uygulama başladıktan sonra Cloud Shell araç çubuğunda Web Önizlemesi simgesini Web önizlemesi simgesi tıklayın ve 8080 bağlantı noktasında önizle'yi seçin.

Gizli anahtar değerini güncelleme

sm://greeting kısa söz dizimini kullandığınızda otomatik olarak gizli anahtarın en son sürümünü kullanırsınız. Gizli anahtarın yeni bir sürümünü oluşturarak kodunuzu değiştirmeden uygulamanızı güncelleyebilirsiniz.

Gizli anahtarın değerini yeni bir sürüm ekleyerek güncelleyin:

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

Uygulamayı yeniden başlatın ve gizli anahtarın yeni sürümünün döndürüldüğünü görün.

Çalışan uygulamanın &#39;Greeings World!&#39; ifadesini gösteren ekran görüntüsü

Bu kavramın kapsamını genişletme

Bu teknik, özellikle farklı Spring Boot uygulama profilleri kullanıyorsanız yararlıdır. Örneğin, greeting-dev, greeting-staging, greeting-prod gibi gizli anahtarlar oluşturabilirsiniz. Ayrıca, profillerin her birinde doğru karşılama mesajlarını eşleştirin.

greeting-prod gizli anahtarı oluşturun:

$ echo -n "Hola" | \
 gcloud secrets create greeting-prod \
 --data-file=- --replication-policy=automatic

application-prod.properties dosyası oluşturun:

src/main/resources/application-prod.properties

greeting=${sm://greeting-prod}

Spring Boot uygulamasını, Spring Boot eklentisiyle normal bir şekilde ancak prod profili ile başlatabilirsiniz. Bu laboratuvara yönelik testleri atlayalım:

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

Uygulama başladıktan sonra Cloud Shell araç çubuğunda Web Önizlemesi simgesini Web önizlemesi simgesi tıklayın ve 8080 bağlantı noktasında önizle'yi seçin.

Kısa bir beklemenin ardından sonucu görürsünüz:

Çalışan uygulamanın &#39;Hola World!&#39; ifadesini gösteren ekran görüntüsü

6. Özet

Bu laboratuvarda, Spring'in sm:// ile başlayan özellik adlarını kullanıp applications.properties dosyasından ve @Value ek açıklamalarındaki değeri ekleyerek Secret Manager'da depolanan gizli anahtarları kullanarak yapılandırılabilen bir hizmet oluşturdunuz.

7. Tebrikler!

Java'da Secret Manager API'yi nasıl kullanacağınızı öğrendiniz.

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.