Włączam szyfrowanie tajnego klucza

W tym dokumencie wyjaśniono, jak włączyć szyfrowanie danych klienta (danych logowania klienta) aplikacji dewelopera przechowywanych w bazie danych Cassandra.

Przegląd

Tradycyjnie Apigee Edge dla chmury prywatnej zapewnia opcjonalne szyfrowanie danych mapy klucz-wartość (KVM) i tokenów dostępu OAuth.

W tabeli poniżej opisano opcje szyfrowania danych w spoczynku w Apigee for chmurze prywatnej:

Encja Szyfrowanie domyślnie włączone Szyfrowanie opcjonalnie dostępne Powiązana dokumentacja
KVM Nie Tak Zobacz Informacje o zaszyfrowanych maszynach wirtualnych KVM.
Tokeny dostępu OAuth Nie Tak Więcej informacji znajdziesz w sekcji Haszowanie tokenów w celu zwiększenia bezpieczeństwa.
Klucze tajne klienta aplikacji dewelopera Nie Tak Aby ją włączyć, wykonaj czynności konfiguracyjne opisane w tym dokumencie.

Aby włączyć szyfrowanie danych logowania klienta, musisz wykonać te zadania na wszystkich węzłach procesora komunikatów i serwera zarządzania:

  • utworzyć magazyn kluczy do przechowywania klucza szyfrującego klucze (KEK); Apigee używa tego zaszyfrowanego klucza do szyfrowania kluczy tajnych potrzebnych do szyfrowania danych.
  • Edytuj właściwości konfiguracji we wszystkich węzłach serwera zarządzania i procesora komunikatów.
  • Utwórz aplikację dewelopera, aby aktywować tworzenie klucza.
  • Uruchom ponownie węzły.

Te zadania są opisane w tym dokumencie.

Co musisz wiedzieć o funkcji szyfrowania kluczy

W tym dokumencie opisano, jak włączyć funkcję KEK, która umożliwia Apigee szyfrowanie kluczy tajnych używanych do szyfrowania kluczy tajnych aplikacji dewelopera, gdy są one przechowywane w bazie danych Cassandra.

Domyślnie wszystkie istniejące wartości w bazie danych pozostaną niezmienione (w postaci zwykłego tekstu) i będą nadal działać jak wcześniej.

Jeśli wykonasz operację zapisu na niezaszyfrowanej encji, zostanie ona zaszyfrowana po zapisaniu operacji. Jeśli na przykład unieważnisz niezaszyfrowany token, a później go zatwierdzisz, nowo zatwierdzony token zostanie zaszyfrowany.

Bezpieczne przechowywanie kluczy

Pamiętaj, aby przechowywać kopię magazynu kluczy, w którym znajduje się klucz KEK, w bezpiecznym miejscu. Zalecamy użycie własnego bezpiecznego mechanizmu do zapisania kopii magazynu kluczy. Zgodnie z instrukcjami podanymi w tym dokumencie magazyn kluczy musi być umieszczony na każdym procesorze komunikatów i węźle serwera zarządzania, gdzie może się do niego odwoływać lokalny plik konfiguracji. Ważne jest jednak, aby przechowywać kopię magazynu kluczy w innym miejscu, aby zapewnić jej bezpieczeństwo i mieć kopię zapasową.

Włączanie szyfrowania kluczy

Aby zaszyfrować klucz tajny klienta, wykonaj te czynności:

Wymagania wstępne

Zanim wykonasz czynności opisane w tym dokumencie, musisz spełnić te wymagania:

  • Musisz zainstalować Apigee Edge dla chmury prywatnej w wersji 4.50.00.10 lub nowszej albo uaktualnić do tej wersji.
  • Musisz być administratorem Apigee Edge dla chmury prywatnej.

Krok 1. Wygeneruj magazyn kluczy

Aby utworzyć magazyn kluczy, w którym będzie przechowywany klucz szyfrujący klucze (KEK), wykonaj te czynności:

  1. Wykonaj to polecenie, aby wygenerować magazyn kluczy, w którym będzie przechowywany klucz używany do szyfrowania klucza KEK. Wpisz polecenie dokładnie tak, jak pokazano. (Możesz podać dowolną nazwę magazynu kluczy):
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    Gdy pojawi się prośba, wpisz hasło. Będziesz używać tego hasła w dalszych sekcjach podczas konfigurowania serwera zarządzania i procesora komunikatów.

    To polecenie generuje plik magazynu kluczy kekstore.p12 zawierający klucz z aliasem KEYSTORE_NAME.

  2. (Opcjonalnie) Sprawdź, czy plik został wygenerowany prawidłowo, za pomocą tego polecenia. Jeśli plik jest prawidłowy, polecenie zwraca klucz z aliasem KEYSTORE_NAME:
    keytool -list -keystore kekstore.p12

Krok 2. Skonfiguruj serwer zarządzania

Następnie skonfiguruj serwer zarządzania. Jeśli serwery zarządzania są zainstalowane na wielu węzłach, musisz powtórzyć te czynności na każdym węźle.

  1. Skopiuj plik magazynu kluczy wygenerowany w kroku 1 do katalogu w węźle serwera zarządzania, np. /opt/apigee/customer/application. Na przykład:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Upewnij się, że plik może być odczytywany przez użytkownika apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. Dodaj do elementu /opt/apigee/customer/application/management-server.properties te właściwości. Jeśli plik nie istnieje, utwórz go. Zobacz też Dokumentacja pliku właściwości.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    Pamiętaj, że KEK_PASSWORD może być taki sam jak KEYSTORE_PASSWORD w zależności od narzędzia użytego do wygenerowania magazynu kluczy.

  4. Uruchom ponownie serwer zarządzania, używając tych poleceń:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    Gdy serwer zarządzania będzie gotowy, polecenie wait_for_ready zwróci ten komunikat:

    Checking if management-server is up: management-server is up.
  5. Jeśli serwery zarządzania są zainstalowane na wielu węzłach, powtórz kroki 1–4 na każdym węźle serwera zarządzania.

Krok 3. Utwórz aplikację dewelopera

Po zaktualizowaniu serwerów zarządzania musisz utworzyć aplikację dewelopera, aby wygenerować klucz używany do szyfrowania danych logowania klienta:

  1. Utworzyć aplikację dewelopera, aby wywołać utworzenie klucza szyfrującego klucze (KEK). Instrukcje znajdziesz w artykule Rejestrowanie aplikacji.
  2. Jeśli chcesz, usuń aplikację dewelopera. Nie musisz go zachowywać po wygenerowaniu klucza szyfrowania.

Krok 4. Skonfiguruj procesory komunikatów

Dopóki szyfrowanie nie zostanie włączone w procesorach komunikatów, żądania środowiska wykonawczego nie będą mogły przetwarzać zaszyfrowanych danych logowania.

  1. Skopiuj plik magazynu kluczy wygenerowany w kroku 1 do katalogu w węźle procesora komunikatów, np. /opt/apigee/customer/application. Na przykład:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Upewnij się, że plik może być odczytywany przez użytkownika apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. Dodaj do elementu /opt/apigee/customer/application/message-processor.properties te właściwości. Jeśli plik nie istnieje, utwórz go. Zobacz też Dokumentacja pliku właściwości.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    Pamiętaj, że KEK_PASSWORD może być taki sam jak KEYSTORE_PASSWORD w zależności od narzędzia użytego do wygenerowania magazynu kluczy.

  4. Uruchom ponownie procesor komunikatów za pomocą tych poleceń:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    Gdy procesor komunikatów jest gotowy do przetwarzania komunikatów, polecenie wait_for_ready zwraca ten komunikat:

    Checking if message-processor is up: message-processor is up.
  5. Jeśli masz procesory komunikatów zainstalowane na wielu węzłach, powtórz kroki 1–4 na każdym węźle procesora komunikatów.

Podsumowanie

Wszystkie aplikacje dewelopera, które od teraz utworzysz, będą miały tajne dane logowania zaszyfrowane w spoczynku w bazie danych Cassandra.

Używanie zmiennych środowiskowych we właściwościach konfiguracji

Możesz też ustawić te właściwości konfiguracji procesora komunikatów i serwera zarządzania za pomocą zmiennych środowiskowych. Jeśli zmienne środowiskowe są ustawione, zastępują właściwości ustawione w pliku konfiguracyjnym procesora komunikatów lub serwera zarządzania.

conf_keymanagement_kmscred.encryption.keystore.pass=
conf_keymanagement_kmscred.encryption.kek.pass=

Odpowiadające im zmienne środowiskowe to:

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

Jeśli ustawisz te zmienne środowiskowe, możesz pominąć te właściwości konfiguracji w plikach konfiguracji w węzłach procesora komunikatów i serwera zarządzania, ponieważ zostaną one zignorowane:

conf_keymanagement_kmscred.encryption.keystore.pass
conf_keymanagement_kmscred.encryption.kek.pass

Dokumentacja pliku właściwości

W tej sekcji opisano właściwości konfiguracji, które musisz ustawić we wszystkich węzłach procesora komunikatów i serwera zarządzania, jak wyjaśniono wcześniej w tym dokumencie.

Właściwość Domyślny Opis
conf_keymanagement_kmscred.encryption.enabled false Aby włączyć szyfrowanie kluczy, musisz mieć true.
conf_keymanagement_kmscred.encryption.allowFallback false Aby mieć pewność, że dotychczasowe dane logowania w formie zwykłego tekstu będą nadal działać, ustaw parametr allowFallback na true.
conf_keymanagement_kmscred.encryption.keystore.path Nie dotyczy Podaj ścieżkę do magazynu kluczy KEK w procesorze komunikatów lub węźle serwera zarządzania. Zobacz Krok 2. Skonfiguruj serwer zarządzania i Krok 3. Skonfiguruj procesory komunikatów.
conf_keymanagement_kmscred.encryption.kek.alias Nie dotyczy Alias, pod którym klucz KEK jest przechowywany w magazynie kluczy.
conf_keymanagement_kmscred.encryption.keystore.pass Nie dotyczy Opcjonalne, jeśli do ustawienia tych właściwości używasz zmiennych środowiskowych. Zobacz też Używanie zmiennych środowiskowych we właściwościach konfiguracji.
conf_keymanagement_kmscred.encryption.kek.pass Nie dotyczy Opcjonalne, jeśli do ustawienia tych właściwości używasz zmiennych środowiskowych. Zobacz też Używanie zmiennych środowiskowych we właściwościach konfiguracji.