Como é que encripta variáveis no CI?
sobes.tech IA
Resposta da IA
Cripto variáveis usando as funcionalidades integradas do sistema CI. Cada sistema CI, seja GitLab CI/CD, GitHub Actions ou Jenkins, possui funções para armazenar segredos de forma segura. Essas variáveis estão disponíveis apenas em certas etapas do pipeline de construção e não são exibidas nos logs.
Por exemplo, no GitLab CI:
-
Variáveis de ambiente: No nível do grupo ou projeto, pode-se guardar variáveis. Elas são marcadas como "protegidas" e "enmascaradas". As "protegidas" são usadas apenas em ramos e tags protegidos, e as "enmascaradas" ocultam o valor nos logs se coincidirem completamente.
# .gitlab-ci.yml # Acesso à variável através do ambiente script: - echo $MY_SECRET_VARIABLE -
HashiCorp Vault: Integração com um armazenamento externo de segredos, como HashiCorp Vault. O GitLab CI pode autenticar-se no Vault e obter segredos durante a execução do pipeline.
# .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 # Variável carregada automaticamente do Vault
Em GitHub Actions:
-
Secrets: No nível do repositório ou organização, pode-se guardar segredos. Disponíveis nos fluxos de trabalho através de
${{ secrets.MY_SECRET }}. Os valores não são exibidos nos logs e não podem ser obtidos via API após serem guardados.# .github/workflows/main.yml jobs: build: runs-on: ubuntu-latest steps: - name: Usar segredo run: echo ${{ secrets.MY_SECRET }}
No Jenkins:
-
Credentials Plugin: Permite guardar diferentes tipos de credenciais (login/senha, texto secreto, chave SSH) de forma encriptada. Podem ser acessadas no Jenkinsfile ou através da interface gráfica.
// Jenkinsfile (Pipeline Declarativo) pipeline { agent any stages { Dentro do processo de build, onde as variáveis são usadas, elas geralmente estão disponíveis como variáveis de ambiente. stage('Usar segredo') { steps { withCredentials([string(credentialsId: 'my-secret-id', variable: 'MY_VAR')]) { sh 'echo $MY_VAR' } } } } }
Princípios gerais:
- Minimização do escopo: Segredos estão disponíveis apenas nas etapas e ambientes onde são necessários.
- Mascaramento de logs: Os valores dos segredos são ocultados nos logs de execução do pipeline.
- Separação de funções: Apenas usuários ou sistemas autorizados podem adicionar/alterar segredos.
- Uso de armazenamento externo: Para cenários mais complexos e gestão centralizada de segredos, são utilizados Vault ou soluções similares.