Token CI full quyền – chỉ thiếu quyền đấm production

Con bot deploy này em tạo từ 6 tháng trước, xài quyền root AWS cho tiện… 
- tiện luôn cho hacker!

Audit pipeline mà thấy token CI/CD có quyền admin AWS, tôi chỉ bảo nhẹ: “Sao không gắn thêm cho nó mấy viên đá vô cực?”. Token như Thanos, muốn xóa bucket, gỡ DB, hay deploy prod cũng được.

Token CI của bạn khi có quyền admin AWS

Thực trạng: Token CI quyền lực vô biên

Thực trạng:  
  • Token CI (GitHub Actions, GitLab Runner) được gán IAM role với * quyền.  
  • Không phân tách quyền theo môi trường (dev/staging/prod).  
  • Token không rotate, nằm im 6 tháng, ai lấy được là “chơi lớn”.
Hệ quả:  
  • Rủi ro bảo mật: Token bị lộ, hacker xóa sạch S3, RDS.  
  • Lỗi nhầm môi trường: CI deploy nhầm prod thay vì staging.  
  • Không audit: Không biết token nào đang dùng, ai tạo.

Giải pháp: Phân quyền và OIDC

Để khóa chặt:  
  • Dùng OIDC: Gán IAM role qua OpenID Connect cho GitHub Actions/GitLab CI, thay vì static token.  
  • Phân quyền cho từng môi trường môi trường: Role riêng cho dev (read-only), staging (deploy), prod (read + approve).  
  • Rotate secret: Cập nhật token định kỳ, audit quyền IAM qua AWS IAM Access Analyzer.
Ví dụ: OIDC cho GitHub Actions:

name: Deploy
on: [push]
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
    steps:
      - uses: aws-actions/configure-aws-credentials@v1
        with:
          role-arn: arn:aws:iam::123456789012:role/ci-role

🎯 Tóm lại: Token CI quyền lực quá là “lời mời” hacker. Dùng OIDC, phân quyền môi trường, và rotate secret để bảo vệ production.

Post a Comment

Mới hơn Cũ hơn