Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
krane — Werkzeug zur statischen Analyse und Visualisierung von Kubernetes RBAC | Kitploit
Tools/GitHubGitHub/appvia/krane
Statische AnalyseSchwachstellenscannerKonfigurationsprüfungCloud-Sicherheit
GitHubappvia/krane

krane

Werkzeug zur statischen Analyse und Visualisierung von Kubernetes RBAC

Repository anzeigen
74434vor 5 TagenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Krane

Kubernetes-RBAC-Analyse leicht gemacht

Stability:Beta CircleCI GitHub tag (latest SemVer) License: Apache-2.0 Docker Repository on Quay.io

Krane ist ein einfaches statisches Analysewerkzeug für Kubernetes-RBAC. Es erkennt potenzielle Sicherheitsrisiken im K8s-RBAC-Design und macht Vorschläge, wie diese gemildert werden können. Kranes Dashboard zeigt die aktuelle RBAC-Sicherheitslage und ermöglicht es, durch deren Definition zu navigieren.

Funktionen

  • RBAC-Risikoregeln – Krane wertet eine Reihe integrierter RBAC-Risikoregeln aus. Diese können mit einem Satz benutzerdefinierter Regeln geändert oder erweitert werden.
  • Portabilität – Krane kann in einem der folgenden Modi ausgeführt werden:
    • Lokal als CLI oder Docker-Container.
    • In CI/CD-Pipelines als Schrittaktion, die potenzielle RBAC-Fehler erkennt, bevor sie auf den Cluster angewendet werden.
    • Als eigenständiger Dienst, der kontinuierlich den Zustand von RBAC innerhalb eines Kubernetes-Clusters analysiert.
  • Berichterstattung – Krane erstellt einen leicht verständlichen RBAC-Risikobericht in maschinenlesbarem Format.
  • Dashboard – Krane wird mit einer einfachen Dashboard-Benutzeroberfläche geliefert, die Ihnen hilft, das RBAC-Design im Cluster zu verstehen. Das Dashboard bietet einen allgemeinen Überblick über die RBAC-Sicherheitslage und hebt erkannte Risiken hervor. Es ermöglicht auch die weitere Inspektion von RBAC-Kontrollen über facettierte Baum- und Netzwerkgraphenansichten.
  • Benachrichtigungen – Es benachrichtigt über erkannte mittlere und hohe Risiken über seine Slack-Integration.
  • RBAC im Graphen – Krane indiziert das gesamte Kubernetes-RBAC in einer lokalen Graphdatenbank, was jede weitere Ad-hoc-Abfrage von RBAC-Daten mit beliebigen CypherQL-Abfragen einfach macht.

Inhalt

  • Schnellstart
  • Anleitung
  • Architektur
  • Kubernetes-Bereitstellung
  • Benachrichtigungen
  • Lokale Entwicklung
  • Mitwirken an Krane
  • Community
  • Fahrplan
  • Lizenz

Schnellstart

Sie können mit Krane beginnen, indem Sie es über ein Helm-Chart in Ihrem Ziel-Kubernetes-Cluster installieren oder es lokal mit Docker ausführen.

Helm-Chart installieren

Es wird davon ausgegangen, dass Sie die Helm CLI auf Ihrem Rechner installiert haben.```sh $ helm repo add appvia https://appvia.github.io/krane $ helm repo update $ helm install krane appvia/krane --namespace krane --create-namespace

root@kitploit:~
Folgen Sie der Ausgabe der Helm-Chart-Installation, um das Krane-Dashboard per Port-Forwarding zu erreichen.

### Ausführung mit Docker

Es wird davon ausgegangen, dass Sie [docker](https://docs.docker.com/get-docker/) auf Ihrem lokalen Rechner installiert haben. Installieren Sie [docker-compose](https://docs.docker.com/compose/install/#install-compose), falls noch nicht geschehen.

Krane ist von RedisGraph abhängig. Der `docker-compose`-Stack definiert alles, was zum Erstellen und Ausführen des _Krane_-Dienstes lokal erforderlich ist. Er kümmert sich auch um die [RedisGraph](https://oss.redislabs.com/redisgraph/)-Abhängigkeit.```
docker-compose up -d

Krane-Docker-Image wird automatisch vorgebaut, falls es nicht bereits lokal vorhanden ist.

