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

1. Genel Bakış

Şifreler ve API anahtarları gibi gizli anahtarlar, hassas bilgilerdir. Bu nedenle güvenli, şifrelenmiş, erişimi kontrollü ve denetlenebilir bir depolama alanında saklanmalıdır. 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 tek tek gizli anahtarlara erişimi kontrol etmek için yönetilen bir hizmet olan Secret Manager'ı kullanabilirsiniz.

Spring Boot'ta, bu sırlara diğer Spring özelliklerine başvurur gibi başvurarak kolayca erişmek için Spring Cloud GCP'yi kullanabilirsiniz.

Bu codelab'de Secret Manager'da bir sır depolayacak, ardından basit Spring Boot mikro hizmetleri oluşturacak ve sırrı alacaksınız.

Neler öğreneceksiniz?

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

Gerekenler

  • Google Cloud projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • Vim, EMACs veya Nano gibi standart Linux metin düzenleyicileri hakkında bilgi sahibi olmanız gerekir.

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

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

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

Yeni başlayan Orta düzey Uzman

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

Başlangıç Orta İleri

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Cloud Console'da oturum açın ve 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

Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.

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

Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Google Cloud Shell

Google Cloud hizmetleri dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak 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 'i H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ tıklayın.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmı) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:

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

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Chromebook'unuzla yapabilirsiniz.

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. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu 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>

Değilse şu 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, greeting adlı bir gizli anahtar oluşturun ve değerini Hello olarak ayarlayın:

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

Bu komut, komut satırına değeri sağlamak için STDIN kullanır. Ancak gizli değeri bir dosyaya da yerleştirebilir ve --data-file bağımsız değişkeni için dosya adını belirtebilirsiniz.

gcloud CLI'yı kullanarak tüm sırları 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>

src/main/resources/application.properties dosyasında, Spring Boot Config Data API'yi etkinleştirmek için aşağıdaki yapılandırmayı ekleyin:

spring.config.import=sm://

Bu işlem, sm:// önekiyle bir özellik değeri kullanarak sırları referans gösterebilmeniz için bir Spring Property Source yapılandırır. Örneğin, sm://greeting.

Özelliğin biçimi hakkında daha fazla bilgi için Spring Cloud GCP Secret Manager belgelerine bakın. application.properties koşulunun Spring Cloud GCP 4.x'te yeni olduğunu unutmayın. Geçiş rehberinde daha fazla bilgi edinin.

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 şekilde başlatabilirsiniz.

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

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

Bu laboratuvarda testleri atlayıp uygulamayı başlatalım:

$ ./mvnw -DskipTests spring-boot:run

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

Kısa bir süre bekledikten sonra sonucu görürsünüz:

1e9a7884ff113c14.png

5. Gizli anahtar alma

sm:// önekini kullanarak gizli özelliğe başvurmak için @Value açıklamasını kullanabilirsiniz.

HelloSecretController sınıfında, greeting değerini eklemek için ek açıklamayı kullanın:

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 şekilde başlatabilirsiniz. Bu laboratuvar için testleri atlayalım:

$ ./mvnw -DskipTests spring-boot:run

Uygulama başlatıldı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 süre bekledikten sonra sonucu görürsünüz:

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

Değeri application.properties içindeki bir özellikle de eşleyebilirsiniz:

src/main/resources/application.properties

greeting=${sm://greeting}

HelloSecretController'da, Secret Manager adı yerine daha genel olan bu özellik 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 şekilde başlatabilirsiniz. Bu laboratuvar için testleri atlayalım:

$ ./mvnw -DskipTests spring-boot:run

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

Gizli anahtar değerini güncelleme

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

Yeni bir sürüm ekleyerek gizli anahtarın değerini güncelleyin:

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

Uygulamayı yeniden başlatın. Böylece, sırrın yeni sürümünün döndürüldüğünü görürsünüz.

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

Bu kavramı 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 sırlar oluşturabilirsiniz. Ayrıca, her profilde doğru selamlama eşlemesini yapın.

greeting-prod gizli anahtarı oluşturma:

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

application-prod.properties dosyası oluşturma:

src/main/resources/application-prod.properties

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

Spring Boot uygulamasını Spring Boot eklentisiyle normal şekilde başlatabilirsiniz ancak prod profiliyle. Bu laboratuvar için testleri atlayalım:

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

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

Kısa bir süre bekledikten sonra sonucu görürsünüz:

Çalışan uygulamanın ekran görüntüsü (&quot;Merhaba Dünya!&quot; gösteriliyor)

6. Özet

Bu laboratuvarda, Spring'in sm:// ile öneklenmiş özellik adlarını kullanarak ve applications.properties dosyasından ve @Value ek açıklamalarından değeri yerleştirerek Secret Manager'da depolanan sırları 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.