Архитектура безопасного доступа к SonarQube


#1

На всякий случай - для тех кого донимают безопасники, дескать нельзя использовать Vanessa.Services и вообще DMZ это круто

Смотрите:

Теперь по пунктам:

Архитектура SonarQube как платформы очень простая

• Есть запускатель анализа исходников и авторов строк – это называется «Сканер»
• Есть анализатор результата анализа – это называется «Сервер анализа»

Пересылка от сканера на сервера анализа происходит на стороне сканера – пока сканер ничего не пошлет, анализ не поедет.

Сканер – находится «ближе к исходникам» то есть на вашей стороне
Сервер с активированной поддержкой 1С находится на нашей стороне

Данные на сервере лежат в двух источниках

• Объектная структура кода в ElasticSearch
• Замечания и показатели качества в PostgreSQL.Pro базе данных

Исходный код в текстовом представлении не хранится в принципе – он на сервере лежит в спецформате для удобного полнотекстового поиска.

Для безопасников будет важно что передается между сканером и сервером, это файл заархированный и зашифрован, представляющий собой Java поток. Исходники формата и «движок» передачи опубликованы тут https://github.com/SonarSource/sonarqube/tree/master/sonar-scanner-protocol/src/main

Для передачи используется на самом деле это protobuf https://github.com/SonarSource/sonarqube/tree/master/sonar-scanner-protocol/src/main/protobuf

Подобная архитектура защищает

  • от утекания исходников - GIT репозиторий остается на стороне компании
  • от атаки “посредине” - совместные протоколы VPN и HTTPS нужно еще попытаться взломать или скопроментировать одновременно

Важный момент с HTTP прокси

  • открываются только запросы на адрес https://sonar.sec.silverbulleters.org/
  • соединения разрешены только по 443 порту
  • включается автоматическая проверка сертификатов в удостоверяющем центре

такое умеет и NGINX и HAproxy и Squid и Windows Proxy - то есть это как бы штатная функциональность

P.S. Если “бодаетесь” с безопасниками - используйте данную информацию и архитектуру.


#2

Отличное описание.
ИМХО было бы удобно видеть его сразу в доке нашего продукта.