
ที่มาภาพ: Unknown Source
วิธีสร้างและจัดการ Secrets ใน GitHub Actions ด้วย HashiCorp Vault อย่างปลอดภัยบน Linux
⚡ สรุป 30 วิ
GitHub Actions เป็นเครื่องมือ CI/CD ที่ทำงานร่วมกับโค้ดได้อย่างอเนกประสงค์ แต่การจัดเก็บ **Secrets** บน GitHub เองมีข้อจำกัดเรื่องความปลอดภัยและการหมุนเวียนคีย์ Vault ของ HashiCorp จึงเป็นตัวเลือกที่ด…
ภาพรวมโดยรวม — Overview
GitHub Actions เป็นเครื่องมือ CI/CD ที่ทำงานร่วมกับโค้ดได้อย่างอเนกประสงค์ แต่การจัดเก็บ Secrets บน GitHub เองมีข้อจำกัดเรื่องความปลอดภัยและการหมุนเวียนคีย์ Vault ของ HashiCorp จึงเป็นตัวเลือกที่ดีสำหรับการจัดการข้อมูลลับแบบศูนย์กลาง โดยเราจะอธิบายขั้นตอนตั้งค่า Vault บน Linux และเชื่อมต่อกับ GitHub Actions อย่างปลอดภัย
ความต้องการเบื้องต้น — Prerequisites
ก่อนเริ่มทำตามขั้นตอนนี้ ให้ตรวจสอบว่าเครื่อง Linux ของคุณมีเงื่อนไขดังต่อไปนี้
- ระบบปฏิบัติการ Ubuntu 20.04 หรือใหม่กว่า (หรือ CentOS 8+)
- ติดตั้ง Docker เวอร์ชัน 20.x ขึ้นไป (ใช้สำหรับรัน Vault ในโหมด dev)
- มีบัญชี GitHub พร้อมสิทธิ์ Admin สำหรับ repository ที่ต้องการใช้งาน
- สามารถเข้าถึงอินเทอร์เน็ตเพื่อดึงภาพ Docker ของ Vault
การติดตั้ง HashiCorp Vault — Install Vault
เราจะใช้ Docker เพื่อความง่ายในการเริ่มต้น แต่อย่างไรก็ตามในสภาพแวดล้อมจริงควรติดตั้งแบบ Standalone หรือ HA ตามต้องการ
- ดึงภาพ Docker ล่าสุดของ Vault
```bash docker pull hashicorp/vault:latest ```
- รันคอนเทนเนอร์ในโหมด dev (สำหรับทดลอง) โดยเปิดพอร์ต 8200 ให้เข้าถึงได้จากเครื่องอื่น
```bash docker run --cap-add=IPC_LOCK -d \ -p 8200:8200 \ -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' \ hashicorp/vault server -dev ```
- ตรวจสอบการทำงานโดยใช้คำสั่ง `curl` หรือเปิด http://localhost:8200 ในเว็บเบราว์เซอร์
**Tip: โหมด dev มีคีย์อัตโนมัติและไม่เข้ารหัสข้อมูล ควรใช้เฉพาะเพื่อทดลอง ไม่ควรใช้งานใน production
การตั้งค่า Vault Server — Configure Vault
หลังจากมี Vault ทำงานแล้ว ขั้นตอนต่อไปคือการกำหนดค่าพื้นฐานสำหรับการจัดการ Secrets
- เข้าสู่ CLI ของ Vault ผ่าน Docker
```bash docker exec -it <container_id> /bin/sh vault login myroot ```
- เปิด Audit Device เพื่อบันทึกกิจกรรมทั้งหมด
```bash vault audit enable file file_path=/var/log/vault_audit.log ```
- สร้าง KV Secrets Engine เวอร์ชัน 2 (รองรับ versioning) บนพาธ `secret/`
```bash vault secrets enable -version=2 kv ```
- ตรวจสอบว่า KV engine ทำงานได้โดยการเขียนค่าแบบทดสอบ
```bash vault kv put secret/github token=abcd1234 ```
การสร้าง Policy และ Token สำหรับ GitHub Actions — Policies & Tokens
เพื่อให้ GitHub Actions สามารถอ่าน Secrets จาก Vault ได้อย่างปลอดภัย เราต้องกำหนดสิทธิ์ที่จำกัด
- สร้างไฟล์ policy ชื่อ `github-actions.hcl`
```hcl path "secret/data/github/*" { capabilities = ["read"] } ```
- โหลด policy เข้า Vault
```bash vault policy write github-actions github-actions.hcl ```
- สร้าง Token ที่ผูกกับ Policy นี้ (ตั้งเวลาหมุนเวียนเป็น 30 วัน)
```bash vault token create -policy=github-actions -ttl=720h -period=720h ```
| วิธีสร้าง | ความปลอดภัย | การจัดการ |
|---|---|---|
| Token ธรรมดา | ปานกลาง (สามารถกำหนด TTL ได้) | ง่ายต่อการสร้างและลบ |
| AppRole | สูง (ใช้ role_id + secret_id) | เหมาะกับระบบอัตโนมัติหลายตัว |
Tip: ควรเลือกใช้ AppRole** หากต้องการหมุนคีย์โดยอัตโนมัติจาก CI/CD pipeline
การตั้งค่า Secrets ใน GitHub Repository — GitHub Secrets
เราต้องใส่ข้อมูลที่จำเป็นสำหรับเชื่อมต่อ Vault ลงใน Repository Secrets ของ GitHub
- ไปที่ `Settings Secrets and variables Actions`
- เพิ่ม secret ชื่อ `VAULT_ADDR` ค่า `http://<IP>:8200` (หรือใช้ DNS)
- เพิ่ม secret ชื่อ `VAULT_TOKEN` ค่าที่ได้จากขั้นตอนก่อนหน้า
**Warning: อย่าเก็บค่า token หรือ credential ใดๆ ไว้ในไฟล์โค้ดโดยตรง ทั้งหมดต้องอยู่ใน Secrets ของ GitHub เท่านั้น
การใช้ Vault ภายใน Workflow — Workflow Example
ต่อไปเป็นตัวอย่างไฟล์ workflow ที่ดึง Secret จาก Vault แล้วนำไปใช้ในการ deploy
```yaml name: Deploy with Vault
on: push: branches: [ main ]
jobs: deploy: runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Vault CLI
run: | curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" sudo apt-get update && sudo apt-get install vault
- name: Authenticate to Vault
env: VAULT_ADDR: ${{ secrets.VAULT_ADDR }} VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }} run: | export VAULT_ADDR export VAULT_TOKEN
- name: Retrieve GitHub Token from Vault
id: get-secret run: | secret=$(vault kv get -format=json secret/github | jq -r '.data.data.token') echo "::add-mask::$secret" echo "github_token=$secret" >> $GITHUB_OUTPUT
- name: Use the token
env: GITHUB_TOKEN: ${{ steps.get-secret.outputs.github_token }} run: | curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/owner/repo/releases ```
จุดสำคัญของ workflow นี้
- ติดตั้ง Vault CLI บน runner ทุกครั้ง (สามารถ cache เพื่อลดเวลา)
- ใช้ `VAULT_ADDR` และ `VAULT_TOKEN` จาก Secrets ของ GitHub เพื่อทำการ authenticate
- ดึงค่า secret ด้วยคำสั่ง `vault kv get` แล้วเก็บไว้ใน output ที่ mask ไว้จาก logs
เคล็ดลับความปลอดภัยเพิ่มเติม — Security Tips
- จำกัด IP: ตั้งค่า firewall หรือ security group ให้อนุญาตเฉพาะ IP ของ GitHub Actions runners (IP ranges ของ GitHub) เข้าถึง Vault
- หมุนคีย์บ่อย: ใช้ `period` ในการสร้าง token เพื่อให้ระบบทำการสร้าง token ใหม่อัตโนมัติทุก 30 วัน
- Audit Log Review: ตรวจสอบไฟล์ `/var/log/vault_audit.log` อย่างสม่ำเสมอเพื่อหาการเข้าถึงที่ผิดปกติ
- ใช้ TLS: ใน production ควรตั้งค่า Vault ให้ทำงานผ่าน HTTPS ด้วยใบรับรองจาก CA ภายในองค์กร
**Warning: หากเปิดให้ Vault ทำงานแบบ HTTP บนเครือข่ายสาธารณะ จะทำให้ token และ secret ถูกดักจับได้ง่าย
การแก้ไขปัญหาพื้นฐาน — Troubleshooting
- Cannot connect to Vault
- ตรวจสอบว่า port 8200 เปิดอยู่และไม่มี firewall บล็อก
- ยืนยันค่า `VAULT_ADDR` ใน GitHub Secrets ถูกต้อง (รวม http/https)
- Permission denied error
- ตรวจสอบ policy ของ token ว่ามี path `secret/data/github/*` หรือไม่
- ใช้คำสั่ง `vault token lookup <token>` เพื่อตรวจสอบ capabilities
- Vault CLI not found
- ให้แน่ใจว่าขั้นตอน `Install Vault CLI` รันสำเร็จโดยไม่มี error
- พิจารณาใช้ action ที่เตรียมไว้แล้ว เช่น `hashicorp/setup-vault@v1`
สรุป — Summary
- ตั้งค่า Vault บน Linux (Docker หรือแบบ native) เพื่อเป็นศูนย์กลางจัดการ Secrets
- สร้าง policy เฉพาะสำหรับ GitHub Actions และออก token/AppRole ที่มีอายุจำกัด
- เก็บ `VAULT_ADDR` และ `VAULT_TOKEN` ไว้ใน GitHub Repository Secrets เท่านั้น
- ดึง secret จาก Vault ภายใน workflow ด้วย CLI แล้ว mask ค่าที่สำคัญจาก logs
- ปรับใช้มาตรการความปลอดภัยเช่น IP whitelist, TLS, audit log และการหมุนคีย์บ่อย
จำไว้ว่า **ไม่มีระบบใดปลอดภัย 100 % การตรวจสอบและอัปเดตอย่างต่อเนื่องคือกุญแจสำคัญในการรักษาความลับของคุณให้ปลอดภัยบน GitHub Actions.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีสร้างและจัดการ Secrets ใน GitHub Actions ด้วย HashiCorp Vault อย่างปลอดภัยบน Linux
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 5 สิงหาคม 2569 เวลา 17:51



