Включение шифрования с секретным ключом

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

Обзор

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

В следующей таблице описаны параметры шифрования хранящихся данных в Apigee для частного облака:

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

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

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

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

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

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

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

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

Храним ключи в безопасности

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

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

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

Предварительные условия

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

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

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

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

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