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?
HTML/CSS web uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- 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.)
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.
- 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
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
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:
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
İ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.
- 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 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:
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 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:
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 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.
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 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:
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
- GCP projesinde ilkbahar: http://cloud.spring.io/spring-cloud-gcp/
- Spring'de GCP GitHub deposu: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google Cloud'da Java: https://cloud.google.com/java/
- Secret Manager'daki 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.