Beachten Sie, dass beim lokalen Ausführen von docker-compose Krane RBAC report und dashboard nicht automatisch startet. Stattdessen schläft der Container standardmäßig für 24h – dieser Wert kann in docker-compose.override.yml angepasst werden. Führen Sie exec in einem laufenden Krane-Container aus, um Befehle auszuführen.

Lokales docker-compose mountet auch die kube config (~/.kube/config) im Container, sodass Sie Berichte gegen alle Kubernetes-Cluster ausführen können, auf die Sie bereits Zugriff haben.

Führen Sie exec in einem laufenden Krane-Container aus.```sh docker-compose exec krane bash

root@kitploit:~
Sobald Sie im Container sind, können Sie die `krane`-Befehle verwenden. Versuchen Sie `krane -help`.```sh
krane -h

Um zu überprüfen, welche Dienste ausgeführt werden und die zugehörigen Ports:``` docker-compose ps

root@kitploit:~
Um _Krane_ und seine abhängigen Dienste zu stoppen:```
docker-compose down

Anwendungsleitfaden

Befehle```

$ krane --help

NAME:

root@kitploit:~
krane

DESCRIPTION:

root@kitploit:~
Kubernetes RBAC static analysis & visualisation tool

COMMANDS:

root@kitploit:~
dashboard Start K8s RBAC dashboard server
help      Display global or [command] help documentation
report    Run K8s RBAC report

GLOBAL OPTIONS:

root@kitploit:~
-h, --help
    Display help documentation

-v, --version
    Display version information

-t, --trace
    Display backtrace when an error occurs

AUTHOR:

root@kitploit:~
Marcin Ciszak <[email protected]> - Appvia Ltd <appvia.io>
root@kitploit:~
### RBAC-Bericht generieren

#### Mit lokalem `kubectl`-Kontext

Um einen Bericht gegen einen laufenden Cluster auszuführen, müssen Sie einen _kubectl_-Kontext bereitstellen.```
krane report -k <context>

Sie können auch das Flag -c <cluster-name> übergeben, wenn Sie das Tool gegen mehrere Cluster ausführen und den RBAC-Graphen für jeden Clusternamen separat indizieren möchten.

Aus RBAC-Dateien im Verzeichnis

Um einen Bericht gegen lokale RBAC-YAML/JSON-Dateien auszuführen, geben Sie einen Verzeichnispfad an.``` krane report -d </path/to/rbac-directory>

root@kitploit:~
HINWEIS: _Krane_ erwartet, dass die folgenden Dateien (im YAML- oder JSON-Format) im angegebenen Verzeichnispfad vorhanden sind:
  - psp
  - roles
  - clusterroles
  - rolebindings
  - clusterrolebindings

Wenn Pod Security Policies nicht verwendet werden, können Sie die obige Erwartung umgehen, indem Sie manuell eine `psp`-Datei mit folgendem Inhalt erstellen:```json
{
  "items": []
}

Hinweis: PodSecurityPolicy wurde in Kubernetes v1.21 als veraltet markiert und in Kubernetes v1.25 entfernt.

In einem Kubernetes-Cluster

Um einen Bericht von einem Container auszuführen, der in einem Kubernetes-Cluster läuft``` krane report --incluster

root@kitploit:~
HINWEIS: Das von _Krane_ verwendete Dienstkonto benötigt Zugriff auf RBAC-Ressourcen. Siehe [Voraussetzungen](https://github.com/appvia/krane/blob/HEAD/k8s/one-time/prerequisites.yaml) für Details.

#### In CI/CD-Pipeline

Um die RBAC-Definition als Schritt in der CI/CD-Pipeline zu validieren```
krane report --ci -d </path/to/rbac-directory>

HINWEIS: Krane erwartet, dass für lokal gespeicherte RBAC-Ressourcendateien eine bestimmte Namenskonvention eingehalten wird. Siehe Abschnitt oben. Um krane-Befehle auszuführen, wird empfohlen, dass der CI-Executor auf das Docker-Image quay.io/appvia/krane:latest verweist.

Der CI-Modus wird durch das --ci-Flag aktiviert. Krane gibt einen Exit-Code ungleich Null zusammen mit Details zu verletzenden Risikoregeln zurück, wenn ein oder mehrere Gefahren erkannt wurden.

Visualisierungs-Dashboard

