Как включить шифрование секретного ключа

В этом документе рассказывается, как включить шифрование секретных кодов потребителей (учетных данных клиента) приложения разработчика, хранящихся в базе данных Cassandra.

Обзор

В Apigee Edge для частного облака традиционно предлагается дополнительное шифрование для данных карт "ключ-значение" (KVM) и токенов доступа OAuth.

В таблице ниже описаны варианты шифрования неактивных данных в Apigee для частного облака.

Объект Шифрование включено по умолчанию Шифрование доступно (необязательно) Документация по теме
KVM Нет Да Подробнее о зашифрованных значениях KVM…
Токены доступа OAuth Нет Да Подробнее о хешировании токенов для дополнительной защиты…
Секретные ключи клиента для приложений разработчика Нет Да Чтобы включить эту функцию, выполните описанные в этом документе действия по настройке.

Чтобы включить шифрование учетных данных клиента, выполните следующие задачи на всех узлах обработчика сообщений и сервера управления:

  • Создайте хранилище ключей для хранения ключа шифрования ключа. Apigee использует этот зашифрованный ключ для шифрования секретных ключей, необходимых для шифрования ваших данных.
  • Измените свойства конфигурации на всех узлах сервера управления и обработчика сообщений.
  • Создайте приложение для разработчиков, чтобы запустить создание ключа.
  • Перезапустите узлы.

Эти задачи описаны в этом документе.

Что нужно знать о функции шифрования ключей

В этой статье описано, как включить функцию KEK, которая позволяет Apigee зашифровать секретные ключи, используемые для шифрования секретных ключей потребителей приложений разработчиков, когда они хранятся в базе данных Cassandra.

По умолчанию все существующие значения в базе данных останутся без изменений (в виде обычного текста) и будут работать как раньше.

Если вы выполните операцию записи для незашифрованного объекта, он будет зашифрован при сохранении операции. Например, если вы отзовете незашифрованный токен, а затем одобрите его, новый одобренный токен будет зашифрован.

Как защитить ключи

Обязательно храните копию хранилища ключей, в котором хранится ключ шифрования ключей, в безопасном месте. Рекомендуем использовать собственный безопасный механизм для сохранения копии хранилища ключей. Как описано в инструкциях в этом документе, хранилище ключей должно быть размещено на каждом узле обработчика сообщений и сервера управления, где на него может ссылаться локальный файл конфигурации. Но также важно хранить копию хранилища ключей в другом месте в качестве резервной копии.

Как включить шифрование ключей

Чтобы зашифровать секретный ключ потребителя, выполните следующие действия:

Требования

Прежде чем выполнять описанные в этом документе действия, убедитесь, что соблюдены следующие требования:

  • Установите или обновите Apigee Edge для частного облака до версии 4.50.00.10 или более поздней.
  • Вы должны быть администратором Apigee Edge для частного облака.

Шаг 1. Создайте хранилище ключей

Чтобы создать хранилище ключей для ключа шифрования ключа, выполните следующие действия:

  1. Выполните следующую команду, чтобы создать хранилище ключей для хранения ключа, который будет использоваться для шифрования ключа шифрования ключа. Введите команду точно так, как она показана. (Вы можете указать любое название хранилища ключей):
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    Введите пароль. Этот пароль понадобится вам в следующих разделах при настройке сервера управления и обработчика сообщений.

    Эта команда создает файл хранилища ключей kekstore.p12, содержащий ключ с псевдонимом KEYSTORE_NAME.

  2. Вы можете проверить, правильно ли был создан файл, с помощью следующей команды: Если файл правильный, команда возвращает ключ с псевдонимом KEYSTORE_NAME:
    keytool -list -keystore kekstore.p12

Работа с хранилищами ключей BCFKS для операционных систем с поддержкой FIPS

Если вы используете Edge для частного облака в ОС с поддержкой FIPS, создайте хранилище ключей типа BCFKS. Такое хранилище ключей можно создать на устройстве, не соответствующем стандарту FIPS, а затем перенести на устройство, соответствующее этому стандарту. Чтобы создать хранилище ключей, используйте следующую команду:

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

Возможно, вам потребуется задать дополнительные настройки Java на компьютере, на котором вы создаете хранилище ключей. Возможно, вам потребуется изменить файл безопасности Java на компьютере (обычно он находится в каталоге /usr/lib/jvm/jre/lib/security/java.security). В этом файле найдите и измените следующие свойства:

# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS

Шаг 2. Настройте сервер управления

Затем настройте сервер управления. Если серверы управления установлены на нескольких узлах, повторите эти шаги на каждом из них.

  1. Скопируйте файл хранилища ключей, созданный на шаге 1, в каталог на узле сервера управления, например /opt/apigee/customer/application. Пример:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Убедитесь, что файл доступен для чтения пользователю apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. Добавьте к свойству /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 в зависимости от инструмента, использованного для создания хранилища ключей.

  4. Перезапустите сервер управления, используя следующие команды:
    /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.
  5. Если серверы управления установлены на нескольких узлах, повторите шаги 1–4 выше на каждом узле сервера управления.

Шаг 3. Создайте приложение для разработчиков

Теперь, когда серверы управления обновлены, вам нужно создать приложение для разработчиков, чтобы запустить генерацию ключа, используемого для шифрования данных учетных данных клиента:

  1. Создайте приложение разработчика, чтобы запустить создание ключа шифрования ключа. Инструкции можно найти в разделе Регистрация приложения.
  2. При желании удалите приложение разработчика. После создания ключа шифрования его можно удалить.

Шаг 4. Настройте обработчики сообщений

Пока шифрование не будет включено в процессорах сообщений, запросы во время выполнения не смогут обрабатывать зашифрованные учетные данные.

  1. Скопируйте файл хранилища ключей, созданный на шаге 1, в каталог на узле обработчика сообщений, например /opt/apigee/customer/application. Пример:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Убедитесь, что файл доступен для чтения пользователю apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. Добавьте к свойству /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 в зависимости от инструмента, использованного для создания хранилища ключей.

  4. Перезапустите обработчик сообщений, используя следующие команды:
    /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.
  5. Если обработчики сообщений установлены на нескольких узлах, повторите шаги 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 Н/Д Укажите путь к хранилищу ключей шифрования ключей на узле процессора сообщений или сервера управления. Подробнее о том, как настроить сервер управления и как настроить обработчики сообщений…
conf_keymanagement_kmscred.encryption.kek.alias Н/Д Псевдоним, под которым ключ шифрования ключей хранится в хранилище ключей.
conf_keymanagement_kmscred.encryption.keystore.pass Н/Д Необязательно, если вы используете переменные среды для задания этих свойств. Также ознакомьтесь с разделом Использование переменных среды для свойств конфигурации.
conf_keymanagement_kmscred.encryption.kek.pass Н/Д Необязательно, если вы используете переменные среды для задания этих свойств. Также ознакомьтесь с разделом Использование переменных среды для свойств конфигурации.