Schnellstart
Diese lokale Evaluation speichert in PostgreSQL, erzeugt eindeutige Zugangsdaten und lauscht nur auf Ihrem Rechner. Lesen Sie vor gemeinsamem oder entferntem Zugriff den Produktivbetrieb.
Sie brauchen Docker mit Compose v2 und Netzwerkzugriff von diesem Rechner auf Ihre Jira-Data-Center-Instanz.
1. Compose-Datei speichern
Speichern Sie dies als docker-compose.yml in einem leeren Verzeichnis.
services:
postgres:
image: postgres:17-alpine
environment:
- POSTGRES_DB=riskscanner
- POSTGRES_USER=riskscanner
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?Create the one-time .env file first}
volumes:
- scanner-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U riskscanner -d riskscanner"]
interval: 5s
timeout: 3s
retries: 20
networks:
- scanner-network
scanner:
image: arcsoftklg/sensitive-data-scanner:latest
depends_on:
postgres:
condition: service_healthy
ports:
# 8080 ist der Scanner. 8082 ist Keycloak, hier veröffentlicht, weil
# Keycloak den Netzwerk-Namespace dieses Containers teilt - siehe unten.
- "127.0.0.1:8080:8080"
- "127.0.0.1:8082:8082"
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/riskscanner
- SPRING_DATASOURCE_USERNAME=riskscanner
- SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD:?Create the one-time .env file first}
- OIDC_ISSUER_URI=http://localhost:8082/realms/sensitive-data-scanner
- APP_BASE_URL=http://localhost:8080
- JIRA_CREDENTIAL_ENCRYPTION_KEY=${JIRA_CREDENTIAL_ENCRYPTION_KEY:?Create the one-time .env file first}
- FINDING_FINGERPRINT_HMAC_SECRET=${FINDING_FINGERPRINT_HMAC_SECRET:?Create the one-time .env file first}
restart: unless-stopped
networks:
- scanner-network
keycloak:
image: quay.io/keycloak/keycloak:26.1
# Keycloak läuft bewusst im Netzwerk-Namespace des Scanners, damit
# http://localhost:8082 für Ihren Browser und für den Scanner dasselbe
# bedeutet. Dieser Service deklariert deshalb keine eigenen Ports oder
# Netzwerke.
network_mode: "service:scanner"
depends_on:
- scanner
command: start-dev --import-realm --http-port=8082
environment:
- KC_BOOTSTRAP_ADMIN_USERNAME=keycloak
- KC_BOOTSTRAP_ADMIN_PASSWORD=${KEYCLOAK_BOOTSTRAP_ADMIN_PASSWORD:?Create the one-time .env file first}
- KC_HOSTNAME=http://localhost:8082
- KC_HOSTNAME_STRICT=false
- KC_HEALTH_ENABLED=true
configs:
- source: scanner-realm
target: /opt/keycloak/data/import/sensitive-data-scanner-realm.json
restart: unless-stopped
configs:
scanner-realm:
content: |
{
"realm": "sensitive-data-scanner",
"enabled": true,
"roles": {
"realm": [
{ "name": "ADMIN", "description": "Application administrator" },
{ "name": "USER", "description": "Authenticated application user" }
]
},
"clients": [
{
"clientId": "sensitive-data-scanner-frontend",
"name": "Sensitive Data Scanner Frontend",
"enabled": true,
"publicClient": true,
"protocol": "openid-connect",
"standardFlowEnabled": true,
"directAccessGrantsEnabled": true,
"redirectUris": ["http://localhost:8080/*"],
"webOrigins": ["http://localhost:8080"]
}
],
"users": [
{
"username": "admin",
"enabled": true,
"email": "admin@example.test",
"firstName": "Admin",
"lastName": "User",
"credentials": [{ "type": "password", "value": "${EVALUATION_ADMIN_PASSWORD:?Create the one-time .env file first}", "temporary": false }],
"realmRoles": ["ADMIN", "USER"]
},
{
"username": "user",
"enabled": true,
"email": "user@example.test",
"firstName": "Regular",
"lastName": "User",
"credentials": [{ "type": "password", "value": "${EVALUATION_USER_PASSWORD:?Create the one-time .env file first}", "temporary": false }],
"realmRoles": ["USER"]
}
]
}
networks:
scanner-network:
driver: bridge
volumes:
scanner-postgres-data:
2. Einmalige lokale Secrets erzeugen
Führen Sie dies einmal im selben Verzeichnis aus. Ein erneuter Aufruf behält die bestehenden Werte, damit gespeicherte Zugangsdaten und Fundidentitäten nach einem Neustart lesbar bleiben.
umask 077
if [ ! -f .env ]; then
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 24)
JIRA_CREDENTIAL_ENCRYPTION_KEY=$(openssl rand -base64 32 | tr -d '\n')
FINDING_FINGERPRINT_HMAC_SECRET=$(openssl rand -hex 48)
KEYCLOAK_BOOTSTRAP_ADMIN_PASSWORD=$(openssl rand -hex 24)
EVALUATION_ADMIN_PASSWORD=$(openssl rand -hex 16)
EVALUATION_USER_PASSWORD=$(openssl rand -hex 16)
EOF
fi
chmod 600 .env
Bewahren Sie .env zusammen mit dem Datenbank-Backup auf. Geht eines der
Scanner-Secrets verloren, werden gespeicherte Jira-Zugangsdaten oder
Fundidentitäten unbrauchbar.
3. Starten
docker compose up
Der erste Start lädt drei Images und führt die Datenbankmigrationen aus, rechnen
Sie mit ein paar Minuten. Fertig ist er, sobald
http://localhost:8080/actuator/health antwortet.
4. Anmelden
Öffnen Sie http://localhost:8080/ui/ und melden Sie sich als admin mit
dem Passwort aus grep EVALUATION_ADMIN_PASSWORD .env an.
Das mitgelieferte Keycloak hat zusätzlich den Benutzer user ohne
Administrationsrechte. Sein Passwort steht in EVALUATION_USER_PASSWORD, falls
Sie die rein lesende Sicht der Rolle USER sehen möchten.
Die Ports sind an Loopback gebunden, das mitgelieferte Keycloak stellt Tokens aber weiterhin über unverschlüsseltes HTTP aus. Nutzen Sie für gemeinsamen oder entfernten Zugriff HTTPS und Ihren echten Identity Provider gemäss Produktivbetrieb.
5. Jira verbinden
Gehen Sie zu Administration → Jira-Verbindung und tragen Sie die Basis-URL Ihrer Jira-Data-Center-Instanz und ein Servicekonto ein. Das Konto braucht Projekte durchsuchen auf den zu scannenden Projekten und sonst nichts; der Scanner liest ausschliesslich, über die REST-API. Siehe Jira-Verbindung.
6. Scan starten
Gehen Sie zu Scans und starten Sie einen. Die Evaluation umfasst die ersten 1000 Vorgänge auf einem einzelnen Worker. Siehe Erster Scan.
Was Sie ohne Lizenz bekommen
Ohne installierte Lizenzdatei läuft der Scanner eine fünftägige Evaluation:
| Evaluation | Lizenziert | |
|---|---|---|
| Vorgänge pro Scan | 1000 | Unbegrenzt |
| Scan-Worker | 1 | Konfigurierbar |
| Anhangsinhalte | Werden nicht gelesen | Mit Feature SCAN_ATTACHMENTS |
| Dauer | 5 Tage ab erster Nutzung | Gemäss Lizenzdatei |
Die Lizenzseite zeigt die verbleibenden Tage. Endet die Evaluation, bleibt alles bereits Gescannte lesbar - Funde, Audit-Log, CSV-Export -, aber es startet kein neuer Scan mehr, bis eine Lizenz installiert ist. Die Frist hängt an den ältesten Daten in der Datenbank und nicht an einem Lizenzeintrag; das Löschen der Lizenz setzt sie also nicht zurück.