Назад | Перейти на главную страницу

Как мне защитить токен доступа в Linux к удаленным автоматизированным хранилищам секретов, таким как Hashicorp Vault?

Кажется, есть небольшая проблема "курицы и яйца" с пароли к менеджеры паролей, такие как Hashicorp Vault для Linux.

Исследуя это для некоторых серверов Linux, кто-то умный спросил: «Если мы храним все наши секреты в службе хранения секретов, где мы храним секрет доступа к этой службе хранения секретов? В нашей службе хранения секретов?»

Я был поражен, так как нет смысла использовать отдельную службу хранения секретов, если все серверы Linux, на которых я буду хранить секреты, так или иначе, имеют свой токен доступа.

Например, если я перемещаю свои секреты в Vault, разве мне все равно не нужно хранить секреты для доступа к Hashicorp Vault где-нибудь на сервере Linux?

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

На этот вопрос может не быть ответа, и в этом случае ответ будет: «Нет, здесь нет общепринятого решения серебряной пули, проявите изобретательность, найдите свои компромиссы, бла-бла-бла»

Я хочу получить ответ на следующий конкретный вопрос:

Есть ли общепринятый способ защиты пароля от удаленного автоматизированного хранилища секретов, такого как Hashicorp Vault, на современных серверах Linux?

Очевидно, что об открытом тексте не может быть и речи.

Есть ли на это канонический ответ? Я вообще спрашиваю об этом в нужном месте? Я тоже рассматривал security.stackexchange.com, но это казалось специфичным для путь хранения секретов для серверов Linux. Я понимаю, что это может показаться слишком общим или основанным на мнении, поэтому я приветствую любые предложения по редактированию, которые могут вам понадобиться, чтобы этого избежать.

Мы смеемся, но ответ, который я получаю здесь, вполне может быть «в хранилище». : / Например, сервер Jenkins или что-то еще имеет 6-месячный отзывный пароль, который он использует для генерации одноразовых токенов, которые затем они могут использовать для получения собственного небольшого эфемерного (ограниченного сеансом) пароля, сгенерированного из Vault, который предоставляет им сегмент информации.

Что-то вроде этого, похоже, в том же духе, хотя это было бы только частью решения: Управление паролями служб с помощью Puppet

// Прежде всего, обсуждаемая здесь проблема выходит за рамки простой доставки секрета 0 или того, что они называют «безопасным введением» на языке ops.

Скорее, речь идет о сохранении однажды полученного секрета.

У меня нет серебряной пули на этот счет. Но есть несколько вариантов глубокоэшелонированной защиты:

  1. Использовать упаковка ответов для выдачи секрета.
  2. Установите ограничения CIDR вокруг токена в хранилище секретов, чтобы токен можно было использовать только с определенного набора IP-адресов, и используйте надежные протоколы, такие как PROXY (НЕ X-Forwarding), для передачи IP-адресов в хранилище секретов (например, установите token_bound_cidrs таким образом, что только одна подсеть может использовать токен.)
  3. Сохраните секрет только в памяти и заблокируйте память с помощью mlock.
  4. Если возможно, установите временные ограничения на сам секрет или даже разрешите использовать секрет только один раз.
  5. Следите за необычным использованием секрета, например обычный клиент должен предупреждать, если его одноразовый секрет не работает (потому что он уже использовался), а сервер должен предупреждать, если кто-то пытается использовать секрет из-за пределов разрешенного диапазона CIDR
  6. Здесь это своего рода выход из положения, но вы можете позволить секрету «приманки» существовать на сервере вместе с обычным секретом, если это возможно, что дает «доступ» к набору учетных данных для системы, которая просто доступ к записям и предупреждения.
  7. Требовать повторной аутентификации для каждого использования локально хранимого секрета, что будет означать, что дополнительные факторы аутентификации помимо локально хранимых секретов должны применяться при каждом использовании, например подписанные метаданные, уникальные для вычислительного экземпляра или рабочей нагрузки, или, в Vault, Approle
  8. Отключите любое кэширование диска, чтобы секрет не коснулся любого потенциально постоянного хранилища