Sobes.tech
Middle

CI-də dəyişənləri necə şifrələyirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

CI sisteminin daxili imkanlarından istifadə edərək dəyişənləri şifrələyirəm. Hər bir CI sistemi, GitLab CI/CD, GitHub Actions və ya Jenkins olsun, təhlükəsiz şəkildə sirrləri saxlamaq üçün funksiyalara malikdir. Bu dəyişənlər yalnız inşa boru xəttinin müəyyən mərhələlərində mövcuddur və loglarda göstərilmir.

Məsələn, GitLab CI-də:

  • Ətraf mühit dəyişənləri: Qrup və ya layihə səviyyəsində dəyişənlər saxlamaq mümkündür. Onlar "mühafizə olunmuş" və "masqalanmış" kimi işarələnir. "Mühafizə olunmuş" yalnız qorunan şaxələr və etiketlərdə istifadə olunur, "masqalanmış" isə tam uyğun gəldikdə dəyəri loglarda gizlədir.

    # .gitlab-ci.yml
    # Ətraf mühit vasitəsilə dəyişənə giriş
    script:
      - echo $MY_SECRET_VARIABLE
    
  • HashiCorp Vault: HashiCorp Vault kimi xarici sirr saxlama ilə inteqrasiya. GitLab CI Vault-da autentifikasiya edə bilər və boru xəttinin icrası zamanı sirrləri əldə edə bilər.

    # .gitlab-ci.yml
    variables:
      VAULT_SERVER: "https://vault.example.com"
      VAULT_AUTH_ROLE: "gitlab-ci"
      VAULT_AUTH_PATH: "auth/kubernetes"
      VAULT_SECRETS: |
        MY_SECRET_KEY: vault/path/to/secret:key
    script:
      - echo $MY_SECRET_KEY # Dəyişən avtomatik olaraq Vault-dan yüklənir
    

GitHub Actions-də:

  • Sirrlər: Depo və ya təşkilat səviyyəsində sirrlər saxlamaq mümkündür. İş axınlarında ${{ secrets.MY_SECRET }} vasitəsilə mövcuddur. Dəyərlər loglarda göstərilmir və saxlandıqdan sonra API vasitəsilə əldə edilə bilməz.

    # .github/workflows/main.yml
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: Sirrdən istifadə et
          run: echo ${{ secrets.MY_SECRET }}
    

Jenkins-də:

  • Credentials Plugin: Müxtəlif növ giriş məlumatlarını (istifadəçi adı/şifrə, sirr mətn, SSH açarı) şifrəli şəkildə saxlamağa imkan verir. Jenkinsfile və ya qrafik interfeys vasitəsilə əldə edilə bilər.

    // Jenkinsfile (İlkin boru xətti)
    pipeline {
        agent any
        stages {
            İnşa prosesində, dəyişənlər istifadə edilərkən, onlar adətən mühit dəyişənləri kimi mövcuddur.
            stage('Sirr istifadə et') {
                steps {
                    withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) {
                        sh 'echo $MY_VAR'
                    }
                }
            }
        }
    }
    

Ümumi prinsiplər:

  • Əhatə dairəsinin minimallaşdırılması: Sirrlər yalnız lazım olan mərhələlərdə və mühitlərdə mövcuddur.
  • Logların maskalanması: Sirrlərin dəyərləri boru xətti icrasının loglarında gizlidir.
  • Rolların ayrılması: Yalnız icazəli istifadəçilər və ya sistemlər sirrləri əlavə və ya dəyişə bilər.
  • Xarici saxlama istifadə olunması: Daha mürəkkəb ssenarilər və mərkəzləşdirilmiş sirr idarəetməsi üçün Vault və ya oxşar həllər istifadə olunur.