Современные веб-приложения и микросервисные архитектуры требуют надежного управления секретами – ключами 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, а также консультации по вопросам соответствия требованиям информационной безопасности и законодательства РФ. Мы поможем вам обеспечить надежную защиту ваших конфиденциальных данных и соответствие нормативным актам.