AWS EB + nginx:更新access.log格式以混淆敏感的get请求参数

时间:2018-08-14 22:15:03

标签: amazon-web-services nginx ebextensions

我遇到的问题与此问题概述的相同:How to not log a get request parameter in the nginx access logs?

但是,由于nginx是通过AWS配置的,因此我不确定在部署时如何对其进行修改。我不清楚这些配置在哪里。 AWS支持无法提供帮助,因为这是nginx而不是AWS的问题。

任何向我指出正确方向的信息都将不胜感激。

到目前为止,我所拥有的只是可以修改部署到EB的存储库中的./ebextensions/nginx.config,但是尚不清楚需要在其中进行设置。

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

好的,所以有一些有趣的更新。基本上,AWS EB环境使用实例的默认nginx.configs进行设置。在这些配置中,它包括特定路径下的所有* .config文件,包括一个包含服务器指令的自动生成的文件。它将所有这些注入到nginx.config的http指令中。

要做可以选择完全覆盖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脚本(我完全不熟悉)的任何帮助,将非常感谢。

1 个答案:

答案 0 :(得分:0)

我的尝试很愚蠢。

我需要覆盖默认的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上创建一个文件来替换它。

出于我的目的,我这样做了,并在主log_format中将$request更改为$temp

对于Node环境,服务器伪指令存在于实例在启动过程中自动生成的00_elastic_beanstalk_proxy.conf文件中。使用上面文档中的示例,我对此进行了覆盖,并添加了逻辑来模糊需要的参数。 (可选)可以将其放置在此覆盖文件中的location指令内。我可以定义一个单独的日志格式。但是出于我的目的,无论路径如何,我都希望不记录此参数。

AWS注意,默认的nginx.conf和00_elastic_beanstalk_proxy.conf可能会根据所使用的节点环境的版本而有所不同,因此请始终从特定版本中拉取该版本。

我所做的一个尝试是仅覆盖nginx.conf。但是,set指令只能在位置,服务器和其他我不记得了的指令中使用。在http指令本身内设置变量是无效的。