Help me een GitHub Actions-workflow maken dat omgevingsspecifieke geheimen veilig beheert.
description
Door deze prompt te gebruiken, kun je ervoor zorgen dat gevoelige informatie veilig wordt behandeld in verschillende omgevingen, het risico op datalekken vermindert en de naleving van beveiligingspraktijken verbetert.
prompt
try_prompt
Ik heb hulp nodig bij het ontwerpen van een GitHub Actions-workflow die tijdens mijn CI/CD-proces op een veilige manier omgevingsspecifieke geheimen beheert. Projecttype: {{project_type}}. Te onderst ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een GitHub Actions-workflow die omgevingsspecifieke geheimen ophaalt en beheert via HashiCorp Vault, met encryptie voor een Node.js-project. Deze workflow ondersteunt de omgevingen ontwikkeling en productie en zorgt voor een veilige handling van geheimen.
```yaml
name: CI/CD Workflow
on:
push:
branches:
- main
- develop
env:
VAULT_ADDR: ${{ secrets.VAULT_ADDR }} # URL van je HashiCorp Vault
VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }} # Vault token, veilig opgeslagen in GitHub Secrets
ENVIRONMENT: ${{ github.ref == 'refs/heads/main' && 'production' || 'development' }}
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Installeer Node.js
uses: actions/setup-node@v3
with:
node-version: '16' # Pas de versie aan indien nodig
- name: Installeer dependencies
run: npm install
- name: Authenticeer bij HashiCorp Vault
run: |
# Bijvoorbeeld: geen extra stap nodig als VAULT_TOKEN al is ingesteld
echo "Vault authenticatie succesvol"
- name: Haal omgevingsspecifieke geheimen op uit Vault
id: fetch_secrets
run: |
# Voorbeeld: geheime sleutels ophalen
SECRET_KEY=$(vault kv get -field=secret_key secret/${{ env.ENVIRONMENT }})
API_KEY=$(vault kv get -field=api_key secret/${{ env.ENVIRONMENT }})
# Exporteren als GitHub Actions-omgevingsvariabelen
echo "SECRET_KEY=${SECRET_KEY}" >> $GITHUB_ENV
echo "API_KEY=${API_KEY}" >> $GITHUB_ENV
- name: Encrypteer geheimen voor veilige opslag (optioneel)
if: false # Vervang door waar nodig, bijvoorbeeld voor encryptie voor externe opslag
run: |
# Bijvoorbeeld: gebruik OpenSSL om geheimen te encrypten
echo "${SECRET_KEY}" | openssl enc -aes-256-cbc -a -salt -out secret_key.enc -pass pass:jeWachtwoord
- name: Voer tests
run: npm test
- name: Build project
run: npm run build
- name: Deploy naar omgeving
env:
SECRET_KEY: ${{ env.SECRET_KEY }}
API_KEY: ${{ env.API_KEY }}
run: |
# Gebruik de opgehaalde geheime variabelen voor deployment
echo "Deploy naar ${{ env.ENVIRONMENT }} met geheime sleutels"
# Voorbeeld: gebruik geheime sleutels in je deployment scripts
# npm run deploy -- --secret-key=$SECRET_KEY --api-key=$API_KEY
```
**Belangrijke punten:**
- **Veiligheid:** De geheime sleutels worden opgehaald uit HashiCorp Vault en opgeslagen in GitHub Actions-omgeving variabelen, waardoor ze niet in de repository of logs zichtbaar zijn.
- **Encryptie:** Indien je geheime data wilt encrypten voor opslag of overdracht, kun je OpenSSL of andere encryptietools gebruiken zoals getoond.
- **Secrets in GitHub:** Zorg dat `VAULT_ADDR` en `VAULT_TOKEN` veilig zijn opgeslagen in GitHub Secrets.
- **Aanpassingen:** Pas de Vault paths en fields aan op basis van jouw Vault configuratie.
- **Omgevingsafhankelijkheid:** De variabele `ENVIRONMENT` bepaalt automatisch of je werkt in ontwikkeling of productie.
Wil je dat ik het verder aanpas of meer details toevoeg?
provider: deepseek
model: deepseek-chat
Hier is een veilige GitHub Actions-workflow voor Node.js met HashiCorp Vault voor geheimbeheer:
```yaml
name: CI/CD Pipeline met Vault
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
env:
VAULT_ADDR: https://uw-vault-server:8200
NODE_VERSION: '18'
jobs:
deploy-dev:
runs-on: ubuntu-latest
environment: ontwikkeling
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Installeer afhankelijkheden
run: npm ci
- name: Authenticeer met Vault
uses: hashicorp/vault-action@v2
with:
url: ${{ env.VAULT_ADDR }}
method: jwt
role: development-role
secrets: |
secret/data/development/app secrets | APP_CONFIG ;
secret/data/development/database secrets | DB_CONFIG
- name: Decrypt en laad omgevingsvariabelen
run: |
echo "$APP_CONFIG" | base64 --decode > app-config.json
echo "$DB_CONFIG" | base64 --decode > db-config.json
- name: Voer tests uit
run: npm test
env:
NODE_ENV: test
- name: Deploy naar ontwikkeling
run: |
# Voeg uw deploy script toe
npm run deploy:dev
deploy-prod:
runs-on: ubuntu-latest
environment: productie
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Installeer afhankelijkheden
run: npm ci
- name: Authenticeer met Vault
uses: hashicorp/vault-action@v2
with:
url: ${{ env.VAULT_ADDR }}
method: jwt
role: production-role
secrets: |
secret/data/production/app secrets | APP_CONFIG ;
secret/data/production/database secrets | DB_CONFIG ;
secret/data/production/api-keys secrets | API_KEYS
- name: Decrypt en valideer configuratie
run: |
echo "$APP_CONFIG" | base64 --decode > app-config.json
echo "$DB_CONFIG" | base64 --decode > db-config.json
echo "$API_KEYS" | base64 --decode > api-keys.json
- name: Voer security scan uit
run: npm run security-scan
- name: Deploy naar productie
run: |
npm run deploy:prod
```
**Belangrijke beveiligingsmaatregelen:**
1. **Vault JWT Authentication**:
```yaml
# GitHub OIDC token voor veilige authenticatie
permissions:
id-token: write
contents: read
```
2. **Omgevingsspecifieke secrets**:
- Ontwikkeling: `secret/data/development/`
- Productie: `secret/data/production/`
3. **Encryptie configuratie in Vault**:
```bash
# Vault transit engine voor encryptie
vault secrets enable transit
vault write transit/keys/ci-cd-key type=aes256-gcm96
```
4. **GitHub Environment protection**:
- Configureer environment secrets in GitHub
- Vereis review voor productie deployment
**Setup vereisten**:
1. Configureer Vault JWT auth backend
2. Maak policies voor development/production roles
3. Sla encrypted secrets op in Vault KV v2 engine
4. Configureer GitHub OIDC provider in Vault
De workflow gebruikt base64 encoding voor extra beveiliging en scheidt ontwikkel- en productiegeheimen volledig.

