
आपके इन्फ्रास्ट्रक्चर एज़ कोड में सामान्य कमजोरियों की स्कैन करने वाली सेवा
| पहलू | जानकारी |
|---|
| टूल नाम | IaC Scan Runner |
| डॉकर इमेज | xscanner/runner |
| PyPI पैकेज | iac-scan-runner |
| दस्तावेज़ीकरण | docs |
| हमसे संपर्क करें | [email protected] |
IaC Scan Runner एक REST API सेवा है जिसका उपयोग IaC (Infrastructure as Code) पैकेज को स्कैन करने और संभावित कमजोरियों और सुधारों को खोजने के लिए विभिन्न कोड जांच करने के लिए किया जाता है। अधिक जानकारी के लिए docs देखें।
यह अनुभाग REST API को चलाने का तरीका बताता है।
आप सार्वजनिक xscanner/runner डॉकर इमेज का उपयोग करके REST API को इस प्रकार चला सकते हैं:
# run IaC Scan Runner REST API in a Docker container and
# navigate to localhost:8080/swagger or localhost:8080/redoc
$ docker run --name iac-scan-runner -p 8080:80 xscanner/runner
या आप इमेज को स्थानीय रूप से बना सकते हैं और इसे इस प्रकार चला सकते हैं:
# build Docker container (it will take some time)
$ docker build -t iac-scan-runner .
# run IaC Scan Runner REST API in a Docker container and
# navigate to localhost:8080/swagger or localhost:8080/redoc
$ docker run --name iac-scan-runner -p 8080:80 iac-scan-runner
IaC Scan Runner CLI का उपयोग करके चलाने के लिए:
# install the CLI
$ python3 -m venv .venv && . .venv/bin/activate
(.venv) $ pip install iac-scan-runner
# print OpenAPI specification
(.venv) $ iac-scan-runner openapi
# install prerequisites
(.venv) $ iac-scan-runner install
# run IaC Scan Runner REST API
(.venv) $ iac-scan-runner run
स्रोत से स्थानीय रूप से चलाने के लिए:
# Export env variables
export MONGODB_CONNECTION_STRING=mongodb://localhost:27017
export SCAN_PERSISTENCE=enabled
export USER_MANAGEMENT=enabled
# Setup MongoDB
$ docker run --name mongodb -p 27017:27017 mongo
# install prerequisites
$ python3 -m venv .venv && . .venv/bin/activate
(.venv) $ pip install -r requirements.txt
(.venv) $ ./install-checks.sh
# run IaC Scan Runner REST API (add --reload flag to apply code changes on the way)
(.venv) $ uvicorn src.iac_scan_runner.api:app
यह भाग संभावित परिनियोजनों में से एक और API कॉल का उपयोग करने के छोटे उदाहरण दिखाएगा।
पहले हम iac scan runner रिपॉजिटरी को क्लोन करेंगे और API चलाएंगे।
$ git clone https://github.com/xlab-si/iac-scan-runner.git
$ docker compose up
इसके बाद आप localhost:8000 पर कॉल करके विभिन्न API एंडपॉइंट का उपयोग कर सकते हैं। आप localhost:8000/swagger या localhost:8000/redoc पर भी जा सकते हैं और वहां सभी API एंडपॉइंट का परीक्षण कर सकते हैं। इस उदाहरण में, हम API एंडपॉइंट को कॉल करने के लिए curl का उपयोग करेंगे।
curl -X 'POST' \
'http://0.0.0.0/project?creator_id=test' \
-H 'accept: application/json' \
-d ''
प्रोजेक्ट आईडी हमें लौटा दी जाएगी। इस उदाहरण के लिए प्रोजेक्ट आईडी 1e7b2a91-2896-40fd-8d53-83db56088026 है।
curl -X 'PUT' \
'http://0.0.0.0:8000/projects/1e7b2a91-2896-40fd-8d53-83db56088026/checks/ansible-lint/disable' \
-H 'accept: application/json'
curl -X 'POST' \
'http://0.0.0.0:8000/projects/1e7b2a91-2896-40fd-8d53-83db56088026/scan?scan_response_type=json' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F '[email protected];type=application/zip'
बस इतना ही।
किसी निश्चित बिंदु पर, स्कैन वर्कफ़्लो में नए जांच उपकरणों को शामिल करने की आवश्यकता हो सकती है, जिसका उद्देश्य IaC मानकों और प्रोजेक्ट प्रकारों का व्यापक कवरेज प्रदान करना है। इसलिए, इस उपधारा में, उस उद्देश्य के लिए आवश्यक चरणों का एक क्रम पहचाना और वर्णित किया गया है। हालाँकि, चरणों को मैन्युअल रूप से निष्पादित करना होगा जैसा कि वर्णित किया जाएगा, लेकिन भविष्य में API के माध्यम से इस प्रक्रिया को स्वचालित करने और उपयोगकर्ता-अनुकूल इंटरफ़ेस प्रदान करने की योजना है जो नए उपकरणों को आयात करते समय उपयोगकर्ता की सहायता करेगा, जो स्कैन वर्कफ़्लो बनाने वाले उपलब्ध कैटलॉग का हिस्सा बनेंगे। चित्र 16 एक नए उपकरण के साथ स्कैन वर्कफ़्लो को विस्तारित करने के लिए आवश्यक चरणों को दर्शाता है।
चरण 1 – चेक्स निर्देशिका में टूल-विशिष्ट क्लास जोड़ना
पहले, IaC Scan Runner के स्रोत कोड के अंदर चेक्स निर्देशिका में एक नया टूल-विशिष्ट पायथन क्लास जोड़ना आवश्यक है:
iac-scan-runner/src/iac_scan_runner/checks/new_tool.py
नए उपकरण का क्लास मौजूदा Check क्लास से विरासत प्राप्त करता है, जो स्कैन वर्कफ़्लो उपकरणों का सामान्यीकरण प्रदान करता है। इसके अलावा, निम्नलिखित विधियों का कार्यान्वयन प्रदान करना आवश्यक है:
चरण 2 – ScanRunner कंस्ट्रक्टर के अंदर चेक टूल क्लास इंस्टेंस जोड़ना
एक बार जब Check से प्राप्त नया क्लास IaC Scan Runner के स्रोत कोड में जोड़ दिया जाता है, तो इसके मुख्य क्लास, जिसे ScanRunner कहा जाता है, के स्रोत कोड को संशोधित करना भी आवश्यक है। जब इस क्लास के संशोधनों की बात आती है, तो पहले टूल-विशिष्ट क्लास को आयात करना, एक नया चेक टूल-विशिष्ट क्लास इंस्टेंस बनाना और इसे def init_checks(self) के अंदर IaC चेक्स के शब्दकोश में जोड़ना आवश्यक है।
A. चेक टूल क्लास आयात करना
from iac_scan_runner.checks.tfsec import TfsecCheck
B. init_checks के अंदर चेक टूल ऑब्जेक्ट का नया इंस्टेंस बनाना
"""Initiate predefined check objects"""
new_tool = NewToolCheck()
C. इसे init_checks के अंदर self.iac_checks शब्दकोश में जोड़ना
self.iac_checks = {
new_tool.name: new_tool,
…
}
चरण 3 – कम्पैटिबिलिटी क्लास के अंदर कम्पैटिबिलिटी मैट्रिक्स में चेक टूल जोड़ना
दूसरी ओर, फ़ाइल src/iac_scan_runner/compatibility.py के अंदर, शब्दकोश जो कम्पैटिबिलिटी मैट्रिक्स का प्रतिनिधित्व करता है, उसे भी विस्तारित किया जाना चाहिए। दो संभावित मामले हैं: a) नई फ़ाइल प्रकार को एक कुंजी के रूप में जोड़ा जाना चाहिए, साथ में प्रासंगिक उपकरणों की सूची मान के रूप में b) मौजूदा फ़ाइल प्रकार के लिए कम्पैटिबिलिटी सूची में नया उपकरण जोड़ा जाना चाहिए।
compatibility_matrix = {
"new_type": ["new_tool_1", "new_tool_2"],
…
"old_typeK": ["tool_1", … "tool_N", "new_tool_3"]
}
चरण 4 – परिणाम सारांश के लिए समर्थन प्रदान करना
अंत में, स्कैन वर्कफ़्लो विस्तार के लिए आवश्यक संशोधनों के अनुक्रम में अंतिम चरण क्लास ResultsSummary (src/iac_scan_runner/results_summary.py) को संशोधित करना है। सटीक रूप से, इसके method summarize_outcome में कोड का एक भाग जोड़ना आवश्यक है जो विशिष्ट स्ट्रिंग्स की खोज करेगा जो टूल-विशिष्ट हैं और इसका उपयोग यह पहचानने के लिए किया जा सकता है कि जाँच पास हुई या विफल। संगत जाँचों को पार करने वाले लूप के अंदर, प्रत्येक नए उपकरण के लिए if-else की निम्नलिखित संरचना शामिल की जानी चाहिए:
if check == "new_tool":
if outcome.find("Check pass string") > -1:
self.outcomes[check]["status"] = "Passed"
return "Passed"
else:
self.outcomes[check]["status"] = "Problems"
return "Problems"
यह कार्य Apache License 2.0 के तहत लाइसेंस प्राप्त है।
आप xOpera टीम से [email protected] पर ईमेल भेजकर संपर्क कर सकते हैं।
इस परियोजना को यूरोपीय संघ के Horizon 2020 अनुसंधान और नवाचार कार्यक्रम से अनुदान समझौता संख्या 101000162 (PIACERE) के तहत वित्त पोषण प्राप्त हुआ है।