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?
HTML/CSS web uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- 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.)
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.
- 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
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.
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:
Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.
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.
- 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
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:

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
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:

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
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.

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
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:

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
- GCP'de Spring projesi: http://cloud.spring.io/spring-cloud-gcp/
- GCP'de Spring GitHub deposu: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google Cloud'da Java: https://cloud.google.com/java/
- Secret Manager'da gizli anahtarlara erişimi kontrol etme: https://cloud.google.com/secret-manager/docs/access-control
- Secret Manager'da denetleme günlüğü: https://cloud.google.com/secret-manager/docs/audit-logging
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.