
ที่มาภาพ: Unknown Source
วิธีตั้งค่า HashiCorp Vault บน Kubernetes ด้วย Vault Agent Injector เพื่อจัดการ Secrets แบบ Zero‑Trust อย่างปลอดภัย
⚡ สรุป 30 วิ
HashiCorp Vault เป็นเครื่องมือจัดการ **Secrets** ที่ออกแบบมาสำหรับสภาพแวดล้อมคลาวด์และคอนเทนเนอร์ โดยทำงานในแนวคิด *Zero‑Trust* เพื่อให้ข้อมูลสำคัญไม่เคยถูกเก็บไว้บนดิสก์ของพ็อดโดยตรง การใช้ **Vault A…
ภาพรวม (Overview)
HashiCorp Vault เป็นเครื่องมือจัดการ Secrets ที่ออกแบบมาสำหรับสภาพแวดล้อมคลาวด์และคอนเทนเนอร์ โดยทำงานในแนวคิด *Zero‑Trust* เพื่อให้ข้อมูลสำคัญไม่เคยถูกเก็บไว้บนดิสก์ของพ็อดโดยตรง การใช้ Vault Agent Injector บน Kubernetes ทำให้การกระจาย Secrets ไปยังแอปพลิเคชันเป็นเรื่องง่ายและปลอดภัย
- Vault จัดเก็บ Secrets ไว้ใน *encrypted storage*
- Vault Agent Injector จะ inject secrets เข้าไปในพ็อดโดยอัตโนมัติผ่าน side‑car container หรือไฟล์ที่ mount แล้ว
- แนวคิด Zero‑Trust ทำให้การเข้าถึง Secrets ต้องได้รับการยืนยันทุกครั้ง ไม่ขึ้นกับตำแหน่งเครือข่าย
**Tip: เริ่มต้นด้วยคลัสเตอร์ Kubernetes ที่มี RBAC เปิดใช้งานเต็มรูปแบบ จะช่วยลดความซับซ้อนของการกำหนดสิทธิ์ในขั้นต่อไป
ความต้องการก่อนเริ่ม (Prerequisites)
เพื่อให้การติดตั้ง Vault Agent Injector ราบรื่น ควรตรวจสอบว่ามีองค์ประกอบพื้นฐานดังนี้
- คลัสเตอร์ Kubernetes เวอร์ชัน 1.20‑ขึ้นไป พร้อม kubectl ที่เชื่อมต่อได้
- Helm 3.x ติดตั้งบนเครื่องผู้จัดการ (สำหรับติดตั้ง Vault)
- Namespace ที่จะใช้งาน (เช่น `vault`) มีการสร้างไว้แล้วและมี ResourceQuota เพียงพอ
การติดตั้ง HashiCorp Vault บน Kubernetes (How It Works)
Deploy Vault Server ด้วย Helm
ใช้ Helm chart ของ HashiCorp เพื่อสร้างเซิร์ฟเวอร์ Vault ที่พร้อมทำงานแบบ HA
- **ขั้นตอนที่ 1: เพิ่ม repository ของ HashiCorp
```bash helm repo add hashicorp https://helm.releases.hashicorp.com helm repo update ```
- **ขั้นตอนที่ 2: สร้างไฟล์ values.yaml กำหนด storage backend (เช่น `raft`) และเปิด audit log
- **ขั้นตอนที่ 3: ติดตั้ง Vault ใน namespace `vault`
```bash helm install vault hashicorp/vault \ --namespace vault \ -f values.yaml ```
เปิดใช้งาน Vault UI & API
หลังติดตั้งสำเร็จ ตรวจสอบว่า Service ของ Vault มี IP ที่เข้าถึงได้และเปิดพอร์ต 8200
- ใช้ `kubectl port-forward` เพื่อเชื่อมต่อกับ UI ภายในเครื่องของคุณ
- สร้าง Root Token ชั่วคราวเพื่อทำการกำหนดค่าเบื้องต้น
การตั้งค่า Vault Agent Injector (Configuration)
ติดตั้ง Injector ผ่าน Helm
Vault Agent Injector เป็นส่วนขยายที่รวมอยู่ใน chart ของ Vault แต่ต้องเปิดใช้งานแยก
- **ขั้นตอนที่ 1: แก้ไข `values.yaml` เพิ่มบรรทัดต่อไปนี้
```yaml injector: enabled: true externalVaultAddr: "http://vault.vault.svc.cluster.local:8200" ```
- **ขั้นตอนที่ 2: อัปเกรด release เพื่อเปิดใช้งาน injector
```bash helm upgrade vault hashicorp/vault \ --namespace vault \ -f values.yaml ```
กำหนด Policy สำหรับแอปพลิเคชัน
สร้าง policy ที่อนุญาตให้พ็อดดึง Secrets ที่ต้องการเท่านั้น
- ตัวอย่าง `app-policy.hcl`
``` path "secret/data/app/*" { capabilities = ["read"] } ```
- โหลด policy เข้า Vault
```bash vault policy write app-policy app-policy.hcl ```
ปรับใช้ Secret กับแอปพลิเคชัน (Inject Secrets to Apps)
สร้าง ServiceAccount ที่เชื่อมต่อกับ Vault
ให้ Kubernetes ServiceAccount มี annotation เพื่อบ่งบอกว่าเป็นเป้าหมายของ injector
- **ขั้นตอนที่ 1: สร้าง ServiceAccount `app-sa` ใน namespace ของแอปพลิเคชัน
```yaml apiVersion: v1 kind: ServiceAccount metadata: name: app-sa namespace: my-app annotations: vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/role: "app-role" vault.hashicorp.com/secret-config: | { "pathsecret/data/app/config", "fieldusername", "destPath/etc/secrets/username" } ```
- **ขั้นตอนที่ 2: สร้าง RoleBinding ให้ ServiceAccount มีสิทธิ์อ่าน Policy `app-policy`
```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: app-sa-binding namespace: my-app subjects:
- kind: ServiceAccount
name: app-sa namespace: my-app roleRef: kind: Role name: vault-auth-role apiGroup: rbac.authorization.k8s.io ```
ปรับ Deployment ให้ใช้ ServiceAccount
ในไฟล์ `deployment.yaml` ระบุ ServiceAccount ที่สร้างขึ้น
- ตัวอย่างสั้น ๆ
```yaml spec: serviceAccountName: app-sa containers:
- name: my-app
image: myrepo/my-app:latest volumeMounts:
- name: secret-volume
mountPath: "/etc/secrets" volumes:
- name: secret-volume
emptyDir: {} ```
เมื่อพ็อดเริ่มทำงาน Vault Agent Injector จะสร้าง side‑car container ที่ดึง Secret จาก `secret/data/app/config` และเขียนลงไฟล์ที่กำหนดใน `/etc/secrets` ทำให้แอปพลิเคชันสามารถอ่านค่าได้โดยไม่มีการเก็บไว้บน Docker image
แนวทาง Zero‑Trust และข้อควรระวัง (Zero‑Trust Approach & Tips)
- **Authentication: ใช้ Kubernetes Auth Method ของ Vault แทน Token แบบถาวร เพื่อลดความเสี่ยงจากการรั่วไหล
- **Least Privilege: กำหนด Policy ให้แคบที่สุดเท่าที่จำเป็น เช่น จำกัด path และ capabilities เป็น `read` เท่านั้น
- **Audit Logging: เปิด audit device (file หรือ syslog) เพื่อบันทึกทุกคำขอเข้าถึง Secret
- **Secret Rotation: ตั้งค่า TTL สำหรับ Secrets และใช้ `vault lease renew` ภายในแอปพลิเคชันเพื่ออัพเดตอัตโนมัติ
**Tip: อย่าลืมตั้งค่าการ *revocation* ของ Token เมื่อ ServiceAccount ถูกลบหรือยกเลิก เพื่อป้องกันการเข้าถึงต่อเนื่องของพ็อดที่ไม่มีอยู่แล้ว
ตารางเปรียบเทียบวิธี Auth ที่นิยมใช้บน Kubernetes
| วิธี Auth | ความปลอดภัย | การตั้งค่า | เหมาะกับ |
|---|---|---|---|
| Token (static) | ปานกลาง – ต้องจัดการรหัสให้ปลอดภัย | สร้าง token แล้วใส่เป็น secret | ทดลองหรือสภาพแวดล้อมที่ไม่สำคัญ |
| Kubernetes ServiceAccount JWT | สูง – ใช้ JWT ของ K8s ตรวจสอบ | ตั้งค่า auth method, role และ policy | Production ที่ต้อง Zero‑Trust |
| AppRole | สูง – มีการใช้ RoleID/SecretID แยกกัน | สร้าง AppRole แล้วแจก SecretID ให้แอป | งานที่ไม่สามารถพึ่ง ServiceAccount ได้ |
สรุป (Summary)
การตั้งค่า HashiCorp Vault บน Kubernetes ด้วย Vault Agent Injector ทำให้เราสามารถจัดการ Secrets ตามแนวคิด Zero‑Trust ได้อย่างเป็นระบบ
- ติดตั้ง Vault ผ่าน Helm พร้อมเปิดใช้งาน injector
- กำหนด Policy ที่จำกัดสิทธิ์เฉพาะ path ที่ต้องการใช้
- สร้าง ServiceAccount พร้อม annotation เพื่อบอกให้ injector ทำงานอัตโนมัติ
- ใช้ Kubernetes Auth Method เพื่อลดความเสี่ยงจาก Token แบบถาวร
สิ่งที่ควรจำ
- เปิด audit logging ตั้งแต่เริ่มต้นเพื่อตรวจสอบการเข้าถึงทุกครั้ง
- ปรับ TTL ของ Secrets ให้สั้นและทำให้ระบบ rotate อย่างต่อเนื่อง
- ใช้ least privilege policy ทุกกรณี เพื่อลดผลกระทบจากการรั่วไหล
ด้วยขั้นตอนเหล่านี้ แอปพลิเคชันของคุณจะได้ประโยชน์จากการจัดการ Secrets ที่ปลอดภัย สะดวก และสอดคล้องกับหลัก Zero‑Trust อย่างเต็มที่.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่า HashiCorp Vault บน Kubernetes ด้วย Vault Agent Injector เพื่อจัดการ Secrets แบบ Zero‑Trust อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 27 สิงหาคม 2569 เวลา 10:50



