Ana içeriğe geç

7.3.2.1 Vault Entegrasyonu#

Vault Nedir?#

Vault, hassas verilerin güvenli bir şekilde saklanması, yönetilmesi ve erişilmesini sağlayan bir yazılımdır. Özellikle şifreler, API anahtarları, sertifikalar gibi gizli bilgilerin korunması amacıyla kullanılır. Vault, çeşitli şifreleme teknikleri ve erişim kontrol mekanizmaları kullanarak bu verilerin güvenliğini sağlar.

Vault'un temel özellikleri şunlardır:

  • Şifreleme: Hassas veriler güçlü şifreleme algoritmaları ile korunur.
  • Kimlik Doğrulama: Kullanıcıların ve uygulamaların kimliğini doğrulamak için çeşitli kimlik doğrulama yöntemleri kullanılır.
  • Erişim Kontrolü: Hassas verilere erişim, ayrıntılı izin politikaları aracılığıyla yönetilir.
  • Gizli Bilgi Yönetimi: Şifreler, API anahtarları ve diğer gizli bilgilerin yaşam döngüsü güvenli bir şekilde yönetilir.
  • Denetim ve İzleme: Tüm erişim ve işlem faaliyetleri kaydedilir ve izlenir, böylece güvenlik ve uyumluluk sağlanır.

Vault, bu özellikleri sayesinde güvenli bir bilgi yönetimi sağlar ve siber güvenlik tehditlerine karşı güçlü bir koruma sunar. Özellikle, dinamik gizli bilgi oluşturma ve rotasyon yetenekleri ile güvenlik açıklarını en aza indirir.

Config Server ile Nasıl Kullanılır?#

Vault Konfigürasyonları#

  • Öncelikle hvl-infra adresinden vault imajı çalıştırılmalıdır.
  • Çalıştırılan vault'un arayüzüne http://localhost:8200 portundan erişilir.
  • Key Shares ve Key Threshold alanları 1 yapılarak ilerlenir. Bu alanlar oluşturulacak vault anahtarlarının kaç adet olacağı ve vault'ı açmak için kaç tanesine ihtiyaç olacağı ile ilgilidir. Detaylı bilgi Hashicorp Vault dokümantasyonlarından edinilebilir.
  • Initial root token ve key ler bir yere kaydedilmelidir veya Download keys butonu ile dosya olarak indirilebilir.
  • Unseal kısmında, indirdiğimiz dosyadaki key yazılması gerekmektedir. Bu key ile vault'ı açmış olacağız.
  • Sonraki aşamada ise giriş yapmamız gerekiyor, şuanda elimizde sadece root token olduğu için Method olarak Token seçip root token ile giriş yapıyoruz.
  • Sol taraftan Secrets Engines tıklanır. Sağ üst köşeden Enable new engine butonuna tıklanır. KV seçilir ve Path alanına kv yazılarak ilerlenir.
  • Bu alanda hvl-infra içindeki konfigürasyonlardan hangi dosya ezilmek isteniyorsa aynı isimle bir secret oluşturulmalıdır.

Dikkat

Vault üzerinde oluştururken .yml uzantısı yazılmamalıdır. Bizim örneğimiz bu değer application-database-datasource olmalıdır.

  • Bu örnekte database şifresini vault'tan alacak şekilde ezelim. Bunun için hvl-infradaki application-database-datasource.yml dosyasını ezmemiz gerekiyor. Bu dosya içinde spring.datasource.password alanında veritabanı şifresi bulunmaktadır.
  • Create secret butonuna tıklıyoruz. Path alanına dosya ismini birebir yazmalıyız. application-database-datasource olarak yazıyoruz. Ezmek isteğimiz alanı ise Secret data bölümündeki key alanına yazıyoruz. spring.datasource.password değerini yazacağız. Value olarak da myvaultdbpassword yazalım. Yandaki Add butonuna tıklayıp Save diyelim.

Config-Server Konfigürasyonları#

  • Eğer yoksa Hosts dosyasına 127.0.0.1 hvlvault eklenir.
  • hvl-infra içerisindeki config server docker-compose.yml dosyasında SPRING_PROFILES_ACTIVE alanı native,vault olarak değiştirilir. VAULT_TOKEN alanına da vault kurulumundaki root token bilgisi yazılır.
  • Bu aşamadan sonra config-server başlatılır ve veritabanı kullanan herhangi başka bir uygulama daha başlatılarak uygulama açılırken veritabanı erişim hatası alındığı görülmelidir. Çünkü vault'ta doğru olmayan bir veritabanı şifresi bulunmaktadır.

Config server varsayılan detaylı vault konfigürasyonları aşağıdaki gibidir.

spring:
  cloud:
    config:
      server:
        vault:
          host: ${VAULT_HOST:hvlvault}
          port: ${VAULT_PORT:8200}
          authentication: ${VAULT_AUTHENTICATION:token}
          token: ${VAULT_TOKEN:hvs.sCKiU0HTA34YqPTc2gwe02Fr}
          kv-version: ${VAULT_KV-VERSION:2}
          default-key: ${VAULT_DEFAULT-KEY:application}
          backend: ${VAULT_BACKEND:kv}
          profile-separator: ${VAULT_PROFILE-SEPERATOR:-}
          order: ${VAULT_ORDER:1}
      request-read-timeout: ${READ_TIMEOUT:5000}
      request-connect-timeout: ${CONNECT_TIMEOUT:5000}