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.