AWS EB + nginx: обновите формат access.log, чтобы скрыть конфиденциальные параметры запроса на получение.

У меня та же проблема, что и в этом вопросе: Как не регистрировать параметр запроса get в журналах доступа nginx?

Однако, поскольку nginx настраивается через AWS, я не знаю, как изменить это при развертывании. Мне непонятно, куда идут эти конфигурации. Поддержка AWS не может помочь, так как это проблема с nginx, а не с AWS.

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

Пока все, что у меня есть, это то, что я могу изменить ./ebextensions/nginx.config в моем репозитории, который я развертываю в EB, но что нужно установить в нем, не ясно.

=================================

Итак, несколько забавных обновлений. По сути, среды AWS EB настроены с nginx.configs по умолчанию для своих экземпляров. В этих конфигурациях он включает все файлы *.config по определенному пути, включая один автоматически сгенерированный файл, который содержит директиву сервера. Все это вставляется в директиву http файла nginx.config.

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

Пока что у меня есть это для моего ./ebextensions/01_proxy.config:

files:
  "/etc/nginx/conf.d/injectObfuscation.sh":
    content: |
      # This script expects a file as input with an nginx server directive to be injected into the http directive of an nginx.config file.
      # It will make two modifications:
      # - It will create a log_format to be used when filtering the password parameter
      # - It will find the server directive and inject a location directive for the sensitive endpoint
      #   - This directive will replace the sensitive parameter with *s and use the filter log_format instead of the main log_format
      # TODO: Figure out how to do the above ^^

container_commands:
  01_update_server_directive:
    command: "./etc/nginx/conf.d/injectObfuscation.sh /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
  02_reload_nginx:
    command: "sudo service nginx reload"

Строка files: объявляет, что я создаю несколько файлов для добавления в экземпляр EC2. Здесь моя цель — создать сценарий bash для выполнения моей задачи. Мои задачи, как указано в комментариях, состоят в том, чтобы сначала добавить строку с log_format. Затем найдите строку с server{, а под ней мне нужно ввести директиву locations /my/sensitive/endpoint целиком.

Любая помощь в написании этого скрипта bash, с которым я совершенно не знаком, была бы очень признательна.


person Jake T.    schedule 14.08.2018    source источник


Ответы (1)


Моя попытка была глупой.

Мне нужно было перезаписать nginx.conf и 00_elastic_beanstalk_proxy.conf по умолчанию, как в специальной документации Node.js: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/nodejs-platform-proxy.html

Другие платформы на EB позволяют вам добавить .ebextensions/nginx/nginx.conf для перезаписи существующего nginx.conf, но процесс запуска Node выглядит иначе и игнорирует этот файл. Однако вы можете использовать конфигурацию .ebextension, чтобы создать файл по адресу /etc/nginx/nginx.conf для его замены.

Для своих целей я сделал это и изменил $request на $temp в основном формате log_format.

Для сред Node директива server находится внутри файла 00_elastic_beanstalk_proxy.conf, автоматически созданного экземпляром во время запуска. Используя пример из документации выше, я отменил это и добавил логику для запутывания нужного мне параметра. При желании это можно было бы поместить в директиву местоположения в этом перезаписанном файле. И я мог бы определить отдельный формат журнала. Но для моих целей я хотел, чтобы этот параметр не регистрировался независимо от пути.

AWS отмечает, что файлы nginx.conf и 00_elastic_beanstalk_proxy.conf по умолчанию могут меняться в зависимости от используемой версии среды узла, поэтому всегда следует извлекать файл из конкретной версии.

Одна попытка, которую я предпринял, состояла в том, чтобы переопределить только nginx.conf. Однако директиву set можно использовать только внутри location, server и еще одной директивы, которую я не могу вспомнить сразу. Недопустимо устанавливать переменную в самой директиве http.

person Jake T.    schedule 17.08.2018
comment
Я получаю сообщение об ошибке nginx о том, что имя main уже определено как log_format. Однако использование другого имени, отличного от main, работает. - person JBaczuk; 20.11.2019