Z tego dokumentu dowiesz się, jak włączyć szyfrowanie tajnych danych klienta (danych logowania klienta) aplikacji dewelopera przechowywanych w bazie danych Cassandra.
Omówienie
Do tej pory 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 usłudze Apigee for Private Cloud:
Encja | Szyfrowanie jest domyślnie włączone | Szyfrowanie dostępne opcjonalnie | Powiązana dokumentacja |
KVM | Nie | Tak | Zobacz informacje o szyfrowanych maszynach wirtualnych KVM. |
Tokeny dostępu OAuth | Nie | Tak | Zapoznaj się z artykułem Używanie tokenów szyfrowanych w celu zwiększenia bezpieczeństwa. |
Klucze tajne klienta aplikacji dewelopera | Nie | Tak | Aby włączyć tę funkcję, wykonaj czynności konfiguracyjne opisane w tym dokumencie. |
Aby włączyć szyfrowanie danych logowania klienta, musisz wykonać te czynności na wszystkich węzłach procesora wiadomości i serwera zarządzania:
- Utwórz magazyn kluczy, w którym będzie przechowywany klucz szyfrujący klucze (KEK). Apigee używa tego zaszyfrowanego klucza do szyfrowania tajnych kluczy potrzebnych do szyfrowania danych.
- Edytowanie właściwości konfiguracji na wszystkich serwerach zarządzających i węzłach procesora wiadomości.
- Utwórz aplikację dewelopera, aby aktywować tworzenie klucza.
- Zrestartuj węzły.
W tym dokumencie znajdziesz instrukcje wykonywania tych czynności.
Co musisz wiedzieć o funkcji szyfrowania klucza
W tym dokumencie znajdziesz instrukcje włączania funkcji KEK, która pozwala Apigee szyfrować klucze tajne używane do szyfrowania kluczy tajnych konsumentów aplikacji dewelopera, gdy są one przechowywane w spoczynku w bazie danych Cassandra.
Domyślnie wszystkie istniejące wartości w bazie danych pozostaną niezmienione (w postaci zwykłego tekstu) i będą działać tak jak do tej pory.
Jeśli wykonasz operację zapisu na niezaszyfrowanym obiekcie, zostanie on zaszyfrowany po zapisaniu operacji. Jeśli na przykład cofniesz niezaszyfrowany token, a potem go zatwierdzisz, nowo zatwierdzony token zostanie zaszyfrowany.
Bezpieczne przechowywanie kluczy
Pamiętaj, aby kopię schowku kluczy, w którym znajduje się klucz KEK, przechowywać w bezpiecznym miejscu. Zalecamy użycie własnego bezpiecznego mechanizmu do zapisania kopii magazynu kluczy. Zgodnie z instrukcjami w tym dokumencie klucze muszą być umieszczone na każdym procesorze wiadomości i węźle serwera zarządzania, gdzie lokalny plik konfiguracji może się do nich odwoływać. Ważne jest też, aby kopię magazynu kluczy przechowywać w innym miejscu, gdzie będzie można ją bezpiecznie przechowywać lub służyć jako kopia zapasowa.
Włączanie szyfrowania kluczy
Aby zaszyfrować klucz tajny klienta:
Wymagania wstępne
Zanim wykonasz czynności opisane w tym dokumencie, musisz spełnić te wymagania:
- Musisz zainstalować lub uaktualnić Apigee Edge for Private Cloud do wersji 4.50.00.10 lub nowszej.
- Musisz być administratorem Apigee Edge for Private Cloud.
Krok 1. Wygeneruj magazyn kluczy
Aby utworzyć magazyn kluczy, który będzie przechowywać klucz szyfrujący klucze (KEK):
- Wykonaj podane niżej polecenie, aby wygenerować magazyn kluczy, w którym będzie przechowywany klucz używany do szyfrowania klucza szyfrującego dane. Wpisz polecenie dokładnie tak, jak jest widoczne. (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. Użyjesz tego hasła w późniejszych sekcjach podczas konfigurowania serwera zarządzania i przetwarzacza wiadomości.
To polecenie generuje plik magazynu kluczy kekstore.p12 zawierający klucz z aliasem KEYSTORE_NAME.
- (Opcjonalnie) Upewnij się, że plik został wygenerowany prawidłowo, za pomocą tego polecenia. Jeśli plik jest poprawny, polecenie zwróci klucz z aliasem KEYSTORE_NAME:
keytool -list -keystore kekstore.p12
Praca z magazynami kluczy BCFKS w systemach operacyjnych obsługujących FIPS
Jeśli używasz Edge for Private Cloud w systemie operacyjnym obsługującym FIPS, wygeneruj magazyn kluczy typu BCFKS. Takie repozytorium kluczy można wygenerować na komputerze, który nie spełnia normy FIPS, a następnie przenieść na komputer zgodny z tą normą. Aby wygenerować magazyn kluczy, użyj tego polecenia:
keytool -genseckey -alias <KEYSTORE_NAME> -keyalg AES -keysize 256 \
-storetype BCFKS -keystore keystore.bcfks \
-providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-keypass keystorepass -storepass keystorepass
Na komputerze, na którym generujesz ten magazyn kluczy, konieczne może być skonfigurowanie dodatkowych ustawień Javy. Może być konieczne zmodyfikowanie pliku zabezpieczeń Java na komputerze (zazwyczaj znajduje się on w folderze /usr/lib/jvm/jre/lib/security/java.security). W tym pliku znajdź i zmodyfikuj te właściwości:
# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS
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 z nich.
- Skopiuj plik repozytorium kluczy wygenerowany w kroku 1 do katalogu na węźle serwera zarządzania, np.
/opt/apigee/customer/application
. Na przykład:cp certs/kekstore.p12 /opt/apigee/customer/application
- Upewnij się, że plik jest czytelny dla użytkownika
apigee
:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
chmod 400 /opt/apigee/customer/application/kekstore.p12
- 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ż dokumentację pliku z właściwościami.
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 jakKEYSTORE_PASSWORD
, w zależności od narzędzia użytego do wygenerowania magazynu kluczy. - Ponownie uruchom serwer zarządzania za pomocą 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
zwraca następujący komunikat:Checking if management-server is up: management-server is up.
- Jeśli serwery zarządzania są zainstalowane na wielu węzłach, powtórz kroki 1–4 na każdym z nich.
Krok 3. Utwórz aplikację dewelopera
Po zaktualizowaniu serwerów zarządzania musisz utworzyć aplikację dla deweloperów, aby wywołać wygenerowanie klucza służącego do szyfrowania danych logowania klienta:
- Utwórz aplikację dla programistów, aby uruchomić tworzenie klucza szyfrującego dane (KEK). Szczegółowe instrukcje znajdziesz w artykule Rejestrowanie aplikacji.
- Usuń aplikację dewelopera, jeśli chcesz. Po wygenerowaniu klucza szyfrowania nie musisz go już przechowywać.
Krok 4. Skonfiguruj procesory wiadomości
Dopóki nie włączysz szyfrowania w jednostkach przetwarzających wiadomości, żądania w czasie działania nie będą mogły przetwarzać żadnych zaszyfrowanych danych logowania.
- Skopiuj plik klucza wygenerowany w kroku 1 do katalogu w kroku procesora wiadomości, na przykład
/opt/apigee/customer/application
. Na przykład:cp certs/kekstore.p12 /opt/apigee/customer/application
- Upewnij się, że plik jest czytelny dla użytkownika
apigee
:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
- Dodaj do elementu
/opt/apigee/customer/application/message-processor.properties
te właściwości: Jeśli plik nie istnieje, utwórz go. Patrz też Dokumentacja pliku usługi.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 pole
KEK_PASSWORD
może być takie samo jakKEYSTORE_PASSWORD
w zależności od narzędzia użytego do wygenerowania magazynu kluczy. - Uruchom ponownie przetwarzacz wiadomości, używając 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 wiadomości będzie gotowy do przetwarzania wiadomości, polecenie
wait_for_ready
zwróci ten komunikat:Checking if message-processor is up: message-processor is up.
- Jeśli masz procesory wiadomości zainstalowane na wielu węzłach, powtórz kroki 1–4 na każdym z nich.
Podsumowanie
Wszystkie aplikacje dla deweloperów, które utworzysz od tej chwili, będą szyfrowane w spoczynku w bazie danych Cassandra.
Używanie zmiennych środowiskowych do właściwości konfiguracji
Możesz też ustawić poniższe właściwości konfiguracji procesora wiadomości i serwera zarządzania za pomocą zmiennych środowiskowych. Jeśli są ustawione, zmienne środowiskowe zastępują właściwości ustawione w procesorze wiadomości lub pliku konfiguracji serwera zarządzania.
conf_keymanagement_kmscred.encryption.keystore.pass= conf_keymanagement_kmscred.encryption.kek.pass=
Odpowiednie 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 wiadomości i serwera zarządzania, ponieważ zostaną one zignorowane:
conf_keymanagement_kmscred.encryption.keystore.pass conf_keymanagement_kmscred.encryption.kek.pass
Odwołania do pliku właściwości
W tej sekcji opisano właściwości konfiguracji, które musisz ustawić we wszystkich procesorach wiadomości i węzłach serwera zarządzania, zgodnie z wcześniejszymi wyjaśnieniami w tym dokumencie.
Właściwość | Domyślny | Opis |
conf_keymanagement_kmscred.encryption.enabled
|
false
|
Musi być ustawiona na true , aby można było włączyć szyfrowanie klucza.
|
conf_keymanagement_kmscred.encryption.allowFallback
|
false
|
Aby zapewnić, że istniejące poświadczenia w formie zwykłego tekstu nadal będą działać, ustaw wartość allowFallback na true .
|
conf_keymanagement_kmscred.encryption.keystore.path
|
Nie dotyczy | Podaj ścieżkę do klucza KEK w kluczu w procesorze wiadomości lub węźle serwera zarządzania. Zobacz Krok 2. Skonfiguruj serwer zarządzania i Krok 3. Skonfiguruj przetwarzacze wiadomości. |
conf_keymanagement_kmscred.encryption.kek.alias
|
Nie dotyczy | Alias, w którym przechowywany jest klucz KEK w magazynie kluczy. |
conf_keymanagement_kmscred.encryption.keystore.pass
|
Nie dotyczy | Opcjonalne, jeśli do ustawiania tych właściwości używasz zmiennych środowiskowych. Patrz też Używanie zmiennych środowiskowych we właściwościach konfiguracji. |
conf_keymanagement_kmscred.encryption.kek.pass
|
Nie dotyczy | Opcjonalne, jeśli do ustawiania tych właściwości używasz zmiennych środowiskowych. Zobacz też Używanie zmiennych środowiskowych do właściwości konfiguracji. |