Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
krane — कुबेरनेट्स RBAC स्थैतिक विश्लेषण और विज़ुअलाइज़ेशन उपकरण | Kitploit
उपकरण/GitHubGitHub/appvia/krane
स्थैतिक विश्लेषणभेद्यता स्कैनरकॉन्फ़िगरेशन ऑडिटिंगक्लाउड सुरक्षा
GitHubappvia/krane

krane

कुबेरनेट्स RBAC स्थैतिक विश्लेषण और विज़ुअलाइज़ेशन उपकरण

रिपॉजिटरी देखें
744346 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Krane

Kubernetes RBAC विश्लेषण को आसान बनाया गया

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

Krane एक सरल Kubernetes RBAC स्थैतिक विश्लेषण उपकरण है। यह K8s RBAC डिज़ाइन में संभावित सुरक्षा जोखिमों की पहचान करता है और उन्हें कम करने के सुझाव देता है। Krane डैशबोर्ड वर्तमान RBAC सुरक्षा स्थिति प्रस्तुत करता है और आपको इसकी परिभाषा के माध्यम से नेविगेट करने देता है।

विशेषताएँ

  • RBAC जोखिम नियम - Krane बिल्ट-इन RBAC जोखिम नियमों के एक सेट का मूल्यांकन करता है। इन्हें संशोधित या कस्टम नियमों के सेट के साथ विस्तारित किया जा सकता है।
  • पोर्टेबिलिटी - Krane निम्नलिखित मोड में से किसी एक में चल सकता है:
    • स्थानीय रूप से CLI या docker कंटेनर के रूप में।
    • CI/CD पाइपलाइनों में एक स्टेप एक्शन के रूप में क्लस्टर पर लागू होने से पहले संभावित RBAC कमियों का पता लगाता है।
    • एक स्टैंडअलोन सेवा के रूप में जो Kubernetes क्लस्टर के भीतर RBAC की स्थिति का लगातार विश्लेषण करता है।
  • रिपोर्टिंग - Krane मशीन-पठनीय प्रारूप में समझने में आसान RBAC जोखिम रिपोर्ट तैयार करता है।
  • डैशबोर्ड - Krane एक सरल डैशबोर्ड UI के साथ आता है जो आपको क्लस्टर में RBAC डिज़ाइन को समझने में मदद करता है। डैशबोर्ड RBAC सुरक्षा स्थिति का उच्च-स्तरीय अवलोकन प्रस्तुत करता है और पता लगाए गए जोखिमों को हाइलाइट करता है। यह फ़ेसेटेड ट्री और ग्राफ़ नेटवर्क दृश्यों के माध्यम से आगे RBAC नियंत्रण निरीक्षण की भी अनुमति देता है।
  • अलर्टिंग - यह अपने Slack एकीकरण के माध्यम से पता लगाए गए मध्यम और उच्च गंभीरता वाले जोखिमों पर अलर्ट करेगा।
  • ग्राफ़ में RBAC - Krane स्थानीय ग्राफ़ डेटाबेस में संपूर्ण Kubernetes RBAC को इंडेक्स करता है जो मनमाने CypherQL क्वेरीज़ के साथ RBAC डेटा की किसी भी आगे की तदर्थ पूछताछ को आसान बनाता है।

सामग्री

  • त्वरित आरंभ
  • उपयोग गाइड
  • आर्किटेक्चर
  • Kubernetes परिनियोजन
  • सूचनाएं
  • स्थानीय विकास
  • Krane में योगदान
  • समुदाय
  • रोडमैप
  • लाइसेंस

त्वरित आरंभ

आप अपने लक्ष्य Kubernetes क्लस्टर में Helm चार्ट के माध्यम से इंस्टॉल करके या Docker के साथ स्थानीय रूप से चलाकर Krane के साथ आरंभ कर सकते हैं।

Helm चार्ट इंस्टॉल करें

यह मान लिया गया है कि आपकी मशीन पर Helm CLI इंस्टॉल है।```sh $ helm repo add appvia https://appvia.github.io/krane $ helm repo update $ helm install krane appvia/krane --namespace krane --create-namespace

root@kitploit:~
हेल्म चार्ट इंस्टॉलेशन आउटपुट का अनुसरण करें कि कैसे केर्न डैशबोर्ड को पोर्ट-फॉरवर्ड करें।

### डॉकर के साथ चलाएँ

यह माना जाता है कि आपके स्थानीय मशीन पर [डॉकर](https://docs.docker.com/get-docker/) चल रहा है। यदि पहले से नहीं है, तो [डॉकर-कम्पोज़](https://docs.docker.com/compose/install/#install-compose) इंस्टॉल करें।

केर्न रेडिसग्राफ़ पर निर्भर करता है। `docker-compose` स्टैक वह सब कुछ परिभाषित करता है जो स्थानीय रूप से _केर्न_ सेवा बनाने और चलाने के लिए आवश्यक है। यह इसकी [रेडिसग्राफ़](https://oss.redislabs.com/redisgraph/) निर्भरता का भी ध्यान रखेगा।```
docker-compose up -d

Krane डॉकर इमेज स्थानीय मशीन पर पहले से मौजूद न होने पर स्वचालित रूप से पूर्व-निर्मित हो जाएगी।

ध्यान दें कि जब docker-compose को स्थानीय रूप से चलाया जाता है, तो Krane RBAC report और dashboard को स्वचालित रूप से प्रारंभ नहीं करेगा। इसके बजाय, कंटेनर डिफ़ॉल्ट रूप से 24 घंटे के लिए सोएगा - इस मान को docker-compose.override.yml में समायोजित किया जा सकता है। चल रहे Krane कंटेनर में प्रवेश करें (Exec) कमांड चलाने के लिए। स्थानीय docker-compose कुबे कॉन्फिग (~/.kube/config) को कंटेनर के अंदर माउंट करेगा, जिससे आप उन किसी भी Kubernetes क्लस्टर के विरुद्ध रिपोर्ट चला सकते हैं जिन तक आपकी पहले से पहुँच है।

चल रहे Krane कंटेनर में प्रवेश करें।```sh docker-compose exec krane bash

root@kitploit:~
एक बार कंटेनर में आप `krane` कमांड का उपयोग शुरू कर सकते हैं। `krane -help` आज़माएँ।```sh
krane -h

चल रही सेवाओं और संबंधित पोर्ट की जांच करने के लिए:``` docker-compose ps

root@kitploit:~
_Krane_ और इसकी निर्भरता सेवाओं को रोकने के लिए:```
docker-compose down

उपयोग मार्गदर्शिका

कमांड्स```

$ 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 रिपोर्ट उत्पन्न करें

#### स्थानीय `kubectl` संदर्भ के साथ

एक चल रहे क्लस्टर के विरुद्ध रिपोर्ट चलाने के लिए आपको एक _kubectl_ संदर्भ प्रदान करना होगा।```
krane report -k <context>

आप -c <cluster-name> फ़्लैग भी पास कर सकते हैं यदि आप एक से अधिक क्लस्टर के विरुद्ध टूल चलाने और प्रत्येक क्लस्टर नाम के लिए अलग-अलग RBAC ग्राफ़ को अनुक्रमित करने की योजना बनाते हैं।

RBAC फ़ाइलों से निर्देशिका में संग्रहीत

स्थानीय RBAC yaml/json फ़ाइलों के विरुद्ध रिपोर्ट चलाने के लिए, एक निर्देशिका पथ प्रदान करें।``` krane report -d </path/to/rbac-directory>

root@kitploit:~
नोट: _Krane_ निम्नलिखित फ़ाइलों (YAML या JSON प्रारूप में) को निर्दिष्ट निर्देशिका पथ में मौजूद होने की अपेक्षा करता है:
  - psp
  - roles
  - clusterroles
  - rolebindings
  - clusterrolebindings

यदि Pod Security Policies का उपयोग नहीं हो रहा है, तो आप `psp` फ़ाइल को मैन्युअल रूप से निम्नलिखित सामग्री के साथ बनाकर उपरोक्त अपेक्षा को दरकिनार कर सकते हैं:```json
{
  "items": []
}

नोट, PodSecurityPolicy को Kubernetes v1.21 में बहिष्कृत किया गया था, और v1.25 में Kubernetes से हटा दिया गया।

Kubernetes क्लस्टर के अंदर

Kubernetes क्लस्टर में चल रहे कंटेनर से एक रिपोर्ट चलाने के लिए``` krane report --incluster

root@kitploit:~
नोट: _Krane_ द्वारा उपयोग किए जाने वाले सेवा खाते को RBAC संसाधनों तक पहुंच की आवश्यकता होगी। विवरण के लिए [पूर्वापेक्षाएँ](https://github.com/appvia/krane/blob/HEAD/k8s/one-time/prerequisites.yaml) देखें।

#### CI/CD पाइपलाइन में

CI/CD पाइपलाइन में एक चरण के रूप में RBAC परिभाषा को मान्य करने के लिए```
krane report --ci -d </path/to/rbac-directory>

नोट: Krane स्थानीय रूप से संग्रहीत RBAC संसाधन फ़ाइलों के लिए एक निश्चित नामकरण परंपरा का पालन करने की अपेक्षा करता है। ऊपर अनुभाग देखें। krane कमांड चलाने के लिए यह अनुशंसित है कि CI निष्पादक quay.io/appvia/krane:latest डॉकर इमेज का संदर्भ ले।

CI मोड --ci फ़्लैग द्वारा सक्षम किया जाता है। Krane एक या अधिक खतरों का पता चलने पर शून्येतर स्थिति कोड और जोखिम नियमों के उल्लंघन के विवरण के साथ वापस आएगा।

विज़ुअलाइज़ेशन डैशबोर्ड

RBAC पहलू ट्री, नेटवर्क ग्राफ़ और नवीनतम रिपोर्ट निष्कर्षों को देखने के लिए आपको पहले डैशबोर्ड सर्वर शुरू करना होगा।``` krane dashboard

root@kitploit:~
क्लस्टर फ़्लैग `-c <cluster-name>` को पास किया जा सकता है यदि आप डैशबोर्ड को विशिष्ट क्लस्टर नाम के विरुद्ध चलाना चाहते हैं। डैशबोर्ड निर्दिष्ट क्लस्टर नाम से संबंधित डेटा की खोज करेगा जो फ़ाइल सिस्टम पर कैश किया गया है।

उपरोक्त कमांड डिफ़ॉल्ट पोर्ट `8000` पर स्थानीय वेब सर्वर शुरू करेगा, और डैशबोर्ड लिंक प्रदर्शित करेगा।

## Architecture

### RBAC Data indexed in a local Graph database

_Krane_ RedisGraph में RBAC संस्थाओं को अनुक्रमित करता है। यह हमें [RedisGraph](https://oss.redislabs.com/redisgraph/) द्वारा समर्थित [CypherQL](https://oss.redislabs.com/redisgraph/cypher_support/) के उपसमूह का उपयोग करके कुशलतापूर्वक और सरलता से निर्भरताओं के नेटवर्क को क्वेरी करने की अनुमति देता है।

#### Schema

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

#### Nodes

The following nodes are created in the Graph for the relevant RBAC objects:

* `Psp`       - एक PSP नोड जिसमें पॉड सुरक्षा नीति से संबंधित गुण हैं। केवल K8s < 1.25 के साथ काम करते समय लागू।
* `Rule`      - Rule नोड Kubernetes संसाधनों के आसपास पहुँच नियंत्रण नियम का प्रतिनिधित्व करता है।
* `Role`      - Role नोड किसी दिए गए Role या ClusterRole का प्रतिनिधित्व करता है। `kind` गुण भूमिका के प्रकार को परिभाषित करता है।
* `Subject`   - Subject क्लस्टर में सभी संभावित अभिनेताओं का प्रतिनिधित्व करता है (`kind`: User, Group और ServiceAccount)
* `Namespace` - Kubernetes Namespace नोड।

#### Edges

* `:SECURITY`  - Rule और Psp नोड्स के बीच लिंक को परिभाषित करता है। केवल K8s < 1.25 के साथ काम करते समय लागू।
* `:GRANT`     - उस Role से जुड़े Role और Rule के बीच लिंक को परिभाषित करता है।
* `:ASSIGN`    - एक अभिनेता (Subject) और दिए गए Role/ClusterRole (Role नोड) के बीच लिंक को परिभाषित करता है।
* `:RELATION`  - दो अलग-अलग अभिनेता (Subject) नोड्स के बीच लिंक को परिभाषित करता है।
* `:SCOPE`     - Role और Namespace नोड्स के बीच लिंक को परिभाषित करता है।
* `:ACCESS`    - Subject और Namespace नोड्स के बीच लिंक को परिभाषित करता है।
* `:AGGREGATE` - ClusterRoles के बीच लिंक को परिभाषित करता है (एक ClusterRole दूसरे को एकत्रित करता है) `A-(aggregates)->B`
* `:COMPOSITE` - ClusterRoles के बीच लिंक को परिभाषित करता है (एक ClusterRole दूसरे में एकत्रित किया जा सकता है) `A<-(is a composite of)-B`

All edges are bidirectional, which means graph can be queried in either direction. Only exceptions are `:AGGREGATE` and `:COMPOSITE` relations which are uni-directional, though concerned with the same edge nodes.

#### Querying the Graph

In order to query the graph directly you can exec into a running `redisgraph` container, start `redis-cli` and run your arbitrary queries. Follow official [instructions](https://oss.redislabs.com/redisgraph/) for examples of [commands](https://oss.redislabs.com/redisgraph/commands/).

You can also query the Graph from _Krane_ console. First exec into running _Krane_ container, then```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

Project Discovery

  • chaos-client - Chaos DB API के साथ संवाद करने के लिए Go क्लाइंट।
  • chaos-public
  • Cloudlist - विभिन्न क्लाउड प्रदाताओं से संपत्तियों को सूचीबद्ध करने का उपकरण।
  • CVEMap - CVE जंगल में आसानी से नेविगेट करें।
  • dnsx - dnsx एक तेज़ और बहुउद्देशीय DNS टूलकिट है जो कई DNS प्रश्न चलाने की अनुमति देता है।
  • fuzzing-templates
  • httpx - httpx एक तेज़ और बहुउद्देशीय HTTP टूलकिट है।
  • interactsh - एक OOB इंटरैक्शन इकट्ठा करने वाला सर्वर और क्लाइंट लाइब्रेरी।
  • katana - एक अगली पीढ़ी का क्रॉलिंग और स्पाइडरिंग फ्रेमवर्क।
  • mapcidr - किसी दिए गए सबनेट/CIDR श्रेणियों के लिए कई ऑपरेशन करने का उपयोगिता प्रोग्राम।
  • Naabu - विश्वसनीयता और सरलता पर ध्यान देने के साथ go में लिखा गया एक तेज़ पोर्ट स्कैनर।
  • nuclei - सरल YAML आधारित DSL पर आधारित तेज़ और अनुकूलन योग्य भेद्यता स्कैनर।
  • nuclei-templates
  • proxify - HTTP/HTTPS ट्रैफ़िक कैप्चर, हेरफेर और रिप्ले के लिए स्विस आर्मी नाइफ प्रॉक्सी उपकरण।
  • pdtm - ProjectDiscovery का ओपन सोर्स टूल मैनेजर।
  • shuffledns - shuffleDNS, go में लिखा गया massdns के चारों ओर एक आवरण है।
  • subfinder - Subfinder एक सबडोमेन खोज उपकरण है जो वैध सबडोमेन खोजता है।
  • tlsx - TLS आधारित डेटा संग्रह पर केंद्रित तेज़ और विन्यास योग्य TLS ग्रैबर।

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:~
नोट: उपरोक्त उदाहरण क्वेरी उन सभी विषयों (Subjects) का चयन करेगी जिनके पास `update configmaps` तक पहुंच प्रदान करने वाली भूमिकाएँ/क्लस्टरभूमिकाएँ (Roles/ClusterRoles) निर्धारित हैं।

## कॉन्फ़िगरेशन

### RBAC जोखिम नियम

RBAC जोखिम नियम [Rules](https://github.com/appvia/krane/blob/HEAD/config/rules.yaml) फ़ाइल में परिभाषित हैं। प्रत्येक नियम की संरचना काफी हद तक स्व-व्याख्यात्मक है। अंतर्निर्मित सेट को [Cutom Rules](https://github.com/appvia/krane/blob/HEAD/config/custom-rules.yaml) फ़ाइल में अतिरिक्त कस्टम नियम जोड़कर विस्तारित/ओवरराइड किया जा सकता है।

#### जोखिम नियम मैक्रो (Risk Rule Macros)

मैक्रो सामान्य/साझा विशेषताओं के एक सेट के लिए 'कंटेनर' होते हैं, और एक या अधिक जोखिम नियमों द्वारा संदर्भित किए जाते हैं। यदि आप किसी दिए गए जोखिम नियम में मैक्रो का उपयोग करना चुनते हैं, तो आपको इसका नाम से संदर्भ देना होगा, जैसे `macro: <macro-name>`। ध्यान दें कि संदर्भित `macro` में परिभाषित विशेषताएँ नियम स्तर पर परिभाषित समान विशेषताओं पर प्राथमिकता लेंगी।

मैक्रो में निम्नलिखित में से कोई भी विशेषता हो सकती है:

- `query`   - [RedisGraph क्वेरी](#querying-the-graph). `template` पर प्राथमिकता रखती है। `writer` परिभाषित होना आवश्यक है।
- `writer`  - राइटर एक Ruby अभिव्यक्ति है जिसका उपयोग `query` परिणाम सेट को फ़ॉर्मेट करने के लिए किया जाता है। राइटर का `template` पर प्राथमिकता होती है।
- `template` - अंतर्निर्मित क्वेरी/राइटर टेम्पलेट नाम। यदि `query` और `writer` निर्दिष्ट नहीं हैं तो चयनित क्वेरी जनरेटर और संबंधित राइटर का उपयोग किया जाएगा।

#### जोखिम नियम विशेषताएँ

नियम में निम्नलिखित में से कोई भी विशेषता हो सकती है:

- `id`           [आवश्यक] नियम आईडी एक अद्वितीय नियम पहचानकर्ता है।
- `group_title`  [आवश्यक] इस जोखिम जांच के अंतर्गत आने वाले सभी आइटमों पर लागू होने वाला शीर्षक।
- `severity`     [आवश्यक] गंभीरता, :danger, :warning, :info में से एक।
- `info`         [आवश्यक] जांच के बारे में पाठ्य जानकारी और जोखिम को कम करने के सुझाव।
- `query`        [सशर्त] [RedisGraph क्वेरी](#querying-the-graph)।
  - `template` पर प्राथमिकता रखती है। `writer` परिभाषित होना आवश्यक है।
- `writer`       [सशर्त] राइटर एक Ruby अभिव्यक्ति है जिसका उपयोग क्वेरी परिणाम सेट को फ़ॉर्मेट करने के लिए किया जाता है।
  - राइटर का `template` पर प्राथमिकता होती है। `query` परिभाषित होना आवश्यक है।
- `template`     [सशर्त] अंतर्निर्मित क्वेरी/राइटर टेम्पलेट नाम। यदि `query` और `writer` निर्दिष्ट नहीं हैं तो चयनित क्वेरी जनरेटर और संबंधित राइटर का उपयोग किया जाएगा।
  - कुछ अंतर्निर्मित टेम्पलेट्स को सही क्वेरी बनाने के लिए व्यक्तिगत नियम स्तर पर `match_rules` विशेषता निर्दिष्ट करने की आवश्यकता होती है। वर्तमान में इसकी आवश्यकता वाले टेम्पलेट्स:

    - **_risky-role_** - `match_rules` द्वारा निर्दिष्ट एक्सेस नियमों के आधार पर मल्टी-मैच ग्राफ क्वेरी बनाता है। उत्पन्न ग्राफ क्वेरी निम्नलिखित कॉलम लौटाती है:
      - role_name
      - role_kind
      - namespace_name (यदि एकाधिक आइटम लौटाए जाते हैं तो एक _सरणी_ लौटाई जाती है)

- `match_rules`  [सशर्त] आवश्यक जब `template` क्वेरी बनाने के लिए मैच नियमों पर निर्भर करता है।
  - उदाहरण:
    ```yaml
     match_rules:
     - resources: ['cronjobs']
       verbs: ['update']
    ```
     विशेषताएँ और मान [Kubernetes RBAC भूमिका विनिर्देश](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-examples) का पालन करते हैं।

- `custom_params` [वैकल्पिक] कस्टम कुंजी-मूल्य जोड़ियों की सूची जिनका मूल्यांकन किया जाएगा और नियम `query` और `writer` प्रतिनिधित्व में प्रतिस्थापित किया जाएगा।
  - उदाहरण:
    ```yaml
    custom_params:
    - attrA: valueA
    - attrB: valueB
    ```
    उपरोक्त कुंजियों के लिए टेम्पलेट प्लेसहोल्डर `{{attrA}}` और `{{attrB}}` को क्रमशः `valueA` और `valueB` से प्रतिस्थापित किया जाएगा।

- `threshold`  [वैकल्पिक] संख्यात्मक मान। जब परिभाषित किया जाता है तो यह `writer` अभिव्यक्ति में टेम्पलेट प्लेसहोल्डर `{{threshold}}` के रूप में उपलब्ध हो जाएगा।
- `macro`      [वैकल्पिक] नामित मैक्रो में परिभाषित सामान्य पैरामीटर का संदर्भ।
- `disabled`   [वैकल्पिक] जब `true` पर सेट किया जाता है तो यह दिए गए नियम को अक्षम करेगा और इसे मूल्यांकन से बाहर करेगा।
                डिफ़ॉल्ट रूप से सभी नियम सक्षम हैं।

#### जोखिम नियम उदाहरण

##### स्पष्ट क्वेरी और राइटर अभिव्यक्ति```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

उपरोक्त उदाहरण स्पष्ट रूप से एक ग्राफ query को परिभाषित करता है जिसका उपयोग RBAC जोखिम का मूल्यांकन करने के लिए किया जाता है, और एक writer अभिव्यक्ति जिसका उपयोग क्वेरी परिणाम सेट को प्रारूपित करने के लिए किया जाता है। क्वेरी बस उन सभी Subjects (सफेदसूचीबद्ध को छोड़कर) और Namespaces का चयन करती है जिन तक उनकी पहुंच है। ध्यान दें कि परिणाम सेट में केवल उन Subjects को शामिल किया जाएगा जिनके पास 2 से अधिक Namespaces तक पहुंच है (वहाँ threshold मान देखा?). अंतिम writer की अभिव्यक्ति को स्वरूपित परिणाम आइटम आउटपुट के रूप में कैप्चर किया जाएगा।

writer क्वेरी द्वारा लौटाए गए तत्वों से मेल खाने वाली विधियों के साथ result ऑब्जेक्ट के माध्यम से परिणाम सेट आइटम तक पहुंच सकता है, उदा. result.subject_kind, result.subject_name आदि।

नोट:

  • writer अभिव्यक्ति में {{threshold}} प्लेसहोल्डर को नियम के threshold कीवर्ड मान से बदल दिया जाएगा।
  • {{whitelist_subject_names}} एक कस्टम फ़ील्ड का प्रतिनिधित्व करता है जिसे किसी दिए गए नियम id के लिए परिभाषित Whitelist मानों के साथ अंतर्निहित किया जाएगा। यदि व्हाइटलिस्ट में प्लेसहोल्डर फ़ील्ड नाम परिभाषित नहीं है, तो इसे डिफ़ॉल्ट रूप से एक खाली सरणी [''] से बदल दिया जाएगा। व्हाइटलिस्टिंग के बारे में नीचे और पढ़ें।
Templated Risk Rule

बिल्ट-इन टेम्पलेट जोखिम नियम परिभाषा को काफी सरल बनाते हैं, हालांकि, वे विशिष्ट प्रकार की जानकारी निकालने के लिए डिज़ाइन किए गए हैं और आपके कस्टम नियमों के लिए उपयुक्त नहीं हो सकते हैं। यदि आप एक ही query या writer अभिव्यक्तियों को कई नियमों में पुन: उपयोग करते हुए पाते हैं, तो आपको उन्हें macro में निकालने और अपने कस्टम नियमों में संदर्भित करने पर विचार करना चाहिए ताकि उन्हें DRY किया जा सके।```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:~
ऊपर दिया गया उदाहरण एक अंतर्निर्मित नियम को दर्शाता है। यह `risky-role` टेम्पलेट को संदर्भित करता है जो प्रसंस्करण के दौरान नियम मूल्यांकन ट्रिगर होने से पहले `query` और `writer` एक्सप्रेशन इंजेक्ट करके नियम का विस्तार करेगा। उपयुक्त मैच क्वेरी बनाने के लिए `match_rules` का उपयोग किया जाएगा।


### RBAC जोखिम श्वेतसूची

वैकल्पिक श्वेतसूची में कस्टम परिभाषित विशेषता नामों और संबंधित (श्वेतसूचीबद्ध) मानों का एक सेट होता है।

#### श्वेतसूची विशेषताएँ

विशेषता नाम और उनके मान मनमाने होते हैं। वे [Whitelist](https://github.com/appvia/krane/blob/HEAD/config/whitelist.yaml) फ़ाइल में परिभाषित किए गए हैं और तीन अलग-अलग वर्गों में विभाजित हैं:
  - `global` - शीर्ष स्तरीय दायरा। यहाँ परिभाषित कस्टम विशेषताएँ क्लस्टर नाम की परवाह किए बिना सभी जोखिम नियमों पर लागू होंगी।
  - `common` - कस्टम विशेषताएँ क्लस्टर नाम की परवाह किए बिना विशिष्ट जोखिम नियम `id` तक सीमित होंगी।
  - `cluster` (क्लस्टर नामों की नेस्टेड सूची के साथ) - कस्टम विशेषताएँ किसी दिए गए क्लस्टर नाम के लिए विशिष्ट जोखिम नियम `id` पर लागू होंगी।


प्रत्येक [जोखिम नियम](#rbac-risk-rules) मूल्यांकन के दौरान, `query` में प्रयुक्त सभी पैरामीटर प्लेसहोल्डर का इंटरपोलेशन करने का प्रयास करेगा, जैसे `{{your_whitelist_attribute_name}}`। यदि एक प्लेसहोल्डर पैरामीटर नाम (अर्थात दोहरे घुंघराले ब्रैकेट के बीच का नाम) उस जोखिम नियम `id` के लिए किसी भी श्वेतसूचीबद्ध विशेषता नाम से मेल खाता है, तो इसे इसके गणना किए गए मान से बदल दिया जाएगा।
यदि किसी दिए गए प्लेसहोल्डर के लिए कोई मान नहीं मिलता है, तो इसे `['']` से प्रतिस्थापित किया जाएगा।

#### श्वेतसूची उदाहरण

नीचे दी गई उदाहरण श्वेतसूची एक [जोखिम नियम](#rbac-risk-rules) के लिए `placeholder-key => value` मैपिंग उत्पन्न करती है जिसका `id` विशेषता मान _"some-risk-rule-id"_ से मेल खाता है।```
{{whitelist_role_names}}    => ['acp:prometheus:operator']
{{whitelist_subject_names}} => ['privileged-psp-user', 'another-user']

ऊपर दिए गए प्लेसहोल्डर कुंजियाँ, जब कस्टम ग्राफ़ क्वेरी में उपयोग की जाती हैं, तो रिस्क रूल मूल्यांकन पर उनके संबंधित मानों द्वारा प्रतिस्थापित कर दी जाएंगी। उदाहरण:```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 तैनाती

_Krane_ को स्थानीय या दूरस्थ Kubernetes क्लस्टरों पर आसानी से तैनात किया जा सकता है।

### K8s पूर्वापेक्षाएँ

Kubernetes नेमस्पेस, सेवा खाता और उपयुक्त RBAC क्लस्टर में मौजूद होना चाहिए। संदर्भ के लिए [पूर्वापेक्षाएँ](https://github.com/appvia/krane/blob/HEAD/k8s/one-time/prerequisites.yaml) देखें।

डिफ़ॉल्ट _Krane_ प्रवेश बिंदु [bin/in-cluster-run](https://github.com/appvia/krane/blob/HEAD/bin/in-cluster-run) निष्पादित करता है जो RBAC _रिपोर्ट_ लूप और _डैशबोर्ड_ वेब सर्वर शुरू करने से पहले RedisGraph इंस्टेंस के उपलब्ध होने की प्रतीक्षा करता है।

आप निम्नलिखित पर्यावरण चरों के साथ क्लस्टर निष्पादन के कुछ पहलुओं को नियंत्रित कर सकते हैं:

* `KRANE_REPORT_INTERVAL` - RBAC स्थैतिक विश्लेषण रिपोर्ट रन के लिए सेकंड में अंतराल को परिभाषित करता है। डिफ़ॉल्ट: `300` (सेकंड में, अर्थात 5 मिनट)।
* `KRANE_REPORT_OUTPUT` - RBAC जोखिम रिपोर्ट आउटपुट प्रारूप को परिभाषित करता है। संभावित मान `:json`, `:yaml`, `:none`। डिफ़ॉल्ट: `:json`।

### स्थानीय या दूरस्थ K8s क्लस्टर

#### Helm चार्ट

शुरू करने से पहले, आपको निम्नलिखित टूल्स की आवश्यकता होगी:
* [Helm CLI](https://helm.sh/docs/intro/install/)

Helm चार्ट स्थापित करें:```sh
$ helm repo add appvia https://appvia.github.io/krane
$ helm repo update
$ helm install krane appvia/krane --namespace krane --create-namespace

देखें values.yaml फ़ाइल में अन्य सेट करने योग्य विकल्पों और पैरामीटरों के विवरण के लिए।

K8s manifests```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:~
ध्यान दें कि _Krane_ डैशबोर्ड सेवा डिफ़ॉल्ट रूप से उजागर नहीं है!```sh
kubectl port-forward svc/krane 8000 \
  --context=<docker-desktop> \
  --namespace=krane

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

आप उदाहरण तैनाती मेनिफेस्ट k8s निर्देशिका में पा सकते हैं।

अपनी तैनाती के लिए आवश्यकतानुसार मेनिफेस्ट को संशोधित करें, यह सुनिश्चित करते हुए कि आप अपने तैनाती फ़ाइल में Krane डॉकर इमेज के सही संस्करण का संदर्भ दे रहे हैं। उपलब्ध टैग के लिए Krane Docker Registry देखें, या बस latest का उपयोग करें।

Compose-on-Kubernetes

यदि आपके K8s क्लस्टर में अंतर्निहित Compose-on-Kubernetes नियंत्रक समर्थन है (docker-desktop डिफ़ॉल्ट रूप से इसका समर्थन करता है), तो आप एक एकल docker stack कमांड के साथ Krane और इसकी निर्भरताओं को तैनात कर सकते हैं:```sh docker stack deploy
--orchestrator kubernetes
--namespace krane
--compose-file docker-compose.yml
--compose-file docker-compose.k8s.yml krane

root@kitploit:~
नोट: उपरोक्त कमांड चलाने से पहले सुनिश्चित करें कि आपका वर्तमान kube context सही तरीके से सेट है!

एप्लिकेशन Stack अब Kubernetes क्लस्टर में डिप्लॉय किया जाना चाहिए और सभी सेवाएँ तैयार और एक्स्पोज़्ड होनी चाहिए। ध्यान दें कि _Krane_ अपने आप अपना report loop और dashboard server शुरू कर देगा।```sh
docker stack services --orchestrator kubernetes --namespace krane krane

उपरोक्त कमांड निम्नलिखित आउटपुट उत्पन्न करेगा:``` 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:~
अपने Kubernetes क्लस्टर के RBAC सुरक्षा आसन की जाँच करें http://localhost:8000 पर जाकर।

ध्यान दें कि दूरस्थ क्लस्टर परिनियोजन के लिए आपको संभवतः पहले _Krane_ सेवा को पोर्ट-फ़ॉरवर्ड करना होगा।```sh
kubectl --context=my-remote-cluster --namespace=krane port-forward svc/krane 8000

Stack को हटाने के लिए```sh docker stack rm krane
--orchestrator kubernetes
--namespace krane

root@kitploit:~
## सूचनाएँ

Krane आपको स्लैक एकीकरण के माध्यम से मध्यम और उच्च गंभीरता की पहचान की गई विसंगतियों के बारे में सूचित करेगा।

सूचनाएँ सक्षम करने के लिए [config/config.yaml](https://github.com/appvia/krane/blob/HEAD/config/config.yaml) फ़ाइल में Slack `webhook_url` और `channel` निर्दिष्ट करें, या वैकल्पिक रूप से `SLACK_WEBHOOK_URL` और `SLACK_CHANNEL` दोनों पर्यावरण चर सेट करें। पर्यावरण चर कॉन्फ़िग फ़ाइल मानों पर प्राथमिकता लेंगे।

## स्थानीय विकास

यह खंड स्थानीय विकास को सक्षम करने के चरणों का वर्णन करता है।

### सेटअप

_Krane_ कोड निर्भरताएँ स्थापित करें इसके साथ```sh
./bin/setup

निर्भरताएँ

Krane RedisGraph पर निर्भर करता है। docker-compose Krane की निर्भरताओं को स्थानीय रूप से चलाने का सबसे तेज़ तरीका है।```sh docker-compose up -d redisgraph

root@kitploit:~
RedisGraph सेवा चालू है यह जाँचने के लिए:```sh
docker-compose ps

सेवाओं को रोकने के लिए:```sh docker-compose down

root@kitploit:~
### विकास

इस बिंदु पर आपको स्थानीय शेल में कमांड लागू करके _Krane_ कोडबेस और परीक्षण परिणामों को संशोधित करने में सक्षम होना चाहिए।```sh
$ ./bin/krane --help                    # to get help
$ ./bin/krane report -k docker-desktop  # to generate your first report for
                                        # local docker-desktop k8s cluster
...

Dashboard UI स्थानीय विकास मोड को सक्षम करने के लिए```sh $ cd dashboard $ npm install $ npm start

root@kitploit:~
यह स्वचालित रूप से डैशबोर्ड सर्वर शुरू करेगा, डिफ़ॉल्ट ब्राउज़र खोलेगा और स्रोत फ़ाइलों में परिवर्तनों पर नज़र रखेगा।

_Krane_ बेहतर डेवलपर अनुभव के लिए [Skaffold](https://skaffold.dev/) के साथ पूर्व-कॉन्फ़िगर आता है। स्थानीय या रिमोट Kubernetes क्लस्टर में पूरे स्टैक को चलाकर प्रोजेक्ट पर पुनरावृत्ति और एप्लिकेशन को मान्य करना अब और आसान हो गया है।
कोड हॉट-रीलोड स्थानीय परिवर्तनों को तेज़ डेवलपमेंट लाइफसाइकिल के लिए चल रहे कंटेनर में स्वचालित रूप से प्रचारित करने में सक्षम बनाता है।```sh
skaffold dev --kube-context docker-desktop --namespace krane --port-forward

परीक्षण

स्थानीय रूप से परीक्षण चलाएँ के साथ```sh bundle exec rspec

root@kitploit:~
## Krane में योगदान

हम समुदाय से किसी भी तरह के योगदान का स्वागत करते हैं! आरंभ करने के तरीके के बारे में अधिक जानकारी के लिए कृपया हमारी [योगदान](https://github.com/appvia/krane/blob/HEAD/CONTRIBUTING.md) मार्गदर्शिका देखें। यदि आप _Krane_ का उपयोग करते हैं, इसे उपयोगी पाते हैं, या सामान्यतः Kubernetes सुरक्षा में रुचि रखते हैं, तो कृपया इस रिपॉजिटरी को **स्टार** और **वॉच** करके हमें बताएं। धन्यवाद!

## शामिल हों

हमारे [समुदाय चैनल](https://www.appvia.io/join-the-appvia-community) पर चर्चा में शामिल हों।

Krane एक सामुदायिक परियोजना है और हम आपके योगदान का स्वागत करते हैं। किसी बग की रिपोर्ट करने, सुधार का सुझाव देने, या नई सुविधा का अनुरोध करने के लिए कृपया एक Github समस्या खोलें। आप कैसे मदद कर सकते हैं, इस बारे में अधिक जानकारी के लिए हमारी [योगदान](https://github.com/appvia/krane/blob/HEAD/CONTRIBUTING.md) मार्गदर्शिका देखें।

## रोडमैप

परियोजना की हमारी योजनाओं के बारे में विवरण के लिए हमारा [रोडमैप](https://github.com/appvia/krane/projects/1) देखें।

## लाइसेंस

लेखक: Marcin Ciszak <[email protected]>

कॉपीराइट (c) 2019-2020 [Appvia Ltd](https://appvia.io)

यह परियोजना [अपाचे लाइसेंस, संस्करण 2.0](https://github.com/appvia/krane/blob/HEAD/LICENSE) के तहत वितरित की गई है।
टूल डाउनलोड करें
  • uncover - कई सर्च इंजन का उपयोग करके इंटरनेट पर खुले होस्ट्स को तेज़ी से खोजें।```