Sobes.tech
Middle

Kā jūs šifrējat mainīgos CI?

sobes.tech AI

Atbilde no AI

Es šifrēju mainīgos, izmantojot CI sistēmas iebūvētās iespējas. Katra CI sistēma, vai tas būtu GitLab CI/CD, GitHub Actions vai Jenkins, ir funkcijas drošai slepeno datu glabāšanai. Šīs mainīgās ir pieejamas tikai noteiktos būvniecības procesa posmos un nav redzamas žurnālos.

Piemēram, GitLab CI:

  • Vides mainīgās: Grupas vai projekta līmenī var saglabāt mainīgās. Tās ir marķētas kā "aizsargātas" un "maskētas". "Aizsargātas" tiek izmantotas tikai aizsargātās zaru un zīmogu gadījumā, "maskētas" slepen vērtību žurnālos, ja tā pilnībā sakrīt.

    # .gitlab-ci.yml
    # Pieeja mainīgajai caur vides mainīgo
    script:
      - echo $MY_SECRET_VARIABLE
    
  • HashiCorp Vault: Integrācija ar ārēju slepeno datu glabātuvi, piemēram, HashiCorp Vault. GitLab CI var autentificēties Vault un saņemt slepenos datus izpildes laikā.

    # .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 # Mainīgais automātiski ielādēts no Vault
    

GitHub Actions:

  • Slepenie dati: Repozitārija vai organizācijas līmenī var glabāt slepenos datus. Tie ir pieejami darba plūsmās caur ${{ secrets.MY_SECRET }}. Vērtības nav redzamas žurnālos un pēc saglabāšanas tās nevar iegūt caur API.

    # .github/workflows/main.yml
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: Izmantot slepeno
          run: echo ${{ secrets.MY_SECRET }}
    

Jenkins:

  • Credentials Plugin: ļauj glabāt dažādu veidu akreditācijas datus (lietotājvārds/parole, slepens teksts, SSH atslēga) šifrētā veidā. Tie ir pieejami Jenkinsfile vai caur grafisko saskarni.

    // Jenkinsfile (Deklaratīvs pipeline)
    pipeline {
        agent any
        stages {
            Darba procesā, kur izmanto mainīgās, tie parasti ir pieejami kā vides mainīgās.
            stage('Use Secret') {
                steps {
                    withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) {
                        sh 'echo $MY_VAR'
                    }
                }
            }
        }
    }
    

Vispārējie principi:

  • Minimizēt apjomu: Slepenās ir pieejamas tikai tiem posmiem un vidēs, kur tās ir nepieciešamas.
  • Žurnālu maskēšana: Slepeno vērtības ir slēptas izpildes žurnālos.
  • Lomu atdalīšana: Tikai autorizēti lietotāji vai sistēmas var pievienot/mainīt slepenos datus.
  • Izmanto ārējos glabātuves: Sarežģītākiem scenārijiem un centralizētai slepeno datu pārvaldībai tiek izmantoti Vault vai līdzīgi risinājumi.