We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

К списку статей

Secure secrets management: хранение и ротация чувствительных данных через HashiCorp Vault в Docker‑образах PHP‑ и Python‑приложений, интеграция с Kubernetes Secrets Operator

Современные веб-приложения и микросервисные архитектуры требуют надежного управления секретами – ключами API, паролями баз данных, сертификатами и другими конфиденциальными данными. Хранение секретов непосредственно в коде или конфигурационных файлах недопустимо с точки зрения безопасности и соответствия требованиям законодательства РФ, включая Федеральный закон №152-ФЗ «О персональных данных» и требования регуляторов в области информационной безопасности. В данной статье мы рассмотрим безопасный подход к управлению секретами с использованием HashiCorp Vault, интеграцию с Docker и Kubernetes, а также акцентируем внимание на аспектах, важных для соответствия российским нормативным актам.

HashiCorp Vault: Обзор

HashiCorp Vault — это инструмент для безопасного хранения и управления секретами. Он предоставляет следующие ключевые возможности:

  • Безопасное хранение: Секреты шифруются в состоянии покоя и передаются по сети.
  • Управление доступом: Детальная настройка прав доступа для каждого секрета.
  • Аудит: Полный аудит всех операций с секретами.
  • Динамические секреты: Автоматическое создание и ротация секретов (например, паролей баз данных).
  • Интеграция: Широкий спектр интеграций с различными платформами и инструментами.

Интеграция с Docker

Для PHP и Python приложений, развернутых в Docker-контейнерах, можно использовать несколько подходов для получения секретов из Vault:

Вариант 1: Vault Agent Injector

Vault Agent Injector – это паттерн, при котором Vault Agent запускается в контейнере вместе с приложением и автоматически получает секреты из Vault. Это позволяет избежать хранения учетных данных Vault в Docker-образе.

# Пример Dockerfile для PHP приложения
FROM php:8.2-apache

# Установка Vault CLI
RUN apt-get update && apt-get install -y curl

# Загрузка и настройка Vault Agent
RUN curl -Lo /usr/local/bin/vault https://releases.hashicorp.com/vault/1.15.3/vault_1.15.3_linux_amd64.zip && 
    unzip /usr/local/bin/vault && 
    mv /usr/local/bin/vault /usr/local/bin/vault

# Настройка Vault Agent (пример)
COPY vault-agent-config.hcl /etc/vault-agent.hcl

# Запуск Vault Agent
CMD ["/usr/local/bin/vault", "agent", "-config=/etc/vault-agent.hcl"]

vault-agent-config.hcl (пример):

listener "tcp" {
  address     = "127.0.0.1:8200"
  tls_disable = true
}

template "my-app-secrets" {
  sources = ["vault://secret/data/myapp"]
  prefix  = "/"
  out_put = "/app/secrets.json"
}
auto_auth {
  method "approle" {
    role_id     = "your_role_id"
    secret_id   = "your_secret_id"
  }
}

Вариант 2: Получение секретов при запуске контейнера

Скрипт, запускающийся при старте контейнера, может аутентифицироваться в Vault и извлекать необходимые секреты.

# Пример Entrypoint скрипта (Python)
#!/usr/bin/env python3

import hvac
import json
import os

VAULT_ADDR = os.environ.get('VAULT_ADDR', 'http://vault.default.svc.cluster.local:8200')
VAULT_TOKEN = os.environ.get('VAULT_TOKEN')

client = hvac.Client(url=VAULT_ADDR, token=VAULT_TOKEN)

secrets = client.secrets.kv.v2.read_secret(path='myapp')['data']

# Запись секретов в файлы или переменные окружения
with open('/app/secrets.json', 'w') as f:
    json.dump(secrets, f)

# Запуск основного приложения
os.execl('/usr/local/bin/php-fpm', 'php-fpm')

Интеграция с Kubernetes Secrets Operator

Kubernetes Secrets Operator позволяет автоматически синхронизировать секреты из Vault в Kubernetes Secrets. Это упрощает управление секретами в Kubernetes кластере и обеспечивает централизованное управление секретами.

# Пример манифеста для Vault Kubernetes Secrets Operator
apiVersion: secrets-operator.io/v1alpha1
kind: VaultStaticSecret
metadata:
  name: myapp-secrets
spec:
  secretPath: secret/data/myapp
  outputName: myapp-secrets
  type: kubernetes

После применения этого манифеста Kubernetes Secrets Operator автоматически создаст Kubernetes Secret с данными из Vault по указанному пути.

Соответствие законодательству РФ

При использовании Vault и Kubernetes Secrets Operator необходимо учитывать следующие аспекты, связанные с российским законодательством:

  • Локализация данных: Убедитесь, что Vault развернут на инфраструктуре, расположенной на территории РФ, если это требуется по законодательству.
  • Шифрование: Используйте надежные алгоритмы шифрования для защиты секретов в состоянии покоя и при передаче.
  • Аудит: Ведите подробный аудит всех операций с секретами для обеспечения прозрачности и возможности расследования инцидентов.
  • Управление доступом: Строго контролируйте доступ к секретам, предоставляя права доступа только тем пользователям и приложениям, которым они необходимы.
  • Согласие на обработку персональных данных: Если секреты содержат персональные данные, необходимо обеспечить соответствие требованиям Федерального закона №152-ФЗ «О персональных данных».

Заключение

Использование HashiCorp Vault в сочетании с Docker и Kubernetes Secrets Operator обеспечивает надежное и безопасное управление секретами в современных веб-приложениях. Важно помнить о необходимости соответствия требованиям российского законодательства при проектировании и внедрении системы управления секретами.

РыбинскЛАБ предлагает услуги по разработке и внедрению систем управления секретами на базе HashiCorp Vault, интеграции с Docker и Kubernetes, а также консультации по вопросам соответствия требованиям информационной безопасности и законодательства РФ. Мы поможем вам обеспечить надежную защиту ваших конфиденциальных данных и соответствие нормативным актам.

Материал подготовлен и отредактирован для практического применения. Перед внедрением в продакшен проверьте код и команды на своём окружении.

Поделиться материалом

Нужна сложная backend-разработка?

Проектирование архитектуры, PHP/Python backend, интеграции API, боты, автоматизация и оптимизация существующих систем.

Обсудить проект
Поддержать проект