Sobes.tech
Middle

CIda o'zgaruvchilarni qanday shifrlaysiz?

sobes.tech AI

AIdan javob

CI tizimining o'rnatilgan imkoniyatlaridan foydalanib, o'zgaruvchilarni shifrlayman. GitLab CI/CD, GitHub Actions yoki Jenkins bo'lsin, har bir CI tizimida maxfiy ma'lumotlarni xavfsiz saqlash uchun funksiyalar mavjud. Bu o'zgaruvchilar faqat qurilish jarayonining ma'lum bosqichlarida mavjud bo'lib, loglarda ko'rsatilmaydi.

Masalan, GitLab CI da:

  • Atrof-muhit o'zgaruvchilari: Guruh yoki loyiha darajasida o'zgaruvchilar saqlanishi mumkin. Ular "himoyalangan" va "maskalangan" sifatida belgilangan. "Himoyalangan" faqat himoyalangan tarmoqlar va teglar uchun ishlatiladi, "maskalangan" qiymat loglarda to'liq mos kelganda yashiriladi.

    # .gitlab-ci.yml
    # Atrof-muhit orqali o'zgaruvchiga kirish
    script:
      - echo $MY_SECRET_VARIABLE
    
  • HashiCorp Vault: HashiCorp Vault kabi tashqi maxfiy saqlash joyi bilan integratsiya. GitLab CI Vault ga autentifikatsiya qilishi va jarayon davomida maxfiy ma'lumotlarni olishi mumkin.

    # .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 # Maxfiy ma'lumot Vault dan avtomatik yuklanadi
    

GitHub Actions da:

  • Secrets: Repozitoriya yoki tashkilot darajasida maxfiy ma'lumotlar saqlanishi mumkin. Ular ${{ secrets.MY_SECRET }} orqali ish jarayonlarida mavjud. Qiymatlar loglarda ko'rsatilmaydi va saqlangandan so'ng API orqali olinmaydi.

    # .github/workflows/main.yml
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: Maxfiy ma'lumotdan foydalanish
          run: echo ${{ secrets.MY_SECRET }}
    

Jenkins da:

  • Credentials Plugin: Turli xil identifikatsiya ma'lumotlarini (foydalanuvchi nomi/parol, maxfiy matn, SSH kalit) shifrlangan holda saqlash imkonini beradi. Jenkinsfile yoki grafik interfeys orqali kirish mumkin.

    // Jenkinsfile (Deklarativ pipeline)
    pipeline {
        agent any
        stages {
            Qurilish jarayonida, o'zgaruvchilar ishlatilganda, ular odatda atrof-muhit o'zgaruvchilari sifatida mavjud bo'ladi.
            stage('Maxfiy ma'lumotdan foydalanish') {
                steps {
                    withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) {
                        sh 'echo $MY_VAR'
                    }
                }
            }
        }
    }
    

Umumiy prinsiplari:

  • Doirani minimallashtirish: Maxfiy ma'lumotlar faqat kerakli bosqichlar va muhitlarda mavjud bo'lishi kerak.
  • Loglarni yashirish: Maxfiy ma'lumotlarning qiymatlari pipeline bajarilishining loglarida yashiriladi.
  • Rollarni ajratish: Faqat ruxsat etilgan foydalanuvchilar yoki tizimlar maxfiy ma'lumotlarni qo'shishi/ o'zgartirishi mumkin.
  • Tashqi saqlash joylaridan foydalanish: Murakkabroq ssenariylar va markaziy maxfiy ma'lumotlarni boshqarish uchun Vault yoki shunga o'xshash yechimlar qo'llaniladi.