Хранилище Hashicorp за обратным прокси nginx

#authorization #nginx-reverse-proxy #hashicorp-vault #cidr

#авторизация #nginx-обратный прокси #хранилище hashicorp #cidr

Вопрос:

Я пытаюсь использовать vault за прокси-сервером nginx, используя метод аутентификации роли приложения в vault. Мне нужно применить secret_id_bound_cidrs в качестве одного из ограничений для роли, чтобы только определенные хосты могли входить в систему и получать доступ к API Vault. Я перепробовал все, и самое близкое, что у меня получилось, — это использовать параметры протокола прокси в vault. Однако, когда я отправляю запрос в vault с хоста, remote_add в vault указывается сервер, на котором размещено хранилище, а не фактический 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
  

Может кто-нибудь, пожалуйста, помочь с какими-либо указаниями на то, чего мне здесь не хватает?

Ответ №1:

proxy_protocol_behaviour Поле принадлежит listener/tcp блоку, но у вас оно есть само по себе.

Помимо этого, я не уверен на 100%, что NGINX будет использовать правильный ПРОКСИ-протокол с тем, как вы его настроили — смотрите эти сайты для получения дополнительных комментариев: