Как настроить mTLS в Apigee

После установки компонента apigee-mtls на каждом узле кластера его необходимо настроить и инициализировать. Для этого нужно сгенерировать пару "сертификат – ключ" и обновить файл конфигурации на компьютере администратора. Затем вы развертываете одни и те же сгенерированные файлы на всех узлах кластера и инициализируете локальный компонент apigee-mtls.

Настройка apigee-mtls (после первоначальной установки)

В этом разделе описывается, как настроить Apigee mTLS для одного центра обработки данных сразу после первоначальной установки. Информацию о том, как обновить существующую установку Apigee mTLS, можно найти в статье Как изменить существующую конфигурацию apigee-mtls. Информацию о настройке нескольких центров обработки данных можно найти в статье Как настроить несколько центров обработки данных для Apigee mTLS.

Ниже описан общий процесс настройки apigee-mtls.

  1. Обновите файл конфигурации. На компьютере администратора обновите файл конфигурации, чтобы включить настройки apigee-mtls.
  2. Установите Consul и сгенерируйте учетные данные. Установите Consul и сгенерируйте учетные данные TLS (однократно).

    Кроме того, измените файл конфигурации Apigee mTLS, чтобы:

    1. Добавьте учетные данные
    2. Определите топологию кластера

    Вы можете использовать существующие учетные данные или сгенерировать их с помощью Consul.

  3. Распространите файл конфигурации и учетные данные. Распространите одну и ту же сгенерированную пару сертификата и ключа и обновленный файл конфигурации на все узлы в кластере.
  4. Инициализируйте apigee-mtls. Инициализируйте компонент apigee-mtls на каждом узле.

Каждый из этих шагов описан в следующих разделах.

Шаг 1. Обновите файл конфигурации

В этом разделе описывается, как изменить файл конфигурации, чтобы включить свойства конфигурации mTLS. Подробную информацию о файле конфигурации можно найти в статье Как создать файл конфигурации.

После того как вы добавите в файл конфигурации свойства, связанные с mTLS, скопируйте его на все узлы в кластере, прежде чем инициализировать на них компонент apigee-mtls.

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

Чтобы обновить файл конфигурации:

  1. На компьютере администратора откройте файл конфигурации.
  2. Скопируйте следующий набор свойств конфигурации mTLS и вставьте их в файл конфигурации:
    ALL_IP="ALL_PRIVATE_IPS_IN_CLUSTER"
    ZK_MTLS_HOSTS="ZOOKEEPER_PRIVATE_IPS"
    CASS_MTLS_HOSTS="CASSANDRA_PRIVATE_IPS"
    PG_MTLS_HOSTS="POSTGRES_PRIVATE_IPS"
    RT_MTLS_HOSTS="ROUTER_PRIVATE_IPS"
    MS_MTLS_HOSTS="MGMT_SERVER_PRIVATE_IPS"
    MP_MTLS_HOSTS="MESSAGE_PROCESSOR_PRIVATE_IPS"
    QP_MTLS_HOSTS="QPID_PRIVATE_IPS"
    LDAP_MTLS_HOSTS="OPENLDAP_PRIVATE_IPS"
    MTLS_ENCAPSULATE_LDAP="y"
    
    ENABLE_SIDECAR_PROXY="y"
    ENCRYPT_DATA="BASE64_GOSSIP_MESSAGE"
    PATH_TO_CA_CERT="PATH/TO/consul-agent-ca.pem"
    PATH_TO_CA_KEY="PATH/TO/consul-agent-ca-key.pem"
    APIGEE_MTLS_NUM_DAYS_CERT_VALID_FOR="NUMBER_OF_DAYS"

    Задайте значения свойств в соответствии с вашей конфигурацией.

    В таблице ниже описаны эти свойства конфигурации.

    Свойство Описание
    ALL_IP Разделенный пробелами список IP-адресов частных хостов всех узлов в кластере.

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

    Если вы настраиваете Apigee mTLS для нескольких центров обработки данных, укажите все IP-адреса для всех хостов во всех регионах.

    LDAP_MTLS_HOSTS Частный IP-адрес хоста узла OpenLDAP в кластере.
    ZK_MTLS_HOSTS

    Разделенный пробелами список IP-адресов частных хостов, на которых размещены узлы ZooKeeper в кластере.

    Обратите внимание, что в соответствии с требованиями должно быть не менее трех узлов ZooKeeper.

    CASS_MTLS_HOSTS Разделенный пробелами список IP-адресов частных хостов, на которых размещены серверы Cassandra в кластере.
    PG_MTLS_HOSTS Разделенный пробелами список IP-адресов частных хостов, на которых размещены серверы Postgres в кластере.
    RT_MTLS_HOSTS Разделенный пробелами список IP-адресов частных хостов, на которых размещены маршрутизаторы в кластере.
    MTLS_ENCAPSULATE_LDAP Шифрует трафик LDAP между Message Processor и сервером LDAP. Должно иметь значение y.
    MS_MTLS_HOSTS Разделенный пробелами список IP-адресов частных хостов, на которых размещены узлы сервера управления в кластере.
    MP_MTLS_HOSTS Разделенный пробелами список IP-адресов частных хостов, на которых размещены Message Processor в кластере.
    QP_MTLS_HOSTS Разделенный пробелами список IP-адресов частных хостов, на которых размещены серверы Qpid в кластере.
    ENABLE_SIDECAR_PROXY Определяет, должны ли Cassandra и Postgres знать о сервисной сетке.

    Необходимо задать значение "y".

    ENCRYPT_DATA Ключ шифрования в кодировке Base64, используемый Consul . Вы создали этот ключ с помощью команды consul keygen на шаге 2.

    Это значение должно быть одинаковым для всех узлов в кластере.

    PATH_TO_CA_CERT Расположение файла сертификата на узле. Вы создали этот файл на шаге 2.

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

    Сертификат должен быть закодирован в формате X509v3.

    PATH_TO_CA_KEY Расположение файла ключа на узле. Вы создали этот файл на шаге 2.

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

    Файл ключа должен быть закодирован в формате X509v3.

    APIGEE_MTLS_NUM_DAYS_CERT_VALID_FOR

    Количество дней, в течение которых сертификат действителен, если вы создаете собственный сертификат.

    Значение по умолчанию – 365. Максимальное значение – 7865 дней (5 лет).

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

  3. Убедитесь, что свойство ENABLE_SIDECAR_PROXY имеет значение "y".
  4. Обновите IP-адреса в свойствах, связанных с хостом. При указании узлов используйте частные, а не общедоступные IP-адреса.

    На следующих шагах вы зададите значения других свойств, таких как ENCRYPT_DATA, PATH_TO_CA_CERT и PATH_TO_CA_KEY. Их значения пока не заданы.

    При изменении свойств конфигурации apigee-mtls обратите внимание на следующее:

    • Все свойства являются строками, поэтому их значения необходимо заключать в одинарные или двойные кавычки.
    • Если у значения, связанного с хостом, несколько частных IP-адресов, разделите их пробелами.
    • Для всех свойств, связанных с хостом, в файле конфигурации используйте частные IP-адреса, а не имена хостов или общедоступные IP-адреса.
    • Порядок IP-адресов в значении свойства должен быть одинаковым во всех файлах конфигурации в кластере.
  5. Сохраните изменения в файле конфигурации.

Шаг 2. Установите Consul и сгенерируйте учетные данные

В этом разделе описывается, как установить Consul и сгенерировать учетные данные.

Выберите один из следующих способов создания учетных данных:

  • Создайте собственный ЦС с помощью Consul, как описано в этом разделе (рекомендуется).
  • Как использовать учетные данные существующего ЦС с Apigee mTLS (расширенная настройка)

Об учетных данных

Учетные данные состоят из следующих элементов:

  • Сертификат. Сертификат TLS, размещенный на каждом узле.
  • Ключ. Открытый ключ TLS, размещенный на каждом узле.
  • Gossip-сообщение. Ключ шифрования в кодировке Base64.

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

Дополнительную информацию о реализации шифрования в Consul можно найти в следующих источниках:

Установите Consul и сгенерируйте учетные данные

Вы используете локальный двоичный файл Consul для создания учетных данных, которые Apigee mTLS использует для аутентификации защищенных соединений между узлами в кластере Private Cloud. Поэтому перед созданием учетных данных необходимо установить Consul на администраторском компьютере.

Чтобы установить Consul и сгенерировать учетные данные mTLS, выполните следующие действия:

  1. Скачайте двоичный файл Consul 1.6.2 с сайта HashiCorp на компьютер администратора.
  2. Распакуйте скачанный архив. Например, извлеките содержимое в папку /opt/consul/.
  3. На компьютере администратора создайте новый центр сертификации (ЦС), выполнив следующую команду:
    /opt/consul/consul tls ca create

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

    • consul-agent-ca.pem (сертификат)
    • consul-agent-ca-key.pem (ключ)

    По умолчанию файлы сертификата и ключа закодированы в формате X509v3.

    Позже вы скопируете эти файлы на все узлы кластера. Однако сейчас вам нужно только решить, где на узлах вы разместите эти файлы. Они должны находиться в одном и том же месте на каждом узле. Пример: /opt/apigee/.

  4. В файле конфигурации задайте для параметра PATH_TO_CA_CERT значение, соответствующее местоположению, в которое вы скопируете файл consul-agent-ca.pem на узле. Пример:
    PATH_TO_CA_CERT="/opt/apigee/consul-agent-ca.pem"
  5. Установите для параметра PATH_TO_CA_KEY значение, соответствующее местоположению, в которое вы скопируете файл consul-agent-ca-key.pem на узле. Пример:
    PATH_TO_CA_KEY="/opt/apigee/consul-agent-ca-key.pem"
  6. Создайте ключ шифрования для Consul, выполнив следующую команду:
    /opt/consul/consul keygen

    Consul выведет случайную строку, похожую на следующую:

    QbhgD+EXAMPLE+Y9u0742X/IqX3X429/x1cIQ+JsQvY=
  7. Скопируйте строку и задайте ее в качестве значения свойства ENCRYPT_DATA в файле конфигурации. Пример:
    ENCRYPT_DATA="QbhgD+EXAMPLE+Y9u0742X/IqX3X429/x1cIQ+JsQvY="
  8. Сохраните файл конфигурации.

Ниже приведен пример настроек mTLS в файле конфигурации (с примерами значений).

...
IP1=10.126.0.121
IP2=10.126.0.124
IP3=10.126.0.125
IP4=10.126.0.127
IP5=10.126.0.130
ALL_IP="$IP1 $IP2 $IP3 $IP4 $IP5"
LDAP_MTLS_HOSTS="$IP3"
ZK_MTLS_HOSTS="$IP3 $IP4 $IP5"
CASS_MTLS_HOSTS="$IP3 $IP4 $IP5"
PG_MTLS_HOSTS="$IP2 $IP1"
RT_MTLS_HOSTS="$IP4 $IP5"
MS_MTLS_HOSTS="$IP3"
MP_MTLS_HOSTS="$IP4 $IP5"
QP_MTLS_HOSTS="$IP2 $IP1"
ENABLE_SIDECAR_PROXY="y"
ENCRYPT_DATA="QbhgD+EXAMPLE+Y9u0742X/IqX3X429/x1cIQ+JsQvY="
PATH_TO_CA_CERT="/opt/apigee/consul-agent-ca.pem"
PATH_TO_CA_KEY="/opt/apigee/consul-agent-ca-key.pem"
...

Шаг 3. Распространите файл конфигурации и учетные данные

Скопируйте следующие файлы на узлы, на которых запущен ZooKeeper, используя такой инструмент, как scp:

  • Файл конфигурации. Скопируйте обновленную версию этого файла и замените существующую версию на всех узлах (не только на узлах, на которых запущен ZooKeeper).
  • consul-agent-ca.pem: скопируйте в место, указанное в качестве значения PATH_TO_CA_CERT в файле конфигурации.
  • consul-agent-ca-key.pem: скопируйте в место, указанное в качестве значения PATH_TO_CA_KEY в файле конфигурации.

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

Шаг 4. Инициализируйте apigee-mtls

После того как вы обновили файл конфигурации, скопировали его и учетные данные на все узлы в кластере и установили apigee-mtls на каждом узле, вы можете инициализировать компонент apigee-mtls на каждом узле.

Чтобы инициализировать apigee-mtls:

  1. Войдите в узел кластера как пользователь root. Вы можете выполнить эти действия на узлах в любом порядке.
  2. Сделайте пользователя apigee:apigee владельцем обновленного файла конфигурации, как показано в примере ниже.
    chown apigee:apigee config_file
  3. Настройте компонент apigee-mtls, выполнив следующую команду:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls setup -f config_file
  4. Чтобы проверить, правильно ли выполнена настройка, выполните следующую команду (необязательно):
    /opt/apigee/apigee-mtls/lib/actions/iptables.sh validate
  5. Запустите Apigee mTLS, выполнив следующую команду:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls start

    После установки Apigee mTLS необходимо запустить этот компонент перед любыми другими компонентами на узле.

  6. (Только для узлов Cassandra.) Для работы Cassandra в сети безопасности требуются дополнительные аргументы. В результате вам необходимо выполнить следующие команды на каждом узле Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra setup -f config_file
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra configure
    /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
  7. (Только для узлов Postgres.) Для работы Postgres в сети безопасности требуются дополнительные аргументы. В результате на узлах Postgres необходимо выполнить следующие действия:

    (только для мастер-аккаунтов)

    1. Выполните следующие команды на главном узле Postgres:
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql setup -f config_file
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql configure
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart

    (только в режиме ожидания)

    1. Создайте резервную копию данных Postgres. Чтобы установить Apigee mTLS, необходимо повторно инициализировать основные и резервные узлы, что приведет к потере данных. Дополнительную информацию можно найти в статье Как настроить репликацию master/standby для Postgres.
    2. Удалите все данные Postgres:
      rm -rf /opt/apigee/data/apigee-postgresql/pgdata
    3. Настройте и перезапустите Postgres, как показано в примере ниже.
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql setup -f config_file
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql configure
      /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart

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

  8. Запустите остальные компоненты Apigee на узле в порядке запуска, как показано в следующем примере:
    /opt/apigee/apigee-service/bin/apigee-service component_name start
  9. Повторите эту процедуру для каждого узла в кластере.
  10. (Необязательно.) Убедитесь, что apigee-mtls инициализация прошла успешно, используя один или несколько из следующих способов:
    1. Проверьте конфигурацию iptables
    2. Как проверить статус удаленного прокси-сервера
    3. Как проверить статус кворума

    Каждый из этих методов описан в разделе Проверка конфигурации.

Как изменить существующую конфигурацию apigee-mtls

Чтобы настроить существующую конфигурацию apigee-mtls, необходимо удалить и переустановить apigee-mtls.

Повторим ещё раз: при изменении существующей конфигурации mTLS Apigee:

  • Если вы измените файл конфигурации, сначала удалите apigee-mtls, а затем повторно запустите setup или configure:
    # DO THIS:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls uninstall
    
    # BEFORE YOU DO THIS:
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls setup -f file
    OR
    /opt/apigee/apigee-service/bin/apigee-service apigee-mtls configure
  • Вам нужно удалить и заново запустить setup или configure на всех узлах кластера, а не только на одном.