วิธีสร้างและจัดการ Secrets ใน GitHub Actions ด้วย HashiCorp Vault อย่างปลอดภัยบน Linux

ที่มาภาพ: 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

Related

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

วิธีติดตั้งและใช้ OpenAI Embeddings ร่วมกับ PostgreSQL เพื่อสร้างระบบค้นหาเอกสารเชิงบริบทแบบโลคลGrowth
5 สิงหาคม 2569 เวลา 19:00

วิธีติดตั้งและใช้ OpenAI Embeddings ร่วมกับ PostgreSQL เพื่อสร้างระบบค้นหาเอกสารเชิงบริบทแบบโลคล

การสร้างระบบค้นหาเอกสารเชิงบริบทแบบโลคัลด้วย **OpenAI Embeddings** และ **PostgreSQL** ช่วยให้คุณสามารถดึงข้อมูลที่เกี่ยวข้องจากชุดข้อความขนาดใหญ่ได้อย่างแม่นยำและเร็วทันใจ บทความนี้จะอธิบายขั้นตอนตั้ง…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ9 นาที
วิธีติดตั้งและกำหนดค่า GitHub Actions Runner แบบ Self‑hosted บน Windows Server พร้อม Zero‑Trust SecurityGrowth
5 สิงหาคม 2569 เวลา 11:30

วิธีติดตั้งและกำหนดค่า GitHub Actions Runner แบบ Self‑hosted บน Windows Server พร้อม Zero‑Trust Security

การใช้ **GitHub Actions Runner แบบ Self‑hosted** บน Windows Server ให้คุณควบคุมสภาพแวดล้อมการทำงานได้เต็มที่ พร้อมเพิ่มระดับความปลอดภัยด้วยแนวคิด *Zero‑Trust* Security จะช่วยลดความเสี่ยงจากการเข้าถึงโ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ9 นาที
วิธีตั้งค่า Restic ทำ Immutable Backup บน macOS อย่างปลอดภัยGrowth
4 สิงหาคม 2569 เวลา 20:30

วิธีตั้งค่า Restic ทำ Immutable Backup บน macOS อย่างปลอดภัย

Restic เป็นเครื่องมือสำรองข้อมูลแบบ open‑source ที่เข้ารหัสและตรวจสอบความสมบูรณ์อัตโนมัติ การตั้งค่าให้ทำ *Immutable Backup* บน macOS จะช่วยป้องกันไฟล์สำรองไม่ให้ถูกแก้ไขหรือลบโดยไม่ได้รับอนุญาต ในบทค…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
วิธีใช้งาน Ollama รันโมเดล LLM บน macOS เพื่อสรุปเนื้อหาเอกสารอัตโนมัติอย่างปลอดภัยGrowth
4 สิงหาคม 2569 เวลา 19:00

วิธีใช้งาน Ollama รันโมเดล LLM บน macOS เพื่อสรุปเนื้อหาเอกสารอัตโนมัติอย่างปลอดภัย

การใช้ Ollama บน macOS เพื่อรันโมเดล LLM (Large Language Model) ช่วยให้คุณสร้างเนื้อหาเอกสารอัตโนมัติได้โดยไม่ต้องพึ่งบริการคลาวด์ภายนอก ความปลอดภัยจึงเพิ่มขึ้นเพราะข้อมูลทั้งหมดอยู่ในเครื่องของคุณเอง

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