Как включить автоматический mTLS с использованием istio mesh в AWS EKS?

Недавно я начал изучать и внедрять istio в кластере AWS EKS. Для настройки TLS для входящего шлюза я использовал это руководство, в котором просто предлагается добавить идентификатор ARN AWS ​​ACM в istio-ingressgateway в качестве аннотации. Итак, мне не пришлось ни использовать сертификаты для создания secret, ни использовать SDS envoyproxy.

Эта настройка завершает TLS на шлюзе, но я также хочу включить mTLS в сети для защиты связи между сервисами. Следуя их документации, Я создал эту политику для обеспечения соблюдения mTLS в пространстве имен:

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: xyz-mtls-policy
  namespace: xyz-dev
spec:
  mtls:
    mode: STRICT

Но даже после этого я вижу, что одна служба может вызывать другую службу с помощью http.

Итак, мой вопрос: как использовать сертификаты ACM для реализации mTLS в моем пространстве имен?


person Grimlock    schedule 28.09.2020    source источник
comment
Вы звоните изнутри или снаружи сетки? Если он внутри сетки, то я бы сказал, что он работает нормально, посмотрите здесь. Кроме того, посетите здесь.   -  person Jakub    schedule 29.09.2020
comment
вызов изнутри меша. Я уже ссылался на эту статью ранее, но не мог понять, как проверить эту connection_security_policy метрику. Наконец-то удалось проверить с помощью Prometheus, и он установлен на mutual_tls, хотя я не применил указанную выше политику. Я использую istio 1.6.8, думаю, он по умолчанию включает mTLS. Есть ли какой-либо четкий процесс доказательства того, что он действительно использует mTLS?   -  person Grimlock    schedule 29.09.2020
comment
Я ответил на все ваши вопросы в ответе.   -  person Jakub    schedule 29.09.2020


Ответы (1)


Если вы звоните изнутри сетки, я бы сказал, что она работает нормально, посмотрите здесь и здесь .

Взаимный TLS в Istio

Istio предлагает взаимный TLS как решение для межсетевой аутентификации.

Istio использует шаблон sidecar, что означает, что каждый контейнер приложения имеет дополнительный прокси-контейнер Envoy, работающий рядом с ним в том же модуле.

  • Когда служба получает или отправляет сетевой трафик, он всегда сначала проходит через прокси Envoy.

  • Когда mTLS включен между двумя сервисами, прокси-серверы Envoy на стороне клиента и на стороне сервера проверяют идентичность друг друга перед отправкой запросов.

  • Если проверка прошла успешно, то прокси на стороне клиента шифрует трафик и отправляет его на прокси на стороне сервера.

  • Прокси-сервер на стороне сервера расшифровывает трафик и перенаправляет его локально в фактическую службу назначения.

введите описание изображения здесь


Я использую istio 1.6.8, думаю, он по умолчанию включает mTLS.

Да, он включен по умолчанию, начиная с версии istio 1.5. Есть связанные документы об этом.

Автоматический взаимный TLS теперь включен по умолчанию. Трафик между колясками автоматически настраивается как взаимный TLS. Вы можете отключить это явно, если беспокоитесь о накладных расходах на шифрование, добавив опцию - set values.global.mtls.auto = false во время установки. Для получения дополнительных сведений см. автоматический взаимный TLS..


Есть ли какой-либо четкий процесс доказательства того, что он действительно использует mTLS?

Я бы сказал, есть 3 способа

  • Тест со стручками

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

  • Киали

Если вы хотите увидеть это наглядно, так как у киали должно быть что-то вроде замка, когда включен mtls, есть github issue по этому поводу.

введите здесь описание изображения  введите описание изображения здесь

  • Прометей

Об этом уже упоминалось в banzaicloud, и вы упомянули, что в комментариях вы можете проверить метку метрики политики безопасности подключения. Istio присваивает этой метке значение duplic_tls, если запрос действительно был зашифрован.


Дайте мне знать, если возникнут еще вопросы.

person Jakub    schedule 29.09.2020
comment
Эй, как я могу протестировать стручки вне меша? Изменить: по IP-адресу модуля, который предоставляет AWS? Или под сервисом ты имел ввиду? Если сервис, то nodeport, clusterip или loadbalancer? - person Grimlock; 29.09.2020
comment
@Grimlock На Banzaicloud есть пример тестирования с помощью curl. В документации istio для тестирования с httpbin и образцы сна. - person Jakub; 29.09.2020
comment
Да, теперь эти примеры имеют смысл. Спасибо! - person Grimlock; 29.09.2020