จัดการ Local Account และ API Token ใน Argo CD
บทนำ
Argo CD เป็นเครื่องมือ GitOps ที่มีประสิทธิภาพสำหรับการจัดการการปรับใช้งาน Kubernetes อย่างอัตโนมัติ การจัดการ Local Account และ API Token อย่างถูกต้องเป็นสิ่งสำคัญเพื่อรักษาความปลอดภัยและควบคุมการเข้าถึง (Access Control) ในระบบ บทความนี้จะอธิบายวิธีการสร้าง จัดการ และตั้งค่าสิทธิ์สำหรับ Local Account และ API Token ใน Argo CD โดยรายละเอียด
เมื่อคุณใช้บริการ Cloud VPS จาก Dot Enterprise (https://de.co.th/cloud-vps) สำหรับการติดตั้ง Argo CD คุณจะได้รับ infrastructure ที่มีความเสถียรและปลอดภัย ซึ่งช่วยให้คุณสามารถมุ่งเน้นไปที่การจัดการการตรวจสอบสิทธิ์และสิทธิ์การใช้งาน
ความเข้าใจเกี่ยวกับ Local Account ใน Argo CD
Local Account คือบัญชีผู้ใช้ที่สร้างและจัดการภายในระบบ Argo CD โดยตรง ไม่เกี่ยวข้องกับ LDAP หรือ OAuth การใช้ Local Account เหมาะสำหรับการทดสอบ การพัฒนา หรือเมื่อคุณต้องการการควบคุมการเข้าถึงที่มีความแม่นยำสูง
ประเภทของ Local Account
Argo CD มี 2 ประเภทหลักของ Local Account:
- Admin Account: มีสิทธิ์เต็มที่ในการจัดการระบบ สามารถสร้าง ลบ และแก้ไข repository, application, และ project ได้
- Read-Only Account: มีสิทธิ์ในการดูและตรวจสอบสถานะของ application เท่านั้น ไม่สามารถสร้างหรือแก้ไขได้
คุณยังสามารถตั้งค่า RBAC (Role-Based Access Control) เพื่อกำหนดสิทธิ์ที่มีความเฉพาะเจาะจงสำหรับแต่ละบทบาท
การสร้าง Local Account ใหม่
มีหลายวิธีในการสร้าง Local Account ใน Argo CD ขึ้นอยู่กับคุณลักษณะและการตั้งค่าของระบบของคุณ
วิธีที่ 1: ผ่าน Argo CD UI
- เข้าสู่ Argo CD Web UI ด้วยบัญชี admin
- ไปที่ Settings > Users
- คลิก “Create user” (หรือ “New user”)
- ใส่ username และเลือก role ที่ต้องการ
- คลิก “Create” เพื่อสร้างบัญชี
- ระบบจะสร้างรหัสผ่านชั่วคราว ให้บันทึกไว้อย่างปลอดภัย
วิธีที่ 2: ผ่าน argocd CLI
คุณสามารถใช้ argocd CLI เพื่อสร้าง Local Account โดยใช้คำสั่ง:
argocd account create <username> --password <password>
ตัวอย่างเช่น:
argocd account create developer --password MySecurePassword123!
วิธีที่ 3: ผ่าน ConfigMap
คุณสามารถแก้ไข ConfigMap ชื่อ “argocd-cm” ในไฟล์ YAML:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
accounts.developer: apiKey
accounts.developer.enabled: "true"
จากนั้นนำไปใช้งานด้วยคำสั่ง:
kubectl apply -f argocd-cm.yaml
การจัดการรหัสผ่าน (Password Policies)
การตั้งค่านโยบายรหัสผ่านที่แข็งแกร่งเป็นส่วนสำคัญของความปลอดภัย
การเปลี่ยนรหัสผ่านของผู้ใช้
ผู้ใช้สามารถเปลี่ยนรหัสผ่านของตัวเองได้:
argocd account update-password --account <username> --current-password <current-password> --new-password <new-password>
การรีเซตรหัสผ่านโดย Admin
Admin สามารถรีเซตรหัสผ่านของผู้ใช้อื่นได้:
argocd account set-password --account <username> --password <new-password>
นโยบายรหัสผ่านที่แนะนำ
- ความยาวต่ำสุด 12 ตัวอักษร
- รวมตัวอักษรตัวใหญ่ ตัวเล็ก ตัวเลข และสัญลักษณ์พิเศษ
- เปลี่ยนรหัสผ่านทุก 90 วัน
- ห้ามใช้รหัสผ่านเดิมมา 5 ครั้ง
การสร้างและจัดการ API Token
API Token ใช้สำหรับการตรวจสอบสิทธิ์ (Authentication) โดยไม่ต้องใช้รหัสผ่านในการเรียก API การสร้าง API Token ที่ปลอดภัยเป็นวิธีที่ดีที่สุดสำหรับการโต้ตอบ CLI และ CI/CD pipeline
การสร้าง API Token ผ่าน UI
- เข้าสู่ Argo CD Web UI
- ไปที่ Settings > Accounts > [username]
- คลิก “Generate Token”
- ตั้งชื่อและวันหมดอายุสำหรับ token (ปล่อยว่างไว้หากต้องการไม่มีวันหมดอายุ)
- คลิก “Generate”
- บันทึก token ที่สร้างขึ้น ซึ่งจะแสดงเพียงครั้งเดียว
การสร้าง API Token ผ่าน CLI
argocd account generate-token --account <username>
ตัวอย่าง:
argocd account generate-token --account developer
ใช้งาน API Token กับ CLI
เมื่อได้ API Token แล้ว คุณสามารถใช้มันสำหรับการเข้าสู่ระบบ CLI:
argocd login <argocd-server> --username <username> --password <api-token>
หรือตั้งค่าเป็น Environment Variable:
export ARGOCD_AUTH_TOKEN=<api-token>
argocd app list
ใช้งาน API Token กับ CI/CD Pipeline
สำหรับการใช้งานใน CI/CD pipeline เช่น GitHub Actions หรือ GitLab CI:
steps:
- name: Deploy with Argo CD
run: |
argocd app sync my-app --grpc-web --auth-token ${{ secrets.ARGOCD_TOKEN }}
env:
ARGOCD_SERVER: argocd.example.com
การจัดการและยกเลิก API Token
การจัดการ API Token อย่างเหมาะสมช่วยป้องกันการเข้าถึงที่ไม่ได้รับอนุญาต
ดูรายการ Token ทั้งหมด
argocd account list-tokens --account <username>
ยกเลิก (Revoke) API Token
เมื่อต้องการยกเลิก token:
argocd account revoke-token --account <username> --id <token-id>
นโยบายการจัดการ API Token
- สร้าง token แยกสำหรับแต่ละ CI/CD pipeline
- ตั้งวันหมดอายุสำหรับ token ที่ใช้ในระยะสั้น
- ยกเลิก token ที่ไม่ใช้งานอีกต่อไป
- เก็บ token ไว้ในที่ปลอดภัย (secrets management system)
- หมุนเวียน token เป็นระยะ
การตั้งค่า RBAC (Role-Based Access Control)
RBAC ช่วยให้คุณสามารถกำหนดสิทธิ์ที่มีความเฉพาะเจาะจงสำหรับแต่ละผู้ใช้หรือกลุ่มผู้ใช้
ตัวอย่าง RBAC Policy ใน argocd-rbac-cm ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: 'role:readonly'
policy.csv: |
p, role:admin, applications, *, *, allow
p, role:readonly, applications, get, *, allow
p, role:developer, applications, sync, *, allow
p, role:developer, repositories, get, *, allow
g, developer, role:developer
g, admin-user, role:admin
ความหมายของ Policy Rules
รูปแบบพื้นฐาน: p, <role>, <resource>, <action>, <object>, <effect>
- role: บทบาทที่กำลังกำหนด
- resource: ประเภทของทรัพยากร (applications, repositories, clusters, exec)
- action: การดำเนินการ (get, create, update, delete, sync, override, action)
- object: ชื่อเฉพาะของทรัพยากร หรือ * สำหรับทั้งหมด
- effect: allow หรือ deny
การกำหนด Group ให้กับ Role
ใช้ “g” rules เพื่อกำหนด user ให้กับ role:
g, <username>, <role>
ความปลอดภัยและแนวทางปฏิบัติที่ดี
Best Practices สำหรับการจัดการ Account
- ใช้ account admin เพื่อการจัดการเท่านั้น ไม่ใช่สำหรับงานประจำวัน
- สร้าง service account แยกสำหรับแต่ละ CI/CD pipeline
- ตั้งค่า RBAC ให้เข้มงวด ให้สิทธิ์ต่ำสุดที่จำเป็น (principle of least privilege)
- ติดตามและตรวจสอบ audit logs สำหรับการเข้าถึง
- ใช้ OIDC หรือ SAML สำหรับการตรวจสอบสิทธิ์ในสภาพแวดล้อม production
ความปลอดภัยสำหรับการใช้งาน Cloud VPS
เมื่อคุณใช้ Argo CD บน Cloud VPS ของ Dot Enterprise ให้พิจารณาการตั้งค่าเพิ่มเติม:
- เปิดใช้ TLS/SSL สำหรับการสื่อสารทั้งหมด
- กำหนด Firewall rules ให้เข้มงวด
- ใช้ VPN หรือ SSH tunnel สำหรับการเข้าถึง Argo CD API
- สำรองข้อมูล (Backup) configuration และ API tokens อย่างสม่ำเสมอ
การแก้ไขปัญหาที่พบบ่อย
ปัญหา: ไม่สามารถเข้าสู่ระบบด้วย API Token
สาเหตุ: Token อาจหมดอายุแล้ว หรือเซิร์ฟเวอร์ Argo CD ไม่รู้จัก token
วิธีแก้: ตรวจสอบวันหมดอายุของ token ด้วยคำสั่ง argocd account list-tokens --account <username> หากหมดอายุแล้ว ให้สร้าง token ใหม่
ปัญหา: ผู้ใช้ไม่สามารถเข้าถึง Application บางตัว
สาเหตุ: RBAC policy ไม่ได้กำหนดสิทธิ์ที่ถูกต้อง
วิธีแก้: ตรวจสอบ argocd-rbac-cm ConfigMap และตรวจสอบว่า policy rule ครอบคลุม application ทั้งหมดที่ผู้ใช้ต้องการเข้าถึง
ปัญหา: ลืมรหัสผ่าน Admin
วิธีแก้: ในกรณีฉุกเฉิน คุณสามารถรีเซตรหัสผ่าน admin ด้วยการแก้ไข secret “argocd-secret” โดยตรง:
kubectl edit secret argocd-secret -n argocd
ลบ key “admin.password” เพื่อให้ระบบสร้างรหัสผ่านใหม่โดยอัตโนมัติ
การตรวจสอบ Audit Logs
Argo CD บันทึก audit logs สำหรับการดำเนินการทั้งหมด คุณสามารถตรวจสอบ logs เพื่อติดตามการเข้าถึง:
kubectl logs -f deployment/argocd-server -n argocd
ค้นหาการเข้าสู่ระบบและการสร้าง token:
kubectl logs deployment/argocd-server -n argocd | grep "token\|login\|account"
สรุป
การจัดการ Local Account และ API Token ใน Argo CD อย่างถูกต้องเป็นสิ่งสำคัญสำหรับการรักษาความปลอดภัยและการควบคุมการเข้าถึง ด้วยการตั้งค่า RBAC ที่เหมาะสม การใช้ API Token แทนรหัสผ่าน และการปฏิบัติตามแนวทางความปลอดภัย คุณจะสามารถจัดการ Argo CD ได้อย่างปลอดภัยและมีประสิทธิภาพ
สำหรับสภาพแวดล้อม production คุณควรพิจารณาการใช้บริการ Cloud VPS จาก Dot Enterprise (https://de.co.th/cloud-vps) ซึ่งมีความปลอดภัย เสถียร และมีการสนับสนุนที่ดี สิ่งนี้จะช่วยให้คุณมุ่งเน้นไปที่การบริหารจัดการแอปพลิเคชันแทนการกังวลเกี่ยวกับ infrastructure

