วิธีตั้งค่า HashiCorp Vault บน Kubernetes ด้วย Vault Agent Injector เพื่อจัดการ Secrets แบบ Zero‑Trust อย่างปลอดภัย

ที่มาภาพ: 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 และ policyProduction ที่ต้อง 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

Related

บทความที่เกี่ยวข้อง

วิธีสร้างแอป Server‑less ด้วย Next.js API Routes บน Vercel อย่างปลอดภัยGrowth
27 สิงหาคม 2569 เวลา 11:30

วิธีสร้างแอป Server‑less ด้วย Next.js API Routes บน Vercel อย่างปลอดภัย

การพัฒนาแอปพลิเคชันแบบ Server‑less ด้วย **Next.js API Routes** บน Vercel ทำให้เราสามารถโฟกัสที่ฟีเจอร์หลักของผลิตภัณฑ์ได้โดยไม่ต้องจัดการเซิร์ฟเวอร์เอง แต่เพื่อให้ระบบทำงานได้อย่างมั่นคงและปลอดภัย เรา…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีตั้งค่า Loki + Grafana พร้อม AI วิเคราะห์ Log อย่างปลอดภัยGrowth
26 สิงหาคม 2569 เวลา 18:30

วิธีตั้งค่า Loki + Grafana พร้อม AI วิเคราะห์ Log อย่างปลอดภัย

การวิเคราะห์ Log แบบดั้งเดิมมักต้องใช้เวลานานและอาจพลาดข้อมูลสำคัญ Loki ร่วมกับ Grafana ช่วยให้เก็บและแสดงผล Log ได้แบบเรียลไทม์ ส่วน AI สามารถสกัดหาความผิดปกติหรือเหตุการณ์ความปลอดภัยได้โดยอัตโนมัติ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ9 นาที
วิธีตั้งค่า Zero Trust SSH เข้าถึงระยะไกลด้วย OpenSSH Certificate Authority บน Linux อย่างปลอดภัยGrowth
26 สิงหาคม 2569 เวลา 12:30

วิธีตั้งค่า Zero Trust SSH เข้าถึงระยะไกลด้วย OpenSSH Certificate Authority บน Linux อย่างปลอดภัย

Zero Trust SSH เป็นแนวคิดที่ไม่ให้ความเชื่อใด ๆ โดยอัตโนมัติ การยืนยันตัวตนต้องอาศัยใบรับรอง (certificate) ที่ออกโดย CA เท่านั้น บน Linux เราสามารถใช้ OpenSSH Certificate Authority (CA) สร้างระบบนี้ได…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีสแกนหา Secrets อัตโนมัติในโค้ดด้วย Gitleaks บน GitHub Actions อย่างปลอดภัยGrowth
26 สิงหาคม 2569 เวลา 11:00

วิธีสแกนหา Secrets อัตโนมัติในโค้ดด้วย Gitleaks บน GitHub Actions อย่างปลอดภัย

การสแกนหา Secrets ที่อาจรั่วไหลในโค้ดเป็นงานสำคัญสำหรับทุกทีมพัฒนา บางครั้งเรามักมองข้ามไฟล์ config หรือ key ต่าง ๆ ที่ถูก commit ไปโดยไม่ได้ตั้งใจ Gitleaks เป็นเครื่องมือที่ออกแบบมาเพื่อค้นหา Secrets…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
คัดลอกลิงก์แล้ว!