Sobes.tech
Middle

Hogyan titkosítja a változókat a CI-ben?

sobes.tech MI

Válasz az MI-től

Titkos változókat a CI-rendszer beépített lehetőségeit használva titkosítom. Minden CI-rendszer, legyen az GitLab CI/CD, GitHub Actions vagy Jenkins, rendelkezik biztonságos titkos tárolási funkciókkal. Ezek a változók csak bizonyos build folyamat szakaszában érhetők el, és nem jelennek meg a naplókban.

Például GitLab CI esetén:

  • Környezeti változók: Csoport vagy projekt szinten tárolhatók változók. Ezek "védett" és "maszkolt" címkéket kapnak. A "védett" változók csak védett ágakon és tageken használhatók, a "maszkolt" értékek pedig el vannak rejtve a naplókban, ha teljesen megegyeznek.

    # .gitlab-ci.yml
    # Változó elérése környezeti változóként
    script:
      - echo $MY_SECRET_VARIABLE
    
  • HashiCorp Vault: Külső titkos tároló, például HashiCorp Vault integrációja. A GitLab CI autentikálhat a Vault-ba, és a futás során lekérheti a titkokat.

    # .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 # A változó automatikusan betöltődik a Vault-ból
    

GitHub Actions esetén:

  • Titkok: Repozitórium vagy szervezet szinten tárolhatók titkok. A ${{ secrets.MY_SECRET }} szintaxissal érhetők el a munkafolyamatokban. Az értékek nem jelennek meg a naplókban, és API-n keresztül sem érhetők el a mentés után.

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

Jenkins esetén:

  • Credentials Plugin: Lehetővé teszi különböző típusú hitelesítési adatok (felhasználónév/jelszó, titkos szöveg, SSH-kulcs) tárolását titkosított formában. Ezekhez hozzáférhet a Jenkinsfile-ból vagy a grafikus felületen keresztül.

    // Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        stages {
            // A build folyamat során a változók általában környezeti változóként érhetők el.
            stage('Use Secret') {
                steps {
                    withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) {
                        sh 'echo $MY_VAR'
                    }
                }
            }
        }
    }
    

Általános elvek:

  • Korlátozott láthatóság: A titkok csak azokban a szakaszokban és környezetekben érhetők el, ahol szükséges.
  • Naplók maszkolása: A titkos értékek el vannak rejtve a build naplókban.
  • Szerepkörök szétválasztása: Csak jogosult felhasználók vagy rendszerek adhatnak hozzá vagy módosíthatnak titkokat.
  • Külső tárolók használata: Komplexebb forgatókönyvekhez és központosított titokkezeléshez Vault vagy hasonló megoldások használhatók.