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

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

Обзор

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

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

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

Чтобы включить шифрование учетных данных клиента, необходимо выполнить следующие задачи на всех узлах Message Processor и Management Server:

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

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

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

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

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

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

Безопасность ключей

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

Включение шифрования ключей

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

Требования

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

  • Вам необходимо установить или обновить Apigee Edge для Private Cloud до версии 4.50.00.10 или более поздней.
  • Вы должны быть администратором Apigee Edge для Private Cloud.

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

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

  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

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