Continuous Integration và Continuous Deployment (CI/CD) là các phương pháp cơ bản trong phát triển phần mềm hiện đại. Developers sử dụng phương pháp này hẳn cũng đã quen thuộc với GitHub và Jenkins. Bảo mật giao tiếp giữa GitHub và Jenkins bằng SSH là rất quan trọng để Jenkins có thể truy cập mã nguồn một cách an toàn và kích hoạt các quy trình tự động, duy trì tính toàn vẹn và bảo mật của workflow.

xác thực SSH key giữa github và jenkins

Khái niệm Khóa xác thực SSH

SSH (Secure SHell) là một giao thức được sử dụng để truy cập máy chủ từ xa và truyền file một cách an toàn. Thay vì chỉ sử dụng usernames và passwords, SSH còn hỗ trợ khóa xác thực, vừa an toàn vừa thuận tiện hơn. SSH bao gồm 1 cặp khóa public - private: private key sẽ được bảo mật, trong khi public key có thể chia sẻ được.

Bài viết liên quan: SSH Root login và giới hạn truy cập SSH

Cài đặt xác thực SSH giữa GitHub và Jenkins

  1. Tạo cặp khóa SSH: Trên máy chủ Jenkins, sử dụng lệnh ssh-keygen. Lệnh này sẽ tạo ra 2 tệp: id_rsa (private key) và id_rsa.pub (public key).
  2. Thêm public key vào GitHub: Vào cài đặt tài khoản GitHub. Chuyển sang SSH and GPG keys > New SSH Key. Paste nội dung của id_rsa.pub vào key field và save lại.
  3. Config Jenkins để sử dụng SSH key: Trong Jenkins, đi tới Manage Jenkins > Manage Credentials. Thêm SSH Username mới và thông tin private key. Sử dụng nội dung của id_rsa cho private key. Khi tạo Job trên Jenkins từ GitHub, hãy sử dụng thông tin xác thực SSH này.
  4. Kiểm tra quá trình thiết lập: Kích hoạt Job Jenkins được lấy từ GitHub. Lưu ý, kết nối phải được thiết lập an toàn, có nhật ký (logs) cho biết xác thực dựa trên khóa SSH đã được thực hiện.

Lợi ích của khóa xác thực SSH

  • Bảo mật nâng cao: Các cặp khóa SSH an toàn và khó bẻ khóa hơn so với mật khẩu truyền thống.
  • Tích hợp liền mạch: Tự động hóa quá trình pull/build mà không cần nhắc password prompts.
  • Quản lý truy cập: Dễ dàng theo dõi hệ thống nào truy cập vào repo của bạn.
  • Sau khi thiết lập SSH giữa GitHub và Jenkins, bạn có thể tạo Jenkinsfile để sử dụng SSH để lấy mã nguồn và thực hiện các hoạt động liên quan đến việc build phần mềm từ mã nguồn đã được lấy về từ GitHub.

Ví dụ 1 đoạn script đơn giản như sau:

pipeline {
    agent any

    environment {
        GIT_SSH_KEY = credentials('github-ssh-key')  // ID of the SSH key added in Jenkins credentials
    }

    stages {
        stage('Checkout from GitHub') {
            steps {
                script {
                    // Define custom GIT SSH command
                    sh "ssh-agent bash -c 'ssh-add ${GIT_SSH_KEY}; git clone [email protected]:YourUsername/YourRepo.git'"
                }
            }
        }

        stage('Install Dependencies') {
            steps {
                sh 'npm install'
            }
        }

        stage('Run Tests') {
            steps {
                sh 'npm test'
            }
        }
    }
}

Chuyện gì sẽ xảy ra nếu thông tin SSH key bị lộ?

Việc để lộ lọt thông tin SSH key là điều cực kỳ nguy hiểm với hệ thống của cả công ty bạn. Đây không chỉ là vấn đề bảo mật đơn thuần, mà còn có thể gây nên hậu quả nghiêm trọng cho toàn bộ hệ thống và quy trình phát triển nói chung.

Nếu SSH key rơi vào tay hacker, chúng có thể bị sử dụng để truy cập vào hệ thống, thực hiện các hành vi phá hoại hoặc thậm chí đánh cắp các dữ liệu quan trọng. Điều này sẽ gây ra tổn thất tài chính, làm ảnh hưởng đến hình ảnh thương hiệu công ty và đánh mất uy tín trong mắt khách hàng.

Vì vậy, việc sử dụng các biện pháp để bảo vệ thông tin SSH key là vô cùng quan trọng.

Quản lí SSH key an toàn với Locker Secrets Manager

Các phương pháp thông thường mà dev hay sử dụng để lưu SSH là:

  • Plaintext
  • Hardcode
  • Config
  • Lưu trong GitHub, GitLab, BitBucket,…

Tuy nhiên, đây là các phương pháp lưu trữ không an toàn, hacker vẫn có thể dò quét và chiếm thông tin khóa xác thực SSH của bạn và tấn công hệ thống. Vì vậy, để tối đa hóa bảo mật và an toàn cho quy trình phát triển, các công cụ quản lý dữ liệu bí mật như Locker Secrets Manager là thiết yếu đối với bất cứ developer chuyên nghiệp nào.

Có thể bạn quan tâm: Hơn 12 triệu secrets và khóa xác thực bị rò rỉ trên GitHub vào năm 2023

Locker Secrets Manager sẽ giúp bạn:

  • Lưu trữ và quản lý an toàn các thông tin nhạy cảm như mật khẩu, khóa SSH, khóa API, token truy cập ⇒ giảm thiểu rủi ro truy cập trái phép và lộ thông tin, giúp bảo vệ dữ liệu của bạn.
  • Quản lý tập trung các secrets cần sử dụng. Bạn có thể dễ dàng thêm, sửa đổi hoặc xóa secrets mà không cần phải thực hiện thủ công trên nhiều hệ thống.
  • Mã hóa dữ liệu tối đa, bảo vệ chúng khỏi sự truy cập trái phép. Thậm chí khi có một sự tấn công xâm nhập, thông tin nhạy cảm vẫn được bảo vệ.
  • Phân quyền rõ ràng ai được phép truy cập và sử dụng các secrets nào ⇒ ngăn chặn truy cập không cần thiết và tăng cường bảo mật hệ thống.
  • Locker còn có chức năng quản lý hoạt động, cho phép bạn ghi lại và theo dõi các hoạt động liên quan đến secrets. Bạn có thể dễ dàng kiểm tra và xác minh việc sử dụng của các secrets này.
  • Locker tích hợp tốt với các công cụ và dịch vụ phổ biến trong quy trình phát triển phần mềm như AWS, Azure, và các dịch vụ cloud khác, giúp bạn dễ dàng tích hợp và sử dụng secrets trong các ứng dụng và hệ thống của mình mà không gặp phải sự cản trở lớn.

Đăng ký tài khoản và trải nghiệm Locker Secrets Manager tại: https://sm.locker.io/secrets

Nguồn tham khảo: XeroCodee

Chia sẻ bài viết này