Managing Secrets Securely in Kubernetes
Learn how to securely manage Secrets and ConfigMaps in Kubernetes with External Secrets Operator
SmileX
Founder & CEO
1 min read
ปัญหาของ Kubernetes Secrets แบบ Default
Kubernetes Secrets แบบ default จะเก็บข้อมูลเป็น base64-encoded ซึ่งไม่ใช่การเข้ารหัสที่แท้จริง
# Secrets แบบ default สามารถถอดรหัสได้ง่ายkubectl get secret my-secret -o jsonpath='{.data.password}' | base64 -dการใช้ External Secrets Operator
การติดตั้ง
helm repo add external-secrets https://charts.external-secrets.iohelm install external-secrets external-secrets/external-secretsการเชื่อมต่อกับ AWS Secrets Manager
apiVersion: external-secrets.io/v1beta1kind: SecretStoremetadata: name: aws-secretsmanagerspec: provider: aws: service: SecretsManager region: ap-southeast-1การสร้าง ExternalSecret
apiVersion: external-secrets.io/v1beta1kind: ExternalSecretmetadata: name: database-credentialsspec: refreshInterval: 1h secretStoreRef: name: aws-secretsmanager kind: SecretStore target: name: db-credentials creationPolicy: Owner data: - secretKey: username remoteRef: key: prod/database property: username - secretKey: password remoteRef: key: prod/database property: passwordBest Practices
1. ใช้ RBAC อย่างเข้มงวด
apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: name: secret-readerrules:- apiGroups: [""] resources: ["secrets"] resourceNames: ["specific-secret"] verbs: ["get"]2. เปิดใช้ Encryption at Rest
apiVersion: apiserver.config.k8s.io/v1kind: EncryptionConfigurationresources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: <BASE64_ENCODED_SECRET> - identity: {}บทสรุป
การจัดการ Secrets อย่างปลอดภัยเป็นสิ่งสำคัญในการดูแล Kubernetes Cluster การใช้ External Secrets Operator ร่วมกับ Cloud Provider Secrets Manager จะช่วยเพิ่มความปลอดภัยได้อย่างมาก