Ana içeriğe geç

7.3.1. Giriş#

Uygulama Paketi (Instances)#

Config Server docker instance'ına buradan ulaşabilirsiniz.

Varsayılan Uygulama Parametreleri (Environments)#

Değişken Adı Değeri Açıklama
SERVER_PORT 8888 Uygulamanın sunulduğu port bilgisidir.
SERVER_APP_NAME configuration-server Uygulama isim bilgisidir.
SPRING_PROFILES_ACTIVE native Aktif Spring profil(ler)i. native ile dosya sisteminden konfigürasyon okunur.
SECURITY_WEB_LOGIN_FORM_TITLE Javalt Config Server Giriş (login) formunda görüntülenecek başlık metnidir.
HVL_CLOUD_CONFIG_LOCATION /var/lib/config-server Config Server’ın konfigürasyon dosyalarını okuduğu dizin.
HVL_CLOUD_CONFIG_PROFILES default Varsayılan konfigürasyon profili/etiketi.
REQUEST_LOGGER_ENABLED false HTTP istek/yanıt loglama özelliğinin etkinliği.
READ_TIMEOUT 5000 HTTP okuma zaman aşımı (ms).
CONNECT_TIMEOUT 5000 HTTP bağlantı zaman aşımı (ms).
SWAGGER_ENABLED false Swagger UI ve API dokümantasyonunun etkinliği.
MANAGEMENT_ACCESS none Actuator yönetim uçlarının erişim seviyesi.
RESTART_ACCESS none Actuator restart uç noktasına erişim seviyesi.
SHUTDOWN_ACCESS none Actuator shutdown uç noktasına erişim seviyesi.
ENCRYPT_KEY-STORE_LOCATION classpath:keystore/cs.jks Şifreleme için kullanılan JKS dosyasının konumu.
ENCRYPT_KEY-STORE_PASSWORD HavelsaN2021@@ JKS dosyasının parolası.
ENCRYPT_KEY-STORE_ALIAS hvl-config-server-key JKS içindeki anahtarın alias bilgisi.
ENCRYPT_KEY-STORE_SECRET HavelsaN2021@@ Anahtarın gizli parolası/secret bilgisi.
VAULT_AUTHENTICATION token Vault kimlik doğrulama yöntemi.
VAULT_TOKEN hvs.sCKiU0HTA34YqPTc2gwe02Fr Vault erişimi için kullanılacak token.
VAULT_BACKEND kv Vault backend türü (örn. key-value).
EUREKA_CLIENT_ENABLED false Eureka istemci kaydının etkinliği.
SECURITY_ENABLED false Uygulama genel güvenliğinin etkinliği.
METHOD_SECURITY_ENABLED false Spring method-level güvenliğin etkinliği.
SERVER_APP_TYPE configuration Uygulama türü bilgisidir (izleme/gruplama amaçlı).

Uygulama ile ilgili tüm parametrelere buradan ulaşabilirsiniz.

Kullanım#

Kullanım için 2 temel adım mevcuttur.

  1. Config server'ın çalıştırılması.
  2. Uygulamanın config server'a bağlanarak ayağa kaldırılması.

Config Server'ın Çalıştırılması#

Config server'ı çalıştırmak için EKSEN tarafından hvl-infra projesi içinde sağlanan docker-compose dosyaları kullanılabilir. Örneğin development ortamı için sağlanan docker-compose dosyasına buradan erişilebilir.

Uygulamanın Bağlanması#

Config server çalıştırıldıktan sonra uygulamanın resource klasörüne bootstrap.yml dosyası eklenmelidir. Örnek bootstrap.yml aşağıdaki gibidir.

spring:
  config:
    import:
      - optional:configserver:${spring.cloud.config.uri}
  cloud:
    config:
      uri: ${SERVER_CONFIGURATION_REMOTE_URL:http://localhost:8888/config}
      profile: ${SERVER_CONFIGURATION_CLOUD_PROFILE:cloud-eureka,cloud-tracing,management,hvl-context,hvl-security,hvl-web-security,hvl-service,instance,kafka,swagger,apm,hvl-logger}
      label: ${SERVER_CONFIGURATION_LABEL:framework(_)spring}
      enabled: ${SERVER_CONFIGURATION_REMOTE_ENABLED:true}
      username: ${CONFIG_AUTH_USERNAME:admin}
      password: ${CONFIG_AUTH_PASSWORD:123456}

logging:
  config: ${LOGGING_CONFIG:${spring.cloud.config.uri}/${spring.application.name}/default/framework(_)log4j2(_)instance(_)logger/log4j2.yml}
  auth:
    username: ${LOGGING_AUTH_USERNAME:${spring.cloud.config.username}}
    password: ${LOGGING_AUTH_PASSWORD:${spring.cloud.config.password}}

EKSEN tarafından sağlanan config server için uyumlu değerler örnekteki gibi verilmiştir.

spring.cloud.config.uri: Config server'ın url bilgisidir.

spring.cloud.config.profile: Uygulamanın ihtiyaç duyduğu konfigürasyonlara göre bu alan ayarlanmalıdır. Buradaki değerler hvl-infra içinde bulunan konfigürasyon pathlerine karşılık gelmektedir.

spring.cloud.config.label: Profileda yazan konfigürasyonların hangi path'den okunacağı bilgisidir. Varsayılan olarak verilen değer framework(_)spring olup hvl-infra içerisinde spring konfigürasyonları path'ine karşılık gelmektedir.

logging.config: Uygulama log4j2 dosyasını config server üzerinden okuyabileceği url bilgisidir. hvl-infra içerisinde log4j2 dosyaları log4j2 pathi altında bulunmaktadır.

Public ve Secure Dosyalar#

Config server üzerinde 3 tip dosya güvenliği vardır.

  • Public
  • EKSEN Security
  • Basic Authentication

Public Dosyalar#

Config server'dan erişim engeli olmadan alınması gereken konfigürasyon dosyaları olabilir. Örneğin login ekranındaki konfigürasyonlar config server'dan alınıyorsa, bu ekranda henüz bir güvenlik olmadığından konfigürasyonu da güvenliksiz bir şekilde alınabilmelidir.

Bunun için config server'da varsayılan olarak aşağıdaki konfigürasyon yapılmıştır.

hvl:
  cloud:
    config:
      permit-paths:
        - ${spring.cloud.config.server.prefix}/public

Permit olarak verilen path'ler güvenlik önlemine takılmadan dosyalara erişim sağlanmasına imkan tanır.

Örnek bir public dosya pathi aşağıdaki gibidir;

http://localhost:8888/config/public/default/framework(_)ui(_)eksen/config.json

EKSEN Security#

UI'dan config server'a gelme ihtiyacı olduğunda ve alınan dosyanın içerisinde güvenlik gereği herkesin görmemesi gereken bir veri olduğu durumlarda kullanılacak güvenlik yapısıdır. Bu durumda basic authentication kullanılamaz çünkü UI üzerinden basic authentication ile gelinmesi, config server'ın şifre bilgisini ortaya çıkaran bir güvenlik açığına sebep olmaktadır.

Örneğin; UI tarafında kullanılan yardım portali gibi bir sistemin api key bilgisinin alınması gerekiyor ancak bu bilgi kullanıcı login olduktan sonra alınması gereken bir bilgidir. Aksi durumda bu sistemin login sayfasını açan herkes bu bilgiyi network'ü takip ederek görebilecektir.

Bunun için config server'da varsayılan olarak aşağıdaki konfigürasyon yapılmıştır.

hvl:
  cloud:
    config:
      secure-paths:
        - /default/framework/ui/eksen/secure
        - /default/framework(_)ui(_)eksen(_)secure

Secure olarak verilen path'ler EKSEN security güvenlik yapısından geçmesi gerekmektedir. Yani kullanıcının login olmuş olması ve token almış olması gerekmektedir.

Örnek bir secure dosya pathi aşağıdaki gibidir;

http://localhost:8888/config/private/default/framework(_)ui(_)eksen(_)secure/config_secure.json

Not

Bu dosya içerisindeki datanın şifrelenmesi JKS yöntemi ile yapılmış olup, dosya config server'dan alındığı durumda şifresi çözülerek gelmektedir. encryptor-shell uygulaması kullanılarak şifreleme işlemleri yapılabilir.

Basic Authentication#

Backend uygulamarı tarafından alınması gereken konfigürasyon dosyalarına basic authentication güvenliği sağlanmıştır. bootstrap.yml içindeki spring.cloud.config.username ve spring.cloud.config.password alanları ile erişim sağlanır.

Güvenlik sebebi ile production ortamlarında bu dosyalara gateway üzerinden erişim kısıtlanmıştır. Kısıtlanan pathlere hvl-infra da bulunan application-cloud-gateway.yml dosyasından ulaşılabilir.

hvl:
  cloud:
    gateway:
      request:
        restriction:
          enabled: ${HVL_REQUEST_RESTRICTION_ENABLED:false}
          paths:
            - .*/actuator(/.*)?
            - .*/config/.*framework\(_\)spring.*
            - .*/config/.*framework\(_\)log4j2.*
            - .*/config/.*framework/spring.*
            - .*/config/.*framework/log4j2.*