Nginx反向代理背后的Hashicorp Vault

问题描述

我正尝试在Vault中使用App角色身份验证方法Nginx代理后面使用Vault。我需要将secret_id_bound_cidrs用作角色限制之一,以便只有特定的主机才能登录和访问Vault API。我已经尝试了所有方法,最接近的方法是在Vault中使用代理协议选项。但是,当我从主机向保管库发送请求时,保管库中的remote_add被设置为托管保管库的服务器,而不是实际的客户端IP,因此验证失败。 我的Nginx.conf如下:

location /vault/
{         
proxy_set_header X-Real-Ip $remote_addr;         
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header Host $host;         
proxy_set_header REMOTE_ADDR $remote_addr;        
proxy_pass    http://vault:8200/;             
}

我的保管库配置如下: 请注意,我使用consul和Vault作为docker服务,这使我可以在这里将consul称为服务的名称。因此consul:8500

{
  "backend": {
    "consul": {
      "address": "consul:8500","path": "vault/"
    }
  },"listener": {
    "tcp":{
      "address": "0.0.0.0:8200","tls_disable": 1
    }
  },"proxy_protocol_behavior":"use_always","ui": true
}

我的角色配置如下,其中x.x.x.x是我需要允许访问的IP:

bind_secret_id             false
local_secret_ids           false
policies                   [test-policy]
secret_id_bound_cidrs      [ x.x.x.x/32]
secret_id_num_uses         0
secret_id_ttl              0s
token_bound_cidrs          []
token_explicit_max_ttl     0s
token_max_ttl              30m
token_no_default_policy    false
token_num_uses             0
token_period               0s
token_policies             [test-policy]
token_ttl                  20m
token_type                 default

有人可以提供任何有关我在这里缺少什么的帮助吗?

解决方法

proxy_protocol_behaviour字段属于listener/tcp块,但您可以单独使用它。

除此之外,我不确定100%是否确定NGINX将以正确的方式使用正确的PROXY协议-请参阅这些网站以获取更多评论: