Full DevSecOps CHƯƠNG 33 Advanced 4 Labs Ngày tạo: 22/05/2026

Policy-as-Code nâng cao: OPA, Gatekeeper, Kyverno

OPA policies, admission control. Ưu tiên thực hành CLI; nếu có thao tác giao diện sẽ có thêm Cách 02 — GUI/Portal.

Thông tin thực hành

Ngày tạo bài: 22/05/2026
Cấp độ: Advanced
Nhóm nội dung: Full DevSecOps
Số lab: 4
Ưu tiên: CLI trước, GUI/Portal là cách 02 nếu phù hợp
Hệ điều hành: Windows 11, WSL2 Ubuntu, Linux, macOS tùy lab

Mục tiêu học tập

  • Nắm được mục đích và vai trò của Policy-as-Code nâng cao: OPA, Gatekeeper, Kyverno trong lộ trình Full DevSecOps.
  • Thực hành được bằng CLI, biết kiểm tra log/output và biết cleanup.
  • Biết khi nào cần dùng GUI/Portal và cách đối chiếu với CLI.
  • Áp dụng được vào môi trường doanh nghiệp với bảo mật, audit và vận hành rõ ràng.

Lý thuyết gắn gọn

Tổng quan Policy-as-Code nâng cao: OPA, Gatekeeper, Kyverno

Nội dung này giúp người học triển khai policy-as-code nâng cao: opa, gatekeeper, kyverno theo hướng thực tế, có thể áp dụng vào pipeline, cloud platform hoặc quy trình vận hành doanh nghiệp.

Khi nào dùng?

Dùng khi cần chuẩn hóa thao tác, giảm lỗi thủ công, tăng khả năng kiểm soát, audit và tự động hóa trong vòng đời phần mềm.

Rủi ro thường gặp

Rủi ro thường gặp là cấu hình thủ công, thiếu kiểm soát quyền, không có rollback, không có log/alert, hoặc thiếu tài liệu vận hành.

Chuẩn thực hành

Ưu tiên Infrastructure as Code, pipeline as code, least privilege, traceability, monitoring, cost control và security gate sớm trong quy trình.

Kết quả mong muốn

Sau chương này, người học phải tạo được artifact hoặc cấu hình chạy thật, kiểm tra được kết quả, biết cleanup và biết cách áp dụng vào môi trường doanh nghiệp.

Thuật ngữ cần nhớ

Thuật ngữÝ nghĩa
Tổng quan Policy-as-Code nâng cao: OPA, Gatekeeper, KyvernoNội dung này giúp người học triển khai policy-as-code nâng cao: opa, gatekeeper, kyverno theo hướng thực tế, có thể áp dụng vào pipeline, cloud platform hoặc quy trình vận hành doanh nghiệp.
Khi nào dùng?Dùng khi cần chuẩn hóa thao tác, giảm lỗi thủ công, tăng khả năng kiểm soát, audit và tự động hóa trong vòng đời phần mềm.
Rủi ro thường gặpRủi ro thường gặp là cấu hình thủ công, thiếu kiểm soát quyền, không có rollback, không có log/alert, hoặc thiếu tài liệu vận hành.
Chuẩn thực hànhƯu tiên Infrastructure as Code, pipeline as code, least privilege, traceability, monitoring, cost control và security gate sớm trong quy trình.
Kết quả mong muốnSau chương này, người học phải tạo được artifact hoặc cấu hình chạy thật, kiểm tra được kết quả, biết cleanup và biết cách áp dụng vào môi trường doanh nghiệp.

Ghi chú áp dụng thực tế doanh nghiệp

  • Không triển khai production nếu chưa có kiểm soát quyền, log, monitoring và rollback.
  • Mọi cấu hình quan trọng nên được lưu bằng code: YAML, Bicep, Terraform, Helm, Kustomize hoặc policy.
  • Luôn có owner, naming convention, tags, cost center và tài liệu vận hành.
  • Không hard-code secret. Ưu tiên OIDC, managed identity, workload identity hoặc Key Vault.
  • Lab có CLI và GUI nhằm giúp học viên hiểu cả tự động hóa lẫn giao diện vận hành thực tế.

Bài tập lab step-by-step

LAB-079 CLI Azure Portal Linux/macOS Terminal PowerShell CLI Docker Desktop

OPA policy chặn privileged container

Nền tảng thực hành: CLI, Azure Portal, Linux/macOS Terminal, PowerShell, CLI, Docker Desktop

Terminal: PowerShell 7 hoặc Bash/Linux Terminal; macOS Terminal nếu dùng macOS

Phiên bản / ghi chú:

  • Ngày tạo bài: 22/05/2026
  • Git 2.40+
  • VS Code latest stable
  • Azure CLI 2.x latest
  • Az PowerShell 12.x+
  • kubectl phù hợp version AKS
  • Helm 3.x
  • Kubernetes 1.29+
  • Docker Desktop latest
  • Syft/Grype latest
  • Cosign 2.x+
Cách 01 — CLI ưu tiên
  1. Mở terminal có `kubectl` và quyền truy cập cluster lab.
  2. Kiểm tra context: `kubectl config current-context`.
  3. Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
  4. Tạo hoặc mở file manifest/Helm/Kustomize theo lab.
  5. Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
  6. Kiểm tra pod: `kubectl get pods -n devops-lab`.
  7. Kiểm tra event: `kubectl get events -n devops-lab --sort-by=.lastTimestamp`.
  8. Kiểm tra log: `kubectl logs -n devops-lab deploy/<deployment-name>`.
  9. Sửa manifest nếu lỗi và apply lại.
  10. Cleanup namespace hoặc release sau khi lab xong.
CLI mẫu / gợi ý lệnh
Mở terminal có `kubectl` và quyền truy cập cluster lab.
Kiểm tra context: `kubectl config current-context`.
Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
Cách 02 — GUI / Portal
  1. Mở Azure Portal hoặc Azure DevOps trên trình duyệt.
  2. Chọn đúng subscription/project lab.
  3. Tìm service tương ứng với lab bằng thanh Search.
  4. Tạo hoặc mở resource cần cấu hình.
  5. Điền thông tin theo naming convention lab.
  6. Mở tab cấu hình liên quan: Networking, Identity, Deployment, Monitoring hoặc Policies.
  7. Bấm Review + Create hoặc Save.
  8. Mở Overview/Activity log để kiểm tra trạng thái.
  9. Ghi lại ảnh chụp màn hình kết quả.
  10. Xóa resource lab nếu không dùng.
Kiểm tra kết quả

Hoàn thành opa policy chặn privileged container và có bằng chứng kiểm tra: log, screenshot, pipeline run, resource hoặc output CLI.

Cleanup

Xóa tài nguyên lab không dùng, xóa secret/token demo, dọn branch/release/resource group để tránh chi phí và rủi ro.

LAB-080 CLI Azure Portal Linux/macOS Terminal PowerShell

Gatekeeper constraint cho Kubernetes

Nền tảng thực hành: CLI, Azure Portal, Linux/macOS Terminal, PowerShell

Terminal: PowerShell 7 hoặc Bash/Linux Terminal; macOS Terminal nếu dùng macOS

Phiên bản / ghi chú:

  • Ngày tạo bài: 22/05/2026
  • Git 2.40+
  • VS Code latest stable
  • Azure CLI 2.x latest
  • Az PowerShell 12.x+
  • kubectl phù hợp version AKS
  • Helm 3.x
  • Kubernetes 1.29+
Cách 01 — CLI ưu tiên
  1. Mở terminal có `kubectl` và quyền truy cập cluster lab.
  2. Kiểm tra context: `kubectl config current-context`.
  3. Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
  4. Tạo hoặc mở file manifest/Helm/Kustomize theo lab.
  5. Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
  6. Kiểm tra pod: `kubectl get pods -n devops-lab`.
  7. Kiểm tra event: `kubectl get events -n devops-lab --sort-by=.lastTimestamp`.
  8. Kiểm tra log: `kubectl logs -n devops-lab deploy/<deployment-name>`.
  9. Sửa manifest nếu lỗi và apply lại.
  10. Cleanup namespace hoặc release sau khi lab xong.
CLI mẫu / gợi ý lệnh
Mở terminal có `kubectl` và quyền truy cập cluster lab.
Kiểm tra context: `kubectl config current-context`.
Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
Cách 02 — GUI / Portal
  1. Mở Azure Portal hoặc Azure DevOps trên trình duyệt.
  2. Chọn đúng subscription/project lab.
  3. Tìm service tương ứng với lab bằng thanh Search.
  4. Tạo hoặc mở resource cần cấu hình.
  5. Điền thông tin theo naming convention lab.
  6. Mở tab cấu hình liên quan: Networking, Identity, Deployment, Monitoring hoặc Policies.
  7. Bấm Review + Create hoặc Save.
  8. Mở Overview/Activity log để kiểm tra trạng thái.
  9. Ghi lại ảnh chụp màn hình kết quả.
  10. Xóa resource lab nếu không dùng.
Kiểm tra kết quả

Hoàn thành gatekeeper constraint cho kubernetes và có bằng chứng kiểm tra: log, screenshot, pipeline run, resource hoặc output CLI.

Cleanup

Xóa tài nguyên lab không dùng, xóa secret/token demo, dọn branch/release/resource group để tránh chi phí và rủi ro.

LAB-081 CLI Azure Portal Linux/macOS Terminal PowerShell

Kyverno enforce image registry

Nền tảng thực hành: CLI, Azure Portal, Linux/macOS Terminal, PowerShell

Terminal: PowerShell 7 hoặc Bash/Linux Terminal; macOS Terminal nếu dùng macOS

Phiên bản / ghi chú:

  • Ngày tạo bài: 22/05/2026
  • Git 2.40+
  • VS Code latest stable
  • Azure CLI 2.x latest
  • Az PowerShell 12.x+
  • kubectl phù hợp version AKS
  • Helm 3.x
  • Kubernetes 1.29+
Cách 01 — CLI ưu tiên
  1. Mở terminal có `kubectl` và quyền truy cập cluster lab.
  2. Kiểm tra context: `kubectl config current-context`.
  3. Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
  4. Tạo hoặc mở file manifest/Helm/Kustomize theo lab.
  5. Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
  6. Kiểm tra pod: `kubectl get pods -n devops-lab`.
  7. Kiểm tra event: `kubectl get events -n devops-lab --sort-by=.lastTimestamp`.
  8. Kiểm tra log: `kubectl logs -n devops-lab deploy/<deployment-name>`.
  9. Sửa manifest nếu lỗi và apply lại.
  10. Cleanup namespace hoặc release sau khi lab xong.
CLI mẫu / gợi ý lệnh
Mở terminal có `kubectl` và quyền truy cập cluster lab.
Kiểm tra context: `kubectl config current-context`.
Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
Cách 02 — GUI / Portal
  1. Mở Azure Portal hoặc Azure DevOps trên trình duyệt.
  2. Chọn đúng subscription/project lab.
  3. Tìm service tương ứng với lab bằng thanh Search.
  4. Tạo hoặc mở resource cần cấu hình.
  5. Điền thông tin theo naming convention lab.
  6. Mở tab cấu hình liên quan: Networking, Identity, Deployment, Monitoring hoặc Policies.
  7. Bấm Review + Create hoặc Save.
  8. Mở Overview/Activity log để kiểm tra trạng thái.
  9. Ghi lại ảnh chụp màn hình kết quả.
  10. Xóa resource lab nếu không dùng.
Kiểm tra kết quả

Hoàn thành kyverno enforce image registry và có bằng chứng kiểm tra: log, screenshot, pipeline run, resource hoặc output CLI.

Cleanup

Xóa tài nguyên lab không dùng, xóa secret/token demo, dọn branch/release/resource group để tránh chi phí và rủi ro.

LAB-082 CLI Azure Portal Linux/macOS Terminal PowerShell

Azure Policy deny public IP

Nền tảng thực hành: CLI, Azure Portal, Linux/macOS Terminal, PowerShell

Terminal: PowerShell 7 hoặc Bash/Linux Terminal; macOS Terminal nếu dùng macOS

Phiên bản / ghi chú:

  • Ngày tạo bài: 22/05/2026
  • Git 2.40+
  • VS Code latest stable
  • Azure CLI 2.x latest
  • Az PowerShell 12.x+
  • kubectl phù hợp version AKS
  • Helm 3.x
  • Kubernetes 1.29+
Cách 01 — CLI ưu tiên
  1. Mở terminal có `kubectl` và quyền truy cập cluster lab.
  2. Kiểm tra context: `kubectl config current-context`.
  3. Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
  4. Tạo hoặc mở file manifest/Helm/Kustomize theo lab.
  5. Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
  6. Kiểm tra pod: `kubectl get pods -n devops-lab`.
  7. Kiểm tra event: `kubectl get events -n devops-lab --sort-by=.lastTimestamp`.
  8. Kiểm tra log: `kubectl logs -n devops-lab deploy/<deployment-name>`.
  9. Sửa manifest nếu lỗi và apply lại.
  10. Cleanup namespace hoặc release sau khi lab xong.
CLI mẫu / gợi ý lệnh
Mở terminal có `kubectl` và quyền truy cập cluster lab.
Kiểm tra context: `kubectl config current-context`.
Tạo namespace lab nếu cần: `kubectl create ns devops-lab`.
Apply cấu hình bằng `kubectl apply`, `helm upgrade --install` hoặc `kubectl kustomize`.
Cách 02 — GUI / Portal
  1. Mở Azure Portal hoặc Azure DevOps trên trình duyệt.
  2. Chọn đúng subscription/project lab.
  3. Tìm service tương ứng với lab bằng thanh Search.
  4. Tạo hoặc mở resource cần cấu hình.
  5. Điền thông tin theo naming convention lab.
  6. Mở tab cấu hình liên quan: Networking, Identity, Deployment, Monitoring hoặc Policies.
  7. Bấm Review + Create hoặc Save.
  8. Mở Overview/Activity log để kiểm tra trạng thái.
  9. Ghi lại ảnh chụp màn hình kết quả.
  10. Xóa resource lab nếu không dùng.
Kiểm tra kết quả

Hoàn thành azure policy deny public ip và có bằng chứng kiểm tra: log, screenshot, pipeline run, resource hoặc output CLI.

Cleanup

Xóa tài nguyên lab không dùng, xóa secret/token demo, dọn branch/release/resource group để tránh chi phí và rủi ro.

Câu hỏi ôn tập

  1. Trong chương 33, phần nào cần tự động hóa bằng pipeline/workflow?
  2. Nếu áp dụng vào môi trường production, rủi ro bảo mật lớn nhất là gì?
  3. Lab nào cần CLI? Lab nào cần Portal/GUI? Vì sao?
  4. Bạn sẽ kiểm tra thành công bằng log, output hay dashboard nào?
  5. Cleanup cần làm gì để tránh chi phí và rủi ro?
Zalo