Secrets Management (Управление секретами)

⌘K

Secrets Management (Управление секретами)

Secrets Management — это системный подход к защите, хранению, передаче и использованию конфиденциальной информации в ИТ-инфраструктуре. Секретами называют чувствительные данные, такие как:

Утечка таких данных может привести к взлому, несанкционированному доступу к системам, потере данных и серьёзным репутационным и юридическим последствиям. Поэтому управление секретами — обязательный элемент стратегии безопасности любой современной ИТ-системы.


Основные задачи Secrets Management

  • Хранение — защита секретов в зашифрованном виде, с контролем доступа;
  • Ротация — автоматическая или ручная смена ключей, токенов, паролей;
  • Доступ — выдача секретов приложениям и пользователям по принципу минимальных прав;
  • Аудит — ведение логов доступа к секретам для анализа и соответствия требованиям;
  • Интеграция — работа с CI/CD, контейнерами, сервисами в Kubernetes и облачных платформах.

Популярные инструменты управления секретами

ИнструментОсобенности
HashiCorp VaultЦентрализованное решение с поддержкой dynamic secrets, PKI, RBAC и audit log
AWS Secrets ManagerОблачное хранилище секретов с интеграцией IAM и автоматической ротацией
Azure Key VaultХранилище ключей, секретов и сертификатов с доступом через RBAC и Azure AD
Google Secret ManagerПростая интеграция с GCP IAM и audit-логами, поддержка версионирования
Kubernetes SecretsВстроенное хранилище для подов; рекомендуется использовать с внешним провайдером и шифрованием at rest
SOPS + GitOpsРабота с зашифрованными секретами в Git-репозиториях (например, Sealed Secrets, Mozilla SOPS)

Пример: создание и использование Kubernetes Secret

kubectl create secret generic db-credentials \ --from-literal=username=admin \ --from-literal=password=securepass
env: - name: DB_USER valueFrom: secretKeyRef: name: db-credentials key: username

📌 Переменные окружения в контейнере будут загружены из секретов в Kubernetes.


Зачем это важно

  • Изоляция конфиденциальных данных от кода — секреты не должны храниться в
    git
    ,
    .env
    ,
    .yaml
    и т.д.;
  • Контроль доступа — только авторизованные сервисы и пользователи получают доступ;
  • Аудит и соответствие стандартам — SOC 2, ISO 27001, PCI DSS, HIPAA и др.;
  • Защита в облачных и CI/CD-средах — автоматическая выдача секретов в рантайме без ручного вмешательства;
  • Масштабируемость и унификация — централизованное управление для десятков сервисов, сред и окружений.

Best Practices

  • Никогда не храните секреты в открытом виде в git-репозиториях;
  • Используйте централизованное хранилище секретов (Vault, Secrets Manager, Key Vault);
  • Включайте шифрование at rest и in transit для секретов;
  • Применяйте RBAC или IAM для ограничения доступа;
  • Настраивайте автоматическую ротацию секретов, особенно для баз данных и API;
  • Интегрируйте секреты в CI/CD пайплайны с минимальным временем жизни (short-lived credentials);
  • В Kubernetes — избегайте plaintext-секретов, применяйте KMS-поддержку или external-secrets-операторы.

Secrets Management — это критическая часть безопасной DevOps-платформы. Он обеспечивает надёжную защиту чувствительных данных в динамических инфраструктурах и автоматизированных процессах, таких как CI/CD, облачные сервисы, микросервисы и Kubernetes.


Практические примеры конфигураций для Secrets Management, включая Vault, Kubernetes и облачные хранилища — с фокусом на безопасное использование в CI/CD и production-средах.

1. HashiCorp Vault: выдача dynamic credentials для PostgreSQL

➊ Конфигурация роли:

path "database/creds/readonly" { capabilities = ["read"] }

➋ Vault: подключение к PostgreSQL и создание роли

vault write database/config/postgres \ plugin_name=postgresql-database-plugin \ allowed_roles="readonly" \ connection_url="postgresql://vaultuser:password@postgres.internal.local:5432/postgres?sslmode=disable" vault write database/roles/readonly \ db_name=postgres \ creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \ default_ttl="1h" \ max_ttl="24h"

📌 Запрос к

database/creds/readonly
возвращает временные уникальные логин/пароль.


2. Kubernetes External Secrets (KES + AWS Secrets Manager)

Secret в AWS:

{ "username": "db_admin", "password": "strongpass123" }

ExternalSecret CRD в Kubernetes:

apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: db-credentials spec: secretStoreRef: name: aws-secrets kind: ClusterSecretStore target: name: db-credentials data: - secretKey: username remoteRef: key: prod/db property: username - secretKey: password remoteRef: key: prod/db property: password

📌 Секреты автоматически подтягиваются из AWS и используются подами как обычные

Secret
.


3. GitOps подход: SOPS + Git + Sealed Secrets

Зашифрованный секрет через Mozilla SOPS:

apiVersion: v1 kind: Secret metadata: name: app-creds namespace: default sops: encrypted_regex: '^(data|stringData)$' creation_rules: - pgp: <YOUR_PGP_KEY> data: password: ENC[AES256_GCM,data:...,type:str]

📌 Такой файл можно коммитить в Git — дешифруется только при применении в кластере с нужным ключом.


4. Terraform + AWS Secrets Manager

resource "aws_secretsmanager_secret" "db" { name = "prod/db" } resource "aws_secretsmanager_secret_version" "db_creds" { secret_id = aws_secretsmanager_secret.db.id secret_string = jsonencode({ username = "admin" password = "supersecure" }) }

📌 Инфраструктура секретов создаётся через код, легко встраивается в CI/CD.


🛡️ Best practices checklist:

  • Используешь короткоживущие ключи (TTL ≤ 1ч)
  • Автоматическая ротация (например, Vault + database plugin)
  • RBAC/IAM для доступа к секретам
  • Аудит логов запросов к секретам (Vault audit, AWS CloudTrail)
  • Secrets не хранятся в git в открытом виде
  • Используешь sealed или external secrets при GitOps

VPS с перспективой

Планируете VPS на год? С кодом NEWCOM получаете больше, чем рассчитывали.

Месяц в подарок
COPIED
NEWCOM COPIED