Ответ
Использую многоуровневый подход:
1. RBAC (Role-Based Access Control) в Kubernetes
# ClusterRole для DevOps-инженеров
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: devops-engineer
rules:
- apiGroups: ["", "apps", "batch"]
resources: ["pods", "deployments", "jobs", "services", "configmaps", "secrets"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["roles", "rolebindings"]
verbs: ["get", "list", "create"]
# Привязка роли к пользователю через ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: devops-binding
subjects:
- kind: User
name: "alex@company.com"
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: devops-engineer
apiGroup: rbac.authorization.k8s.io
2. Интеграция с облачными IAM:
- AWS EKS:
aws-authConfigMap + IAM Roles for Service Accounts (IRSA) - GCP GKE: Workload Identity для привязки Kubernetes Service Accounts к GCP IAM
- Azure AKS: Azure AD integration + pod-managed identities
3. Дополнительные инструменты безопасности:
- Open Policy Agent (OPA)/Gatekeeper для политик безопасности (например, запрет контейнеров с root)
- Kyverno для политик Kubernetes-native
- Vault через vault-agent-injector для динамических секретов
- Falco для runtime-безопасности и обнаружения аномалий
4. Service Mesh для сетевой безопасности:
- Istio с AuthorizationPolicies для mTLS и контроля доступа на уровне сервисов
- Linkerd для автоматического mTLS между pod'ами
Практический пример: В последнем проекте настраивал GitOps-пайплайн, где разработчики получали доступ через GitHub Teams, которые маппились на Kubernetes RBAC роли через Pinniped или Dex + OIDC.