В этом документе рассказывается, как включить шифрование секретных кодов потребителей (учетных данных клиента) приложения разработчика, хранящихся в базе данных Cassandra.
Обзор
В Apigee Edge для частного облака традиционно предлагается дополнительное шифрование для данных карт "ключ-значение" (KVM) и токенов доступа OAuth.
В таблице ниже описаны варианты шифрования для данных, хранящихся в Apigee для частного облака.
| Объект | Шифрование включено по умолчанию | Шифрование доступно по желанию | Документация по теме |
| KVM | Нет | Да | Подробнее о зашифрованных картах KVM… |
| Токены доступа OAuth | Нет | Да | Подробнее о хешировании токенов для дополнительной безопасности… |
| Секретные ключи клиента для приложений разработчика | Нет | Да | Чтобы включить эту функцию, выполните описанные в этом документе действия по настройке. |
Чтобы включить шифрование учетных данных клиента, необходимо выполнить следующие задачи на всех узлах Message Processor и Management Server:
- Создайте хранилище ключей для хранения ключа шифрования ключа. Apigee использует этот зашифрованный ключ для шифрования секретных ключей, необходимых для шифрования ваших данных.
- Измените свойства конфигурации на всех узлах сервера управления и процессора сообщений.
- Создайте приложение для разработчиков, чтобы запустить создание ключа.
- Перезапустите узлы.
Эти задачи описаны в этом документе.
Что нужно знать о функции шифрования ключей
В этой статье описано, как включить функцию KEK, которая позволяет Apigee зашифровать секретные ключи, используемые для шифрования секретных ключей потребителей приложений разработчиков, когда они хранятся в базе данных Cassandra.
По умолчанию все существующие значения в базе данных останутся без изменений (в виде обычного текста) и будут работать как раньше.
Если вы выполните операцию записи для незашифрованного объекта, он будет зашифрован при сохранении операции. Например, если вы отзовете незашифрованный токен, а затем одобрите его, он будет зашифрован.
Безопасность ключей
Обязательно храните копию хранилища ключей, в котором находится KEK, в безопасном месте. Рекомендуем использовать собственный безопасный механизм для сохранения копии хранилища ключей. Как объясняется в инструкциях в этом документе, хранилище ключей должно быть размещено на каждом узле процессора сообщений и сервера управления, где на него может ссылаться локальный файл конфигурации. Но также важно хранить копию хранилища ключей в другом месте в качестве резервной копии.
Включение шифрования ключей
Чтобы зашифровать секретный ключ клиента, выполните следующие действия:
Требования
Прежде чем выполнять действия, описанные в этом документе, убедитесь, что соблюдены следующие требования:
- Установите или обновите Apigee Edge для частного облака до версии 4.50.00.10 или более поздней.
- Вы должны быть администратором Apigee Edge для Private Cloud.
Шаг 1. Создайте хранилище ключей
Чтобы создать хранилище ключей для хранения ключа шифрования ключа (KEK), выполните следующие действия:
- Выполните следующую команду, чтобы создать хранилище ключей, в котором будет храниться ключ, используемый для шифрования ключа шифрования ключа. Введите команду точно так, как показано. (Вы можете указать любое название хранилища ключей):
keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \ -keystore kekstore.p12 -storetype PKCS12
Введите пароль. Этот пароль понадобится вам в следующих разделах при настройке сервера управления и обработчика сообщений.
Эта команда создает файл хранилища ключей kekstore.p12, содержащий ключ с псевдонимом KEYSTORE_NAME.
- Вы можете проверить, правильно ли был создан файл, с помощью следующей команды: Если файл правильный, команда возвращает ключ с псевдонимом KEYSTORE_NAME:
keytool -list -keystore kekstore.p12
Шаг 2. Настройте сервер управления
Затем настройте сервер управления. Если серверы управления установлены на нескольких узлах, повторите эти действия на каждом узле.
- Скопируйте файл хранилища ключей, созданный на шаге 1, в каталог на узле сервера управления, например
/opt/apigee/customer/application. Пример:cp certs/kekstore.p12 /opt/apigee/customer/application
- Убедитесь, что файл доступен для чтения пользователю
apigee:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
chmod 400 /opt/apigee/customer/application/kekstore.p12
- Добавьте к свойству
/opt/apigee/customer/application/management-server.propertiesследующие свойства: Если файла нет, создайте его. Также ознакомьтесь с описанием файла свойств.
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может совпадать сKEYSTORE_PASSWORDв зависимости от инструмента, использованного для создания хранилища ключей. - Перезапустите сервер управления, используя следующие команды:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready
Когда сервер управления будет готов, команда
wait_for_readyвернет следующее сообщение:Checking if management-server is up: management-server is up.
- Если серверы управления установлены на нескольких узлах, повторите шаги 1–4 выше на каждом узле сервера управления.
Шаг 3. Создайте приложение разработчика
После обновления серверов управления необходимо создать приложение разработчика, чтобы запустить генерацию ключа, используемого для шифрования данных учетных данных клиента:
- Создайте приложение разработчика, чтобы запустить создание ключа шифрования ключа. Инструкции можно найти в разделе Регистрация приложения.
- При желании удалите приложение разработчика. После создания ключа шифрования его можно удалить.
Шаг 4. Настройте обработчики сообщений
Пока шифрование не будет включено в процессорах сообщений, запросы во время выполнения не смогут обрабатывать зашифрованные учетные данные.
- Скопируйте файл хранилища ключей, созданный на шаге 1, в каталог на узле обработчика сообщений, например
/opt/apigee/customer/application. Пример:cp certs/kekstore.p12 /opt/apigee/customer/application
- Убедитесь, что файл доступен для чтения пользователю
apigee:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
- Добавьте в
/opt/apigee/customer/application/message-processor.propertiesследующие свойства: Если файла нет, создайте его. См. также Справочник по файлу свойств.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может совпадать сKEYSTORE_PASSWORDв зависимости от инструмента, использованного для создания хранилища ключей. - Перезапустите обработчик сообщений, используя следующие команды:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready
Команда
wait_for_readyвозвращает следующее сообщение, когда обработчик сообщений готов к обработке сообщений:Checking if message-processor is up: message-processor is up.
- Если обработчики сообщений установлены на нескольких узлах, повторите шаги 1–4 на каждом узле обработчика сообщений.
Сводка
Секретные ключи всех приложений, которые вы создадите в дальнейшем, будут зашифрованы в базе данных Cassandra.
Использование переменных среды для свойств конфигурации
Вы также можете задать следующие свойства конфигурации процессора сообщений и сервера управления с помощью переменных среды. Если переменные среды заданы, они переопределяют свойства, заданные в файле конфигурации процессора сообщений или сервера управления.
conf_keymanagement_kmscred.encryption.keystore.pass= conf_keymanagement_kmscred.encryption.kek.pass=
Переменные среды:
export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD
Если вы зададите эти переменные среды, то можете не указывать эти свойства конфигурации в файлах конфигурации на узлах процессора сообщений и сервера управления, поскольку они будут игнорироваться:
conf_keymanagement_kmscred.encryption.keystore.pass conf_keymanagement_kmscred.encryption.kek.pass
Ссылка на файл объекта
В этом разделе описаны свойства конфигурации, которые необходимо задать на всех узлах обработчика сообщений и управляющего сервера, как было объяснено ранее в этом документе.
| Свойство | По умолчанию | Описание |
conf_keymanagement_kmscred.encryption.enabled
|
false
|
Чтобы включить шифрование ключей, необходимо быть true.
|
conf_keymanagement_kmscred.encryption.allowFallback
|
false
|
Чтобы существующие учетные данные в виде обычного текста продолжали работать, задайте для allowFallback значение true.
|
conf_keymanagement_kmscred.encryption.keystore.path
|
Н/Д | Укажите путь к хранилищу ключей KEK на узле процессора сообщений или сервера управления. См. Шаг 2. Настройте сервер управления и Шаг 3. Настройте обработчики сообщений. |
conf_keymanagement_kmscred.encryption.kek.alias
|
Н/Д | Псевдоним, под которым ключ шифрования ключей хранится в хранилище ключей. |
conf_keymanagement_kmscred.encryption.keystore.pass
|
Н/Д | Необязательно, если вы используете переменные среды для задания этих свойств. Также ознакомьтесь с разделом Использование переменных среды для свойств конфигурации. |
conf_keymanagement_kmscred.encryption.kek.pass
|
Н/Д | Необязательно, если вы используете переменные среды для задания этих свойств. Также ознакомьтесь с разделом Использование переменных среды для свойств конфигурации. |