Um den RBAC-Facettenbaum, das Netzwerkdiagramm und die neuesten Berichtsergebnisse anzuzeigen, müssen Sie zuerst den Dashboard-Server starten.``` krane dashboard

root@kitploit:~
Cluster-Flag `-c <Cluster-Name>` kann übergeben werden, wenn das Dashboard für einen bestimmten Cluster-Namen ausgeführt werden soll. Das Dashboard sucht dann nach Daten, die mit dem angegebenen Cluster-Namen verknüpft sind und auf dem Dateisystem zwischengespeichert sind.

Der obige Befehl startet einen lokalen Webserver auf dem Standard-Port `8000` und zeigt den Dashboard-Link an.

## Architektur

### RBAC-Daten in einer lokalen Graphdatenbank indiziert

_Krane_ indiziert RBAC-Entitäten in RedisGraph. Dies ermöglicht es uns, das Netzwerk von Abhängigkeiten effizient und einfach mit einer Teilmenge von [CypherQL](https://oss.redislabs.com/redisgraph/cypher_support/) zu durchsuchen, das von [RedisGraph](https://oss.redislabs.com/redisgraph/) unterstützt wird.

#### Schema

![Krane Entity Graph](https://raw.githubusercontent.com/appvia/krane/HEAD/doc/images/krane-graph-diagram.svg "Krane Entity Graph")

#### Knoten

Die folgenden Knoten werden im Graph für die relevanten RBAC-Objekte erstellt:

* `Psp`       - Ein PSP-Knoten, der Attribute zur Pod-Sicherheitsrichtlinie enthält. Nur anwendbar bei K8s < 1.25.
* `Rule`      - Ein Rule-Knoten repräsentiert eine Zugriffskontrollregel für Kubernetes-Ressourcen.
* `Role`      - Ein Role-Knoten repräsentiert eine bestimmte Rolle oder ClusterRole. Das `kind`-Attribut definiert den Typ der Rolle.
* `Subject`   - Subject repräsentiert alle möglichen Akteure im Cluster (`kind`: User, Group und ServiceAccount)
* `Namespace` - Kubernetes-Namespace-Knoten.

#### Kanten

* `:SECURITY`  - Definiert eine Verbindung zwischen Rule- und Psp-Knoten. Nur anwendbar bei K8s < 1.25.
* `:GRANT`     - Definiert eine Verbindung zwischen Role und der mit dieser Rolle verknüpften Rule.
* `:ASSIGN`    - Definiert eine Verbindung zwischen einem Actor (Subject) und einer bestimmten Role/ClusterRole (Role-Knoten).
* `:RELATION`  - Definiert eine Verbindung zwischen zwei verschiedenen Actor (Subject)-Knoten.
* `:SCOPE`     - Definiert eine Verbindung zwischen Role- und Namespace-Knoten.
* `:ACCESS`    - Definiert eine Verbindung zwischen Subject- und Namespace-Knoten.
* `:AGGREGATE` - Definiert eine Verbindung zwischen ClusterRoles (eine ClusterRole aggregiert eine andere) `A-(aggregiert)->B`
* `:COMPOSITE` - Definiert eine Verbindung zwischen ClusterRoles (eine ClusterRole kann in einer anderen aggregiert werden) `A<-(ist ein Kompositum von)-B`

Alle Kanten sind bidirektional, was bedeutet, dass der Graph in beide Richtungen durchsucht werden kann.
Die einzigen Ausnahmen sind die Beziehungen `:AGGREGATE` und `:COMPOSITE`, die unidirektional sind, obwohl sie dieselben Kantenknoten betreffen.

#### Abfragen des Graphen

Um den Graphen direkt abzufragen, können Sie in einen laufenden `redisgraph`-Container exec'en, `redis-cli` starten und Ihre eigenen Abfragen ausführen. Folgen Sie der offiziellen [Anleitung](https://oss.redislabs.com/redisgraph/) für Beispiele von [Befehlen](https://oss.redislabs.com/redisgraph/commands/).

Sie können den Graphen auch von der _Krane_-Konsole aus abfragen. Exec'en Sie zuerst in den laufenden _Krane_-Container, dann```ruby
# Start Krane console - this will open interactive ruby shell with Krane code preloaded

console

# Instantiate Graph client

graph = Krane::Clients::RedisGraph.client cluster: 'default'

# Run arbitrary CypherQL query against indexed RBAC Graph

