Bu dokümanda, Cassandra veritabanında depolanan geliştirici uygulaması tüketici gizli anahtarlarının (istemci kimlik bilgileri) şifrelemesinin nasıl etkinleştirileceği açıklanmaktadır.
Genel Bakış
Geleneksel olarak Apigee Edge for Private Cloud, anahtar/değer haritası (KVM) verileri ve OAuth erişim jetonları için isteğe bağlı şifreleme sağlamıştır.
Aşağıdaki tabloda, Özel Bulut için Apigee'de kullanılmayan verilerin şifreleme seçenekleri açıklanmaktadır:
Varlık | Şifreleme varsayılan olarak etkindir | Şifreleme isteğe bağlı olarak kullanılabilir | İlgili belgeler |
KVM'ler | Hayır | Evet | Şifrelenmiş KVM'ler hakkında başlıklı makaleyi inceleyin. |
OAuth erişim jetonları | Hayır | Evet | Ek güvenlik için jetonlardan karma oluşturma başlıklı makaleyi inceleyin. |
Geliştirici uygulaması tüketici sırlar | Hayır | Evet | Etkinleştirmek için bu belgedeki yapılandırma adımlarını uygulayın. |
İstemci kimlik bilgilerinin şifrelenmesini etkinleştirmek için tüm mesaj işleyici ve yönetim sunucusu düğümlerinde aşağıdaki görevleri gerçekleştirmeniz gerekir:
- Anahtar şifreleme anahtarı (KEK) depolamak için bir anahtar deposu oluşturun. Apigee, bu şifrelenmiş anahtarı verilerinizi şifrelemek için gereken gizli anahtarları şifrelemek amacıyla kullanır.
- Tüm yönetim sunucusu ve ileti işleyici düğümlerindeki yapılandırma özelliklerini düzenleyin.
- Anahtar oluşturmayı tetiklemek için bir geliştirici uygulaması oluşturun.
- Düğümleri yeniden başlatın.
Bu işlemler bu dokümanda açıklanmıştır.
Anahtar şifreleme özelliği hakkında bilmeniz gerekenler
Bu belgedeki adımlarda, Apigee'nin geliştirici uygulaması tüketici gizliliklerini şifrelemek için kullanılan gizli anahtarları Cassandra veritabanında dinlenme durumundayken şifrelemelerine olanak tanıyan KEK özelliğinin nasıl etkinleştirileceği açıklanmaktadır.
Varsayılan olarak, veritabanındaki mevcut değerler değişmeden kalır (düz metin olarak) ve eskisi gibi çalışmaya devam eder.
Şifrelenmemiş bir öğe üzerinde herhangi bir yazma işlemi gerçekleştirirseniz işlem kaydedildiğinde öğe şifrelenir. Örneğin, şifrelenmemiş bir jetonu iptal edip daha sonra onaylarsanız yeni onaylanan jeton şifrelenir.
Anahtarları güvende tutma
KEK'nin depolandığı anahtar deposunun bir kopyasını güvenli bir yerde sakladığınızdan emin olun. Anahtar deposunun bir kopyasını kaydetmek için kendi güvenli mekanizmanızı kullanmanızı öneririz. Bu belgedeki talimatlarda açıklandığı gibi, her ileti işleyiciye ve yönetim sunucusu düğümüne, yerel yapılandırma dosyasının referans verebileceği bir anahtar mağazası yerleştirilmelidir. Ancak anahtar deposunun bir kopyasını güvenli bir yerde ve yedek olarak saklamak da önemlidir.
Anahtar şifrelemeyi etkinleştirme
Tüketici gizli anahtarı şifrelemesi için aşağıdaki adımları uygulayın:
Ön koşullar
Bu belgedeki adımları uygulamadan önce şu gereksinimleri karşılamanız gerekir:
- Private Cloud için Apigee Edge 4.50.00.10 veya sonraki bir sürümü yüklemeniz ya da yükseltmeniz gerekir.
- Private Cloud için Apigee Edge yöneticisi olmanız gerekir.
1. adım: Anahtar mağazası oluşturun
Anahtar şifreleme anahtarını (KEK) saklayacak bir anahtar deposu oluşturmak için şu adımları uygulayın:
- KEK'yi şifrelemek için kullanılacak bir anahtarı depolayacak bir anahtar deposu oluşturmak üzere aşağıdaki komutu yürütün. Komutu tam olarak gösterildiği şekilde girin. (İstediğiniz anahtar deposu adını girebilirsiniz):
keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \ -keystore kekstore.p12 -storetype PKCS12
İstendiğinde bir şifre girin. Bu şifreyi, yönetim sunucusunu ve mesaj işleyiciyi yapılandırırken sonraki bölümlerde kullanacaksınız.
Bu komut, KEYSTORE_NAME takma adına sahip bir anahtar içeren kekstore.p12 anahtar deposu dosyası oluşturur.
- (İsteğe bağlı) Aşağıdaki komutu kullanarak dosyanın doğru şekilde oluşturulduğunu doğrulayın. Dosya doğruysa komut, KEYSTORE_NAME takma adına sahip bir anahtar döndürür:
keytool -list -keystore kekstore.p12
FIPS özellikli işletim sistemleri için BCFKS anahtar depolarıyla çalışma
Private Cloud için Edge'i FIPS özellikli bir işletim sisteminde kullanıyorsanız BCFKS türü bir anahtar mağazası oluşturmanız gerekir. Bu tür bir anahtar deposu, FIPS olmayan bir makinede oluşturulup FIPS uyumlu bir makineye aktarılabilir. Anahtar deposunu oluşturmak için aşağıdaki komutu kullanın:
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
Bu anahtar deposunu oluşturduğunuz makinede ek Java ayarlarını yapmanız gerekebilir. Makinenin Java güvenlik dosyasını (genellikle /usr/lib/jvm/jre/lib/security/java.security adresinde bulunur) düzenlemeniz gerekebilir. Bu dosyada aşağıdaki özellikleri bulup düzenleyin:
# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS
2. Adım: Yönetim sunucusunu yapılandırın
Ardından, yönetim sunucusunu yapılandırın. Birden fazla düğümde yönetim sunucuları yüklüyse her düğümde bu adımları tekrarlamanız gerekir.
- 1. Adım'da oluşturduğunuz anahtar deposu dosyasını yönetim sunucusu düğümündeki
/opt/apigee/customer/application
gibi bir dizine kopyalayın. Örneğin:cp certs/kekstore.p12 /opt/apigee/customer/application
- Dosyanın
apigee
kullanıcısı tarafından okunabilir olduğundan emin olun:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
chmod 400 /opt/apigee/customer/application/kekstore.p12
- Aşağıdaki özellikleri
/opt/apigee/customer/application/management-server.properties
öğesine ekleyin. Dosya mevcut değilse dosyayı oluşturun. Ayrıca Mülk dosyası referansı başlıklı makaleyi inceleyin.
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
Anahtar deposunu oluşturmak için kullanılan araca bağlı olarak
KEK_PASSWORD
değerininKEYSTORE_PASSWORD
ile aynı olabileceğini unutmayın. - Aşağıdaki komutları kullanarak yönetim sunucusunu yeniden başlatın:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready
Yönetim sunucusu hazır olduğunda
wait_for_ready
komutu aşağıdaki mesajı döndürür:Checking if management-server is up: management-server is up.
- Birden fazla düğüme yönetim sunucusu yüklediyseniz yukarıdaki 1-4 arasındaki adımları her yönetim sunucusu düğümünde tekrarlayın.
3. Adım: Geliştirici uygulaması oluşturun
Yönetim sunucuları güncellendiğine göre artık istemci kimlik bilgisi verilerini şifrelemek için kullanılan anahtarın oluşturulmasını tetiklemek üzere bir geliştirici uygulaması oluşturmanız gerekir:
- Veri şifreleme anahtarı (KEK) oluşturulmasını tetiklemek için bir geliştirici uygulaması oluşturun. Adımlar için Uygulama kaydettirme başlıklı makaleyi inceleyin.
- İsterseniz geliştirici uygulamasını silin. Şifreleme anahtarı oluşturulduktan sonra bu dosyayı saklamaya devam etmeniz gerekmez.
4. Adım: Mesaj işlemcilerini yapılandırın
Şifreleme, ileti işleyicilerde etkinleştirilene kadar çalışma zamanındaki istekler şifrelenmiş kimlik bilgilerini işleyemez.
- 1. adımda oluşturduğunuz anahtar mağazası dosyasını, mesaj işleyici düğümündeki bir dizine (ör.
/opt/apigee/customer/application
) kopyalayın. Örneğin:cp certs/kekstore.p12 /opt/apigee/customer/application
- Dosyanın
apigee
kullanıcısı tarafından okunabildiğinden emin olun:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
/opt/apigee/customer/application/message-processor.properties
alanına aşağıdaki özellikleri ekleyin. Dosya mevcut değilse dosyayı oluşturun. Mülk dosya referansı başlıklı makaleyi de inceleyin.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
KEK_PASSWORD
değerinin, anahtar deposu oluşturmak için kullanılan araca bağlı olarakKEYSTORE_PASSWORD
ile aynı olabileceğini unutmayın.- Aşağıdaki komutları kullanarak mesaj işleyiciyi yeniden başlatın:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready
Mesaj işlemcisi, mesajları işlemeye hazır olduğunda
wait_for_ready
komutu aşağıdaki mesajı döndürür:Checking if message-processor is up: message-processor is up.
- Birden fazla düğüme mesaj işleyici yüklediyseniz 1-4 arasındaki adımları her mesaj işleyici düğümünde tekrarlayın.
Özet
Bundan sonra oluşturacağınız tüm geliştirici uygulamalarının kimlik bilgisi gizliliği, Cassandra veritabanında şifrelenir.
Yapılandırma özellikleri için ortam değişkenlerini kullanma
Alternatif olarak, ortam değişkenlerini kullanarak aşağıdaki mesaj işlemci ve yönetim sunucusu yapılandırma özelliklerini ayarlayabilirsiniz. Ayarlanırsa ortam değişkenleri, mesaj işlemcisinde veya yönetim sunucusu yapılandırma dosyasında ayarlanan özellikleri geçersiz kılar.
conf_keymanagement_kmscred.encryption.keystore.pass= conf_keymanagement_kmscred.encryption.kek.pass=
Karşılık gelen ortam değişkenleri şunlardır:
export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD
Bu ortam değişkenlerini ayarlarsanız bu yapılandırma özellikleri yoksayılacağı için mesaj işleyici ve yönetim sunucusu düğümlerindeki yapılandırma dosyalarından çıkarabilirsiniz:
conf_keymanagement_kmscred.encryption.keystore.pass conf_keymanagement_kmscred.encryption.kek.pass
Mülk dosyası referansı
Bu bölümde, bu dokümanda daha önce açıklandığı gibi tüm mesaj işleyici ve yönetim sunucusu düğümlerinde ayarlamanız gereken yapılandırma özellikleri açıklanmaktadır.
Mülk | Varsayılan | Açıklama |
conf_keymanagement_kmscred.encryption.enabled
|
false
|
Anahtar şifrelemeyi etkinleştirmek için true olmalıdır.
|
conf_keymanagement_kmscred.encryption.allowFallback
|
false
|
Mevcut düz metin kimlik bilgilerinizin çalışmaya devam etmesini sağlamak için allowFallback ayarını true olarak ayarlayın.
|
conf_keymanagement_kmscred.encryption.keystore.path
|
Yok | İleti işleyici veya yönetim sunucusu düğümündeki KEK anahtar deposunun yolunu sağlayın. 2. Adım: Yönetim sunucusunu yapılandırın ve 3. Adım: İleti işleyicileri yapılandırın başlıklı makaleleri inceleyin. |
conf_keymanagement_kmscred.encryption.kek.alias
|
Yok | KEK'nin anahtar deposunda depolandığı takma ad. |
conf_keymanagement_kmscred.encryption.keystore.pass
|
Yok | Bu özellikleri ayarlamak için ortam değişkenleri kullanıyorsanız isteğe bağlıdır. Yapılandırma özellikleri için ortam değişkenlerini kullanma başlıklı makaleyi de inceleyin. |
conf_keymanagement_kmscred.encryption.kek.pass
|
Yok | Bu özellikleri ayarlamak için ortam değişkenlerini kullanıyorsanız isteğe bağlıdır. Yapılandırma özellikleri için ortam değişkenlerini kullanma başlıklı makaleyi de inceleyin. |