Проверка подлинности пользователей с использованием PKI
Вы можете настроить Elasticsearch для проверки подлинности пользователей с помощью сертификатов инфраструктуры открытых ключей (PKI). В этом случае клиенты, подключающиеся напрямую к Elasticsearch, должны предоставить сертификаты X.509. Сначала необходимо принять сертификаты для проверки подлинности на уровне SSL/TLS в Elasticsearch. Затем их можно дополнительно проверить с помощью области PKI. См. Проверка подлинности PKI для клиентов, подключающихся напрямую к Elasticsearch.
Вы также можете использовать сертификаты PKI для проверки подлинности в Kibana, однако это требует дополнительных настроек. В Elasticsearch эти настройки позволяют Kibana выступать в качестве прокси для проверки подлинности SSL/TLS и отправлять клиентские сертификаты в Elasticsearch для дополнительной проверки с помощью области PKI. См. Проверка подлинности PKI для клиентов, подключающихся к Kibana.
Проверка подлинности PKI для клиентов, подключающихся напрямую к Elasticsearch
Для использования PKI в Elasticsearch необходимо настроить область PKI, включить проверку подлинности клиентов на необходимых сетевых уровнях (транспорт или HTTP) и сопоставить имена Distinguished Names (DN) из поля Subject в сертификатах пользователей с ролями. Сопоставления создаются в файле сопоставления ролей или с помощью API сопоставления ролей.
Можно использовать комбинацию проверки подлинности PKI и имени пользователя/пароля. Например, можно включить SSL/TLS на транспортном уровне и определить область PKI для требования проверки подлинности транспортных клиентов с помощью сертификатов X.509, одновременно выполняя проверку подлинности трафика HTTP с помощью имени пользователя и пароля.
-
Добавьте конфигурацию области для области
pkiвelasticsearch.ymlв пространстве именxpack.security.authc.realms.pki. Если вы настраиваете несколько областей, вам следует явно установить атрибутorder. См. Настройки области PKI для всех параметров, которые можно установить для областиpki.Например, следующий фрагмент демонстрирует наиболее базовую конфигурацию области
pki:xpack: security: authc: realms: pki: pki1: order: 1При такой настройке любой сертификат, которому доверяет уровень SSL/TLS Elasticsearch, принимается для проверки подлинности. Имя пользователя — это общее имя (CN), извлеченное из DN в поле Subject сертификата конечного узла. Эта конфигурация недостаточна для проверки подлинности PKI в Kibana; требуются дополнительные шаги.
При настройке областей в
elasticsearch.ymlиспользуются только те области, которые вы указали для проверки подлинности. Если вы также хотите использовать областиnativeилиfile, вы должны включить их в цепочку областей. -
Необязательно: Если вы хотите использовать что-то отличное от CN поля Subject DN в качестве имени пользователя, вы можете указать регулярное выражение для извлечения желаемого имени пользователя. Регулярное выражение применяется к Subject DN.
Например, регулярное выражение в следующей конфигурации извлекает адрес электронной почты из Subject DN:
xpack: security: authc: realms: pki: pki1: username_pattern: "EMAILADDRESS=(.*?)(?:,|$)"Если регулярное выражение слишком ограничительно и не соответствует Subject DN сертификата клиента, то область не проверяет подлинность сертификата.
- Необязательно: Если вы хотите, чтобы те же пользователи также проверялись по сертификатам при подключении к Kibana, необходимо настроить область PKI Elasticsearch для разрешения делегирования. См. Проверка подлинности PKI для клиентов, подключающихся к Kibana.
- Перезапустите Elasticsearch, так как конфигурация области не перезагружается автоматически. Если вы следуете последующим шагам, вы можете оставить перезапуск на потом.
- Включить SSL/TLS.
-
Включите проверку подлинности клиентов на нужных сетевых уровнях (транспорт или HTTP).
Для использования PKI при подключении клиентов напрямую к Elasticsearch необходимо включить SSL/TLS с проверкой подлинности клиентов. То есть, необходимо установить
xpack.security.transport.ssl.client_authenticationиxpack.security.http.ssl.client_authenticationнаoptionalилиrequired. Если значение параметра равноoptional, клиенты без сертификатов могут пройти проверку подлинности с помощью других учетных данных.Когда клиенты подключаются напрямую к Elasticsearch и не проходят проверку подлинности через прокси, область PKI опирается на настройки TLS сетевого интерфейса узла. Область может быть настроена более строго, чем базовое сетевое соединение. То есть, возможно настроить узел так, что некоторые подключения будут приняты сетевым интерфейсом, но затем не пройдут проверку подлинности в области PKI. Однако обратное невозможно. Область PKI не может пройти проверку подлинности подключения, которое было отклонено сетевым интерфейсом.
В частности, это означает:
- Транспортный или HTTP-интерфейс должен запросить клиентские сертификаты, установив
client_authenticationнаoptionalилиrequired. - Интерфейс должен доверять представленному клиентом сертификату, настроив пути
truststoreилиcertificate_authorities, или установивverification_modeнаnone. - Поддерживаемые протоколы интерфейса должны быть совместимы с используемыми клиентом.
Подробное объяснение этих параметров см. в Общих настройках TLS.
Соответствующий сетевой интерфейс (транспортный или HTTP) должен доверять любому сертификату, который должен использоваться в области PKI. Однако можно настроить область PKI таким образом, чтобы она доверяла только подмножеству сертификатов, которые принимаются сетевым интерфейсом. Это полезно, когда уровень SSL/TLS доверяет клиентам с сертификатами, подписанными другим центром сертификации, отличным от того, который подписывает сертификаты ваших пользователей.
Для настройки области PKI со своим хранилищем доверия укажите параметр
truststore.path. Путь должен находиться в каталоге конфигурации Elasticsearch (ES_PATH_CONF). Например:xpack: security: authc: realms: pki: pki1: truststore: path: "pki1_truststore.jks"Если хранилище доверия защищено паролем, пароль должен быть настроен путем добавления соответствующего параметра
secure_passwordв хранилище ключей Elasticsearch. Например, следующая команда добавляет пароль для примера области выше:bin/elasticsearch-keystore add \ xpack.security.authc.realms.pki.pki1.truststore.secure_password
Параметр
certificate_authoritiesможет быть использован как альтернатива настройкеtruststore.path, когда файлы сертификатов имеют формат PEM. Параметр принимает список. Два параметра взаимоисключающие, они не могут использоваться одновременно. - Транспортный или HTTP-интерфейс должен запросить клиентские сертификаты, установив
-
Настройте роли для пользователей PKI.
Вы настраиваете роли для пользователей PKI через API сопоставления ролей или с помощью файла, хранящегося на каждом узле. Обе конфигурации объединяются. Когда пользователь проходит проверку подлинности в области PKI, права для этого пользователя представляют собой объединение всех прав, определенных ролями, которым сопоставлен пользователь.
Пользователь определяется по имени distinguished name в их сертификате. Например, следующая конфигурация сопоставления отображает
John Doeна рольuserс помощью API сопоставления ролей:PUT /_security/role_mapping/users { "roles" : [ "user" ], "rules" : { "field" : { "dn" : "cn=John Doe,ou=example,o=com" } }, "enabled": true }Имя distinguished name (DN) пользователя PKI.
В качестве альтернативы используйте файл сопоставления ролей. Например:
user: - "cn=John Doe,ou=example,o=com"
Имя роли.
Имя distinguished name (DN) пользователя PKI.
Путь к файлу по умолчанию —
ES_PATH_CONF/role_mapping.yml. Вы можете указать другой путь (который должен находиться вES_PATH_CONF) с помощью параметра областиfiles.role_mapping(например,xpack.security.authc.realms.pki.pki1.files.role_mapping).Имя distinguished name для пользователя PKI соответствует правилам именования X.500, в которых наиболее конкретные поля (например,
cnилиuid) находятся в начале имени, а наиболее общие поля (например,oилиdc) — в конце. Некоторые инструменты, такие как openssl, могут выводить имя субъекта в другом формате.Один из способов определения правильного DN для сертификата — использование API authenticate (используйте соответствующий сертификат PKI в качестве средства проверки подлинности) и проверьте поле metadata в результате. Имя distinguished name пользователя будет указано под ключом
pki_dn. Вы также можете использовать API authenticate для проверки вашего сопоставления ролей.Для получения дополнительной информации см. Сопоставление пользователей и групп с ролями.
Область PKI поддерживает дополнительные области авторизации в качестве альтернативы сопоставлению ролей.
Аутентификация PKI для клиентов, подключающихся к Kibana
По умолчанию, область PKI полагается на сетевой интерфейс узла для выполнения рукопожатия SSL/TLS и извлечения сертификата клиента. Такое поведение требует, чтобы клиенты подключались непосредственно к Elasticsearch, чтобы их SSL-соединение завершалось узлом Elasticsearch. Если аутентификация SSL/TLS должна выполняться Kibana, область PKI должна быть настроена для разрешения делегирования.
Конкретно, когда клиенты, представляющие сертификаты X.509, подключаются к Kibana, Kibana выполняет аутентификацию SSL/TLS. Затем Kibana передает цепочку сертификатов клиента (вызывая API Elasticsearch) для дальнейшей проверки областями PKI, которые были настроены для делегирования.
Для разрешения делегирования аутентификации для определенной области PKI Elasticsearch начните с настройки области для обычного случая, как подробно описано в разделе Аутентификация PKI для клиентов, подключающихся напрямую к Elasticsearch. В этом случае, при включении TLS обязательно зашифровать HTTP-взаимодействия клиентов.
Вы также должны явно настроить truststore (или, равнозначно, certificate_authorities), даже если это та же конфигурация доверия, которую вы настроили на уровне сети. Настройки xpack.security.authc.token.enabled и delegation.enabled также должны быть true. Например:
xpack:
security:
authc:
token.enabled: true
realms:
pki:
pki1:
order: 1
delegation.enabled: true
truststore:
path: "pki1_truststore.jks" После перезапуска Elasticsearch эта область может проверять делегированную аутентификацию PKI. Затем необходимо настроить Kibana для разрешения аутентификации сертификатов PKI.
Область PKI с delegation.enabled по-прежнему работает без изменений для клиентов, подключающихся напрямую к Elasticsearch. Пользователи, аутентифицированные напрямую, и пользователи, которые аутентифицированы посредством делегирования в Kibana, оба следуют тем же правилам сопоставления ролей или конфигурациям областей авторизации.
Однако, если вы используете API сопоставления ролей, вы можете различать пользователей, аутентифицированных по делегированию, и пользователей, аутентифицированных напрямую. У первых есть дополнительные поля pki_delegated_by_user и pki_delegated_by_realm в метаданных пользователя. В типичной настройке, где аутентификация делегируется Kibana, значения этих полей равны kibana и reserved соответственно. Например, следующее правило сопоставления ролей назначает роль role_for_pki1_direct всем пользователям, которые были аутентифицированы напрямую областью pki1, подключившись к Elasticsearch вместо прохождения через Kibana:
PUT /_security/role_mapping/direct_pki_only
{
"roles" : [ "role_for_pki1_direct" ],
"rules" : {
"all": [
{
"field": {"realm.name": "pki1"}
},
{
"field": {
"metadata.pki_delegated_by_user": null
}
}
]
},
"enabled": true
} | Если это поле метаданных установлено (то есть, оно не |
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/pki-realm.html