res = graph.query(%Q(
  MATCH (r:Rule {resource: "configmaps", verb: "update"})<-[:GRANT]-(ro:Role)<-[:ASSIGN]-(s:Subject)
  RETURN s.kind as subject_kind, s.name as subject_name, ro.kind as role_kind, ro.name as role_name))

# Print the results

res.print_resultset

Da diese Tools mit Atom erstellt wurden, ist es leicht möglich, noch weitere Funktionen direkt über den Atom-Paketmanager zu integrieren.

Atom | ein Leitfaden, der Ihnen hilft, jeden Schritt dieses Prozesses zu überprüfen Projekt | ein Repository mit Ressourcen zum Erstellen auf Basis von GitHub```

Results...

+----------------+--------------------------------+-----------+------------------------------------------------+ | subject_kind | subject_name | role_kind | role_name | +----------------+--------------------------------+-----------+------------------------------------------------+ | ServiceAccount | bootstrap-signer | Role | system:controller:bootstrap-signer | | User | system:kube-controller-manager | Role | system::leader-locking-kube-controller-manager | | ServiceAccount | kube-controller-manager | Role | system::leader-locking-kube-controller-manager | | User | system:kube-scheduler | Role | system::leader-locking-kube-scheduler | | ServiceAccount | kube-scheduler | Role | system::leader-locking-kube-scheduler | +----------------+--------------------------------+-----------+------------------------------------------------+

root@kitploit:~
Hinweis: Die obige Beispielabfrage wählt alle Subjects aus, denen Rollen/ClusterRoles zugewiesen sind, die Zugriff auf `update configmaps` gewähren.

## Konfiguration

### RBAC-Risikoregeln

RBAC-Risikoregeln sind in der Datei [Rules](https://github.com/appvia/krane/blob/HEAD/config/rules.yaml) definiert. Die Struktur jeder Regel ist weitgehend selbsterklärend.
Der integrierte Satz kann erweitert / überschrieben werden, indem zusätzliche benutzerdefinierte Regeln zur Datei [Custom Rules](https://github.com/appvia/krane/blob/HEAD/config/custom-rules.yaml) hinzugefügt werden.

#### Makros für Risikoregeln

Makros sind „Container“ für einen Satz gemeinsamer/geteilter Attribute und werden von einer oder mehreren Risikoregeln referenziert. Wenn Sie ein Makro in einer bestimmten Risikoregel verwenden möchten, müssen Sie es namentlich referenzieren, z. B. `macro: <Makro-Name>`. Beachten Sie, dass in einem referenzierten `macro` definierte Attribute Vorrang vor denselben Attributen haben, die auf Regel-Ebene definiert sind.

Ein Makro kann jedes der folgenden Attribute enthalten:

- `query`   - [RedisGraph-Abfrage](#querying-the-graph). Hat Vorrang vor `template`. Erfordert die Definition von `writer`.
- `writer`  - Ein Ruby-Ausdruck, der zum Formatieren des Ergebnissatzes von `query` verwendet wird. `writer` hat Vorrang vor `template`.
- `template` - Name einer integrierten Abfrage-/Writer-Vorlage. Wenn `query` & `writer` nicht angegeben sind, wird der gewählte Abfragegenerator zusammen mit dem passenden Writer verwendet.

#### Attribute von Risikoregeln

Eine Regel kann jedes der folgenden Attribute enthalten:

- `id`           [Erforderlich] Die Regel-ID ist eine eindeutige Kennung der Regel.
- `group_title`  [Erforderlich] Titel, der für alle Elemente dieser Risikoprüfung gilt.
- `severity`     [Erforderlich] Schweregrad, einer von :danger, :warning, :info.
- `info`         [Erforderlich] Textinformationen zur Prüfung und Vorschläge zur Risikominderung.
- `query`        [Bedingt] [RedisGraph-Abfrage](#querying-the-graph).
  - Hat Vorrang vor `template`. Erfordert die Definition von `writer`.
- `writer`       [Bedingt] Writer ist ein Ruby-Ausdruck, der zum Formatieren des Ergebnissatzes der Abfrage verwendet wird.
  - Writer hat Vorrang vor `template`. Erfordert die Definition von `query`.
- `template`     [Bedingt] Name einer integrierten Abfrage-/Writer-Vorlage. Wenn `query` & `writer` nicht angegeben sind, wird der gewählte Abfragegenerator zusammen mit dem passenden Writer verwendet.
  - Einige integrierte Vorlagen erfordern, dass auf individueller Regel-Ebene das Attribut `match_rules` angegeben wird, um die korrekte Abfrage zu erstellen. Vorlagen, die dies derzeit erfordern:

    - **_risky-role_** - Erstellt eine Multi-Match-Graph-Abfrage basierend auf den durch `match_rules` angegebenen Zugriffsregeln. Die generierte Graph-Abfrage gibt die folgenden Spalten zurück:
      - role_name
      - role_kind
      - namespace_name (ein _Array_ wird zurückgegeben, wenn mehrere Elemente zurückgegeben werden)

- `match_rules`  [Bedingt] Erforderlich, wenn `template` für die Abfrageerstellung auf Match-Regeln angewiesen ist.
  - Beispiel:
    ```yaml
     match_rules:
     - resources: ['cronjobs']
       verbs: ['update']
    ```
     Attribute und Werte folgen der [Kubernetes-RBAC-Rollenspezifikation](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-examples).

- `custom_params` [Optional] Liste benutzerdefinierter Schlüssel-Wert-Paare, die in einer Regel-`query` und `writer`-Darstellung ausgewertet und ersetzt werden.
  - Beispiel:
    ```yaml
    custom_params:
    - attrA: valueA
    - attrB: valueB
    ```
    Vorlagenplatzhalter für die obigen Schlüssel `{{attrA}}` und `{{attrB}}` werden durch `valueA` bzw. `valueB` ersetzt.

- `threshold`  [Optional] Numerischer Wert. Wenn definiert, wird dies als Vorlagenplatzhalter `{{threshold}}` im `writer`-Ausdruck verfügbar.
- `macro`      [Optional] Referenz auf gemeinsame Parameter, die in einem benannten Makro definiert sind.
- `disabled`   [Optional] Wenn auf `true` gesetzt, deaktiviert es die angegebene Regel und schließt sie von der Bewertung aus.
                Standardmäßig sind alle Regeln aktiviert.

#### Beispiele für Risikoregeln

##### Explizite Abfrage & Writer-Ausdruck```yaml
- id: verbose-rule-example
  group_title: Example rule
  severity:    :danger
  info:        Risk description and instructions on how to mitigate it goes here
  query: |
    MATCH
      (s:Subject)-[:ACCESS]->(ns:Namespace)
    WHERE
      NOT s.name IN {{whitelist_subject_names}}
    RETURN
      s.kind as subject_kind,
      s.name as subject_name,
      COLLECT(ns.name) as namespace_names
    ORDER BY
      subject_kind,
      subject_name,
      namespace_names DESC
  threshold: 2
  writer: |
    if result.namespace_names.count > {{threshold}}
      "#{result.subject_kind} #{result.subject_name} can access namespaces: #{result.namespace_names.join(', ')}"
    end
  disabled: true

Das obige Beispiel definiert explizit eine Graph-query, die zur Bewertung des RBAC-Risikos verwendet wird, sowie einen writer-Ausdruck zur Formatierung des Abfrageergebnissets. Die Abfrage wählt einfach alle Subjects (außer der Whitelist) und Namespaces aus, auf die sie Zugriff haben. Beachten Sie, dass das Ergebnisset nur Subjects enthalten wird, die Zugriff auf mehr als 2 Namespaces haben (Haben Sie den threshold-Wert bemerkt?). Der letzte writer-Ausdruck wird als formatiertes Ergebnis-Element ausgegeben.

writer kann auf das Ergebnisset-Item über das result-Objekt mit Methoden zugreifen, die den von der Abfrage zurückgegebenen Elementen entsprechen, z. B. result.subject_kind, result.subject_name usw.

Hinweise:

  • Der Platzhalter {{threshold}} im writer-Ausdruck wird durch den Wert des Schlüsselworts threshold der Regel ersetzt.
  • {{whitelist_subject_names}} stellt ein benutzerdefiniertes Feld dar, das mit den Whitelist-Werten interpoliert wird, die für eine bestimmte Regel-id definiert sind. Wenn ein Platzhalterfeldname nicht in der Whitelist definiert ist, wird er standardmäßig durch ein leeres Array [''] ersetzt. Lesen Sie weiter unten mehr zur Whitelist.
Vorlagebasierte Risikoregel

Integrierte Vorlagen vereinfachen die Definition von Risikoregeln erheblich, sind jedoch darauf ausgelegt, bestimmte Arten von Informationen zu extrahieren und sind möglicherweise nicht optimal für Ihre benutzerdefinierten Regeln. Wenn Sie feststellen, dass Sie dieselben query- oder writer-Ausdrücke in mehreren Regeln wiederverwenden, sollten Sie diese in ein macro extrahieren und in Ihren benutzerdefinierten Regeln referenzieren, um sie DRY zu halten.```yaml

  • id: risky-any-verb-secrets group_title: Risky Roles/ClustersRoles allowing all actions on secrets severity: :danger info: Roles/ClusterRoles allowing all actions on secrets. This might be dangerous. Review listed Roles! template: risky-role match_rules:
    • resources: ['secrets'] verbs: ['*']
root@kitploit:~
Das obige Beispiel zeigt eine der integrierten Regeln. Es verweist auf die Vorlage `risky-role`, die bei der Verarbeitung die Regel erweitert, indem sie `query`- und `writer`-Ausdrücke einfügt, bevor die Regelauswertung ausgelöst wird. `match_rules` wird verwendet, um die entsprechende Match-Abfrage zu erstellen.

### RBAC-Risiko-Whitelist

Die optionale Whitelist enthält eine Reihe von benutzerdefinierten Attributnamen und deren (whitelisted) Werten.

#### Whitelist-Attribute

Attributnamen und ihre Werte sind beliebig. Sie sind in der [Whitelist](https://github.com/appvia/krane/blob/HEAD/config/whitelist.yaml)-Datei definiert und in drei separate Abschnitte unterteilt:
  - `global` - Obere Ebene. Hier definierte benutzerdefinierte Attribute gelten für alle Risikoregeln, unabhängig vom Clusternamen.
  - `common` - Benutzerdefinierte Attribute werden auf eine bestimmte Risikoregeln-`id` beschränkt, unabhängig vom Clusternamen.
  - `cluster` (mit verschachtelter Liste von Clusternamen) - Benutzerdefinierte Attribute gelten für eine bestimmte Risikoregeln-`id` für einen angegebenen Clusternamen.

Jede [Risikoregeln](#rbac-risk-rules) versucht bei der Auswertung, alle in der `query` verwendeten Parameter-Platzhalter zu interpolieren, z. B. `{{your_whitelist_attribute_name}}`. Wenn ein Platzhalterparameter-Name (d. h. ein Name zwischen den doppelten geschweiften Klammern) mit einem der whitelisted Attributnamen für diese Risikoregeln-`id` übereinstimmt, wird er durch seinen berechneten Wert ersetzt.
Wenn für einen bestimmten Platzhalter keine Werte gefunden werden, wird er durch `['']` ersetzt.

#### Whitelist-Beispiele

Das folgende Whitelist-Beispiel erzeugt die folgende Zuordnung `placeholder-key => value` für eine [Risikoregeln](#rbac-risk-rules) mit dem `id`-Attributwert, der mit `_"some-risk-rule-id"_` übereinstimmt```
{{whitelist_role_names}}    => ['acp:prometheus:operator']
{{whitelist_subject_names}} => ['privileged-psp-user', 'another-user']

Die Platzhalter-Schlüssel oben werden, wenn sie in den benutzerdefinierten Graph-Abfragen verwendet werden, bei der Auswertung der Risikoregeln durch ihre jeweiligen Werte ersetzt.

Beispiel:```yaml

rules: global: # global scope - applies to all risk rule and cluster names whitelist_role_names: # custom attribute name - acp:prometheus:operator # custom attribute values

common: # common scope - applies to specific risk rule id regardless of cluster name some-risk-rule-id: # this corresponds to risk rule id defined in config/rules.yaml whitelist_subject_names: # custom attribute name - privileged-psp-user # custom attribute values

cluster: # cluster scope - applies to speciifc risk rule id and cluster name default: # example cluster name some-risk-rule-id: # risk rule id whitelist_subject_names: # custom attribute nane - another-user # custom attribute values

root@kitploit:~
## Kubernetes-Bereitstellung

_Krane_ kann einfach in lokale oder entfernte Kubernetes-Cluster bereitgestellt werden.

### K8s-Voraussetzungen

Kubernetes-Namespace, Service Account sowie entsprechende RBAC müssen im Cluster vorhanden sein. Siehe [Voraussetzungen](https://github.com/appvia/krane/blob/HEAD/k8s/one-time/prerequisites.yaml) als Referenz.

Der Standard-Einstiegspunkt von _Krane_ führt [bin/in-cluster-run](https://github.com/appvia/krane/blob/HEAD/bin/in-cluster-run) aus, der darauf wartet, dass die RedisGraph-Instanz verfügbar wird, bevor er die RBAC-_Report_-Schleife und den _Dashboard_-Webserver startet.

Sie können bestimmte Aspekte der Ausführung im Cluster mit den folgenden Umgebungsvariablen steuern:

* `KRANE_REPORT_INTERVAL` - Definiert das Intervall in Sekunden für die Ausführung des RBAC-Statikanalyse-Reports. Standard: `300` (in Sekunden, d.h. 5 Minuten).
* `KRANE_REPORT_OUTPUT` - Definiert das Ausgabeformat des RBAC-Risikoreports. Mögliche Werte: `:json`, `:yaml`, `:none`. Standard: `:json`.

### Lokales oder entferntes K8s-Cluster

#### Helm Chart

Bevor wir beginnen, benötigen Sie die folgenden Werkzeuge:
* [Helm CLI](https://helm.sh/docs/intro/install/)

Installieren Sie das Helm-Chart:```sh
$ helm repo add appvia https://appvia.github.io/krane
$ helm repo update
$ helm install krane appvia/krane --namespace krane --create-namespace

Siehe values.yaml für Details zu weiteren einstellbaren Optionen und Parametern.

K8s Manifeste```sh

kubectl create
--context
--namespace krane
-f k8s/redisgraph-service.yaml
-f k8s/redisgraph-deployment.yaml
-f k8s/krane-service.yaml
-f k8s/krane-deployment.yaml

root@kitploit:~
Beachten Sie, dass der _Krane_-Dashboard-Dienst standardmäßig nicht freigegeben ist!```sh
kubectl port-forward svc/krane 8000 \
  --context=<docker-desktop> \
  --namespace=krane

# Open Krane dashboard at http://localhost:8000

Sie finden die Beispiel-Deployment-Manifeste im Verzeichnis k8s.

Passen Sie die Manifeste nach Bedarf für Ihre Deployments an, und stellen Sie sicher, dass Sie die korrekte Version des Krane-Docker-Images in seiner Deployment-Datei referenzieren. Siehe Krane Docker Registry für verfügbare Tags, oder verwenden Sie einfach latest.

Compose-on-Kubernetes

Wenn Ihr K8s-Cluster über integrierte Compose-on-Kubernetes-Controller-Unterstützung verfügt (docker-desktop unterstützt dies standardmäßig), dann können Sie Krane und seine Abhängigkeiten mit einem einzigen docker stack-Befehl bereitstellen:```sh docker stack deploy
--orchestrator kubernetes
--namespace krane
--compose-file docker-compose.yml
--compose-file docker-compose.k8s.yml krane

root@kitploit:~
Hinweis: Stellen Sie sicher, dass Ihr aktueller kube-Kontext korrekt eingestellt ist, bevor Sie den obigen Befehl ausführen!

Der Anwendungsstack sollte jetzt in einem Kubernetes-Cluster bereitgestellt sein und alle Dienste bereit und exponiert. Beachten Sie, dass _Krane_ automatisch seine Berichtsschleife und den Dashboard-Server startet.```sh
docker stack services --orchestrator kubernetes --namespace krane krane

Der obige Befehl erzeugt die folgende Ausgabe:``` ID NAME MODE REPLICAS IMAGE PORTS 0de30651-dd5 krane_redisgraph replicated 1/1 redislabs/redisgraph:1.99.7 *:6379->6379/tcp aa377a5f-62b krane_krane replicated 1/1 quay.io/appvia/krane:latest *:8000->8000/tcp

root@kitploit:~
Überprüfen Sie die RBAC-Sicherheitslage Ihres Kubernetes-Clusters, indem Sie http://localhost:8000 besuchen.

Beachten Sie, dass Sie für entfernte Cluster-Bereitstellungen wahrscheinlich zuerst den _Krane_-Dienst port-forwarden müssen.```sh
kubectl --context=my-remote-cluster --namespace=krane port-forward svc/krane 8000

Um den Stack zu löschen```sh docker stack rm krane
--orchestrator kubernetes
--namespace krane

root@kitploit:~
## Notifications

Krane wird Sie über erkannte Anomalien mittlerer und hoher Schwere über seine Slack-Integration benachrichtigen.

Um Benachrichtigungen zu aktivieren, geben Sie Slack `webhook_url` & `channel` in der Datei [config/config.yaml](https://github.com/appvia/krane/blob/HEAD/config/config.yaml) an, oder setzen Sie alternativ die Umgebungsvariablen `SLACK_WEBHOOK_URL` und `SLACK_CHANNEL`. Umgebungsvariablen haben Vorrang vor den Werten in der Konfigurationsdatei.

## Lokale Entwicklung

Dieser Abschnitt beschreibt die Schritte zur Einrichtung der lokalen Entwicklung.

### Einrichtung

Installieren Sie die _Krane_ Code-Abhängigkeiten mit```sh
./bin/setup

Abhängigkeiten

Krane ist abhängig von RedisGraph. docker-compose ist der schnellste Weg, um die Abhängigkeiten von Krane lokal zum Laufen zu bringen.```sh docker-compose up -d redisgraph

root@kitploit:~
Um zu überprüfen, ob der RedisGraph-Dienst läuft:```sh
docker-compose ps

Um Dienste zu stoppen:```sh docker-compose down

root@kitploit:~
### Entwicklung

An diesem Punkt sollten Sie in der Lage sein, die _Krane_ Codebasis zu ändern und die Ergebnisse durch Aufrufen von Befehlen in der lokalen Shell zu testen.```sh
$ ./bin/krane --help                    # to get help
$ ./bin/krane report -k docker-desktop  # to generate your first report for
                                        # local docker-desktop k8s cluster
...

Um den lokalen Entwicklungsmodus des Dashboard-Benutzeroberfläche zu aktivieren```sh $ cd dashboard $ npm install $ npm start

root@kitploit:~
Dies wird automatisch den Dashboard-Server starten, den Standardbrowser öffnen und auf Änderungen an den Quelldateien überwachen.

_Krane_ kommt vorkonfiguriert für eine verbesserte Entwicklererfahrung mit [Skaffold](https://skaffold.dev/). Das Iterieren am Projekt und das Validieren der Anwendung durch Ausführen des gesamten Stacks in einem lokalen oder entfernten Kubernetes-Cluster ist jetzt noch einfacher geworden. Code-Hot-Reload ermöglicht es, lokale Änderungen automatisch an den laufenden Container weiterzugeben, um den Entwicklungslebenszyklus zu beschleunigen.```sh
skaffold dev --kube-context docker-desktop --namespace krane --port-forward

Tests

Führen Sie Tests lokal aus mit```sh bundle exec rspec

root@kitploit:~
## Mitwirken an Krane

Wir begrüßen alle Beiträge aus der Community! Schauen Sie sich unseren [Beitragsleitfaden](https://github.com/appvia/krane/blob/HEAD/CONTRIBUTING.md) an, um weitere Informationen zum Einstieg zu erhalten. Wenn Sie _Krane_ nutzen, nützlich finden oder sich allgemein für Kubernetes-Sicherheit interessieren, lassen Sie es uns bitte wissen, indem Sie dieses Repository **mit einem Stern markieren** und **beobachten**. Danke!

## Mitmachen

Beteiligen Sie sich an der Diskussion auf unserem [Community-Kanal](https://www.appvia.io/join-the-appvia-community).

Krane ist ein Community-Projekt und wir begrüßen Ihre Beiträge. Um einen Fehler zu melden, eine Verbesserung vorzuschlagen oder eine neue Funktion anzufragen, öffnen Sie bitte ein Github-Issue. Informationen dazu, wie Sie helfen können, finden Sie in unserem [Beitragsleitfaden](https://github.com/appvia/krane/blob/HEAD/CONTRIBUTING.md).

## Roadmap

Einzelheiten zu unseren Plänen für das Projekt finden Sie in unserer [Roadmap](https://github.com/appvia/krane/projects/1).


## Lizenz

Autor: Marcin Ciszak <[email protected]>

Copyright (c) 2019-2020 [Appvia Ltd](https://appvia.io)

Dieses Projekt wird unter der [Apache License, Version 2.0](https://github.com/appvia/krane/blob/HEAD/LICENSE) vertrieben.
Tool herunterladen