
kubeaudit helps you audit your Kubernetes clusters against common security controls
अब क्लस्टरों के लिए Kubernetes >=1.19 चलाना आवश्यक है।
अनपंजीकृत
kubernetes.ioएनोटेशन वाले ओवरराइड लेबल को हटा दिया जाएगा। जल्द ही इसके बजायkubeaudit.ioका उपयोग करना आवश्यक हो जाएगा। अतिरिक्त संदर्भ के लिए इस चर्चा को देखें।
Kubeaudit को अक्टूबर 2024 तक हटाने की योजना है।
हम सक्रिय रूप से ऐसे रखरखावकर्ताओं की तलाश कर रहे हैं जो इस परियोजना की देखरेख लेने में रुचि रखते हैं। यदि आप इसके विकास और रखरखाव को जारी रखने के लिए उत्सुक हैं, तो कृपया हमसे संपर्क करें।
विकल्पों की तलाश करने वाले उपयोगकर्ताओं के लिए, हम Kubebench पर स्विच करने की सलाह देते हैं, जो समान कार्यक्षमता प्रदान करता है और सक्रिय रूप से बनाए रखा जाता है।
समुदाय के योगदान और समर्थन के लिए धन्यवाद।
kubeaudit एक कमांड लाइन टूल और Go पैकेज है जो Kubernetes क्लस्टरों का विभिन्न सुरक्षा संबंधी चिंताओं के लिए ऑडिट करता है, जैसे:
tldr. kubeaudit सुनिश्चित करता है कि आप सुरक्षित कंटेनर तैनात करें!
kubeaudit को Go पैकेज के रूप में उपयोग करने के लिए, पैकेज दस्तावेज़ देखें।
इस README का शेष भाग kubeaudit को कमांड लाइन टूल के रूप में उपयोग करने पर केंद्रित होगा।
brew install kubeaudit
Kubeaudit के आधिकारिक रिलीज़ हैं जो आशीर्वादित और स्थिर हैं: आधिकारिक रिलीज़
मुख्य शाखा में स्थिर रिलीज़ की तुलना में नई सुविधाएँ हो सकती हैं। यदि आपको रिलीज़ में अभी तक शामिल नहीं की गई कोई नई सुविधा चाहिए, तो सुनिश्चित करें कि आप नवीनतम Go का उपयोग कर रहे हैं और निम्नलिखित चलाएँ:
go get -v github.com/Shopify/kubeaudit
kubeaudit का उपयोग त्वरित प्रारंभ से शुरू करें या सभी समर्थित कमांड देखें।
पूर्वापेक्षा: kubectl v1.12.0 या बाद का संस्करण
kubectl v1.12.0 के साथ बाहरी फ़ंक्शनों के आसान प्लगेबिलिटी की शुरुआत के साथ, kubeaudit को kubectl audit के रूप में आमंत्रित किया जा सकता है:
make plugin चलाकर और $GOPATH/bin को अपने पथ में उपलब्ध कराकर।या
kubectl-audit करके और इसे अपने पथ में उपलब्ध कराकर।हम अब Docker Hub पर छवियाँ जारी नहीं करते (क्योंकि Docker Hub ने मुफ्त टीम संगठनों को बंद कर दिया)। फिलहाल, पुरानी छवियाँ अभी भी उपलब्ध हैं लेकिन किसी भी समय उपलब्ध नहीं रह सकती हैं। हम जल्द ही Github कंटेनर रजिस्ट्री पर छवियाँ प्रकाशित करना शुरू करेंगे।
अपने क्लस्टर में एक जॉब के रूप में kubeaudit चलाने के लिए क्लस्टर में kubeaudit चलाना देखें।
kubeaudit के तीन मोड हैं:
यदि -f/--manifest फ्लैग का उपयोग करके कोई Kubernetes मेनिफेस्ट फ़ाइल प्रदान की जाती है, तो kubeaudit मेनिफेस्ट फ़ाइल का ऑडिट करेगा।
उदाहरण कमांड:
kubeaudit all -f "/path/to/manifest.yml"
उदाहरण आउटपुट:
$ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml"
---------------- Results for ---------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
namespace: deployment-apps-v1
--------------------------------------------
-- [error] AppArmorAnnotationMissing
Message: AppArmor annotation missing. The annotation 'container.apparmor.security.beta.kubernetes.io/container' should be added.
Metadata:
Container: container
MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container
-- [error] AutomountServiceAccountTokenTrueAndDefaultSA
Message: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
-- [error] CapabilityShouldDropAll
Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list.
Metadata:
Container: container
Capability: AUDIT_WRITE
...
यदि किसी न्यूनतम गंभीरता के साथ कोई त्रुटि नहीं मिलती है, तो निम्नलिखित लौटाया जाता है:
All checks completed. 0 high-risk vulnerabilities found
मेनिफेस्ट मोड autofix कमांड का उपयोग करके सभी सुरक्षा मुद्दों को स्वचालित रूप से ठीक करने का भी समर्थन करता है:
kubeaudit autofix -f "/path/to/manifest.yml"
स्रोत फ़ाइल को संशोधित करने के बजाय निश्चित मेनिफेस्ट को एक नई फ़ाइल में लिखने के लिए, -o/--output फ्लैग का उपयोग करें।
kubeaudit autofix -f "/path/to/manifest.yml" -o "/path/to/fixed"
किसी kubeaudit कॉन्फ़िग फ़ाइल पर निर्दिष्ट कस्टम नियमों के आधार पर मेनिफेस्ट को ठीक करने के लिए, -k/--kconfig फ्लैग का उपयोग करें।
kubeaudit autofix -k "/path/to/kubeaudit-config.yml" -f "/path/to/manifest.yml" -o "/path/to/fixed"
Kubeaudit पता लगा सकता है कि यह किसी क्लस्टर में कंटेनर के अंदर चल रहा है या नहीं। यदि ऐसा है, तो यह उस क्लस्टर के सभी Kubernetes संसाधनों का ऑडिट करने का प्रयास करेगा:
kubeaudit all
Kubeaudit स्थानीय kubeconfig फ़ाइल ($HOME/.kube/config) का उपयोग करके किसी क्लस्टर से कनेक्ट करने का प्रयास करेगा। एक अलग kubeconfig स्थान --kubeconfig फ्लैग का उपयोग करके निर्दिष्ट किया जा सकता है। kubeconfig के किसी संदर्भ को निर्दिष्ट करने के लिए, -c/--context फ्लैग का उपयोग करें।
kubeaudit all --kubeconfig "/path/to/config" --context my_cluster
kubernetes कॉन्फ़िग फ़ाइलों के बारे में अधिक जानकारी के लिए, https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/ देखें।
Kubeaudit तीन गंभीरता स्तरों के साथ परिणाम उत्पन्न करता है:
Error: एक सुरक्षा समस्या या अमान्य kubernetes कॉन्फ़िगरेशनWarning: एक सर्वोत्तम अभ्यास अनुशंसाInfo: सूचनात्मक, कोई कार्रवाई आवश्यक नहीं। इसमें वे परिणाम शामिल हैं जो ओवरराइड किए गए हैं।न्यूनतम गंभीरता स्तर --minSeverity/-m फ्लैग का उपयोग करके सेट किया जा सकता है।
डिफ़ॉल्ट रूप से kubeaudit मानव-पठनीय तरीके से परिणाम आउटपुट करेगा। यदि आउटपुट को आगे संसाधित किया जाना है, तो इसे --format json फ्लैग का उपयोग करके JSON पर सेट किया जा सकता है। परिणामों को लॉग के रूप में आउटपुट करने के लिए (पिछला डिफ़ॉल्ट) --format logrus का उपयोग करें। कुछ आउटपुट प्रारूपों में टर्मिनल में परिणामों को पढ़ने में आसान बनाने के लिए रंग शामिल होते हैं। रंगों को अक्षम करने के लिए (उदाहरण के लिए, यदि आप आउटपुट को टेक्स्ट फ़ाइल में भेज रहे हैं), तो आप --no-color फ्लैग का उपयोग कर सकते हैं।
आप --format sarif फ्लैग का उपयोग करके kubeaudit रिपोर्ट को SARIF में उत्पन्न कर सकते हैं। SARIF परिणामों को फ़ाइल में लिखने के लिए, आप > के साथ आउटपुट को रीडायरेक्ट कर सकते हैं। उदाहरण के लिए:
kubeaudit all -f path-to-my-file.yaml --format="sarif" > example.sarif
यदि गंभीरता स्तर error के परिणाम हैं, तो kubeaudit निकास कोड 2 के साथ बाहर निकलेगा। इसे --exitcode/-e फ्लैग का उपयोग करके बदला जा सकता है।
kubeaudit को अनुकूलित करने के सभी तरीकों के लिए, ग्लोबल फ्लैग देखें।
ऑडिटर को व्यक्तिगत रूप से भी चलाया जा सकता है।
kubeaudit कॉन्फ़िग का उपयोग दो कार्यों के लिए किया जा सकता है:
कोई भी कॉन्फ़िगरेशन जिसे व्यक्तिगत ऑडिटर के लिए फ्लैग का उपयोग करके निर्दिष्ट किया जा सकता है, कॉन्फ़िग का उपयोग करके प्रस्तुत किया जा सकता है।
कॉन्फ़िग का निम्नलिखित प्रारूप है:
enabledAuditors:
# ऑडिटर डिफ़ॉल्ट रूप से सक्षम होते हैं यदि उन्हें स्पष्ट रूप से "false" पर सेट नहीं किया गया हो
apparmor: false
asat: false
capabilities: true
deprecatedapis: true
hostns: true
image: true
limits: true
mounts: true
netpols: true
nonroot: true
privesc: true
privileged: true
rootfs: true
seccomp: true
auditors:
capabilities:
# ऐड सूची में आवश्यक क्षमताएँ जोड़ें, ताकि kubeaudit त्रुटियाँ न रिपोर्ट करे
allowAddList: ['AUDIT_WRITE', 'CHOWN']
deprecatedapis:
# यदि कोई संस्करण निर्दिष्ट नहीं है और 'deprecatedapis' ऑडिटर सक्षम है, तो हटाए गए API के साथ परिभाषित संसाधनों के लिए WARN परिणाम उत्पन्न होंगे।
currentVersion: '1.22'
targetedVersion: '1.25'
image:
# यदि कोई इमेज निर्दिष्ट नहीं है और 'image' ऑडिटर सक्षम है, तो बिना टैग वाली इमेज का उपयोग करने वाले कंटेनरों के लिए WARN परिणाम उत्पन्न होंगे
image: 'myimage:mytag'
limits:
# यदि कोई सीमा निर्दिष्ट नहीं है और 'limits' ऑडिटर सक्षम है, तो उन कंटेनरों के लिए WARN परिणाम उत्पन्न होंगे जिनमें कोई cpu या मेमोरी सीमा निर्दिष्ट नहीं है
cpu: '750m'
memory: '500m'
प्रत्येक ऑडिटर के बारे में अधिक विवरण के लिए, जिसमें कॉन्फ़िग में ऑडिटर-विशिष्ट कॉन्फ़िगरेशन का विवरण शामिल है, ऑडिटर दस्तावेज़ देखें।
नोट: kubeaudit कॉन्फ़िग, --kubeconfig फ्लैग के साथ निर्दिष्ट kubeconfig फ़ाइल के समान नहीं है, जो Kubernetes कॉन्फ़िग फ़ाइल को संदर्भित करता है (देखें स्थानीय मोड)। यह भी ध्यान दें कि केवल all और autofix कमांड kubeaudit कॉन्फ़िग का उपयोग करने का समर्थन करते हैं। यह अन्य कमांड के साथ काम नहीं करेगा।
नोट: यदि फ्लैग का उपयोग कॉन्फ़िग फ़ाइल के साथ संयोजन में किया जाता है, तो फ्लैग प्राथमिकता लेंगे।
सुरक्षा मुद्दों को विशिष्ट कंटेनरों या पॉड्स के लिए ओवरराइड लेबल जोड़कर अनदेखा किया जा सकता है। इसका मतलब है कि ऑडिटर त्रुटि परिणामों के बजाय info परिणाम उत्पन्न करेगा और ऑडिट परिणाम नाम के अंत में Allowed जुड़ जाएगा। लेबल प्रत्येक ऑडिटर के दस्तावेज़ीकरण में प्रलेखित हैं, लेकिन ओवरराइड का समर्थन करने वाले ऑडिटर के लिए सामान्य प्रारूप इस प्रकार है:
एक ओवरराइड लेबल में एक key और एक value होता है।
key ओवरराइड प्रकार (कंटेनर या पॉड) और एक override identifier का संयोजन है जो प्रत्येक ऑडिटर के लिए अद्वितीय है (विशिष्ट ऑडिटर के लिए docs देखें)। key ओवरराइड प्रकार के आधार पर दो रूपों में से एक ले सकता है:
container.kubeaudit.io/[container name].[override identifier]
kubeaudit.io/[override identifier]
यदि value को एक गैर-रिक्त स्ट्रिंग पर सेट किया जाता है, तो इसे info परिणाम में OverrideReason के रूप में प्रदर्शित किया जाएगा:
$ kubeaudit asat -f "auditors/asat/fixtures/service-account-token-true-allowed.yml"
---------------- Results for ---------------
apiVersion: v1
kind: ReplicationController
metadata:
name: replicationcontroller
namespace: service-account-token-true-allowed
--------------------------------------------
-- [info] AutomountServiceAccountTokenTrueAndDefaultSAAllowed
Message: Audit result overridden: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
Metadata:
OverrideReason: SomeReason
Kubernetes विनिर्देश के अनुसार, value 63 वर्णों या उससे कम होनी चाहिए और खाली होनी चाहिए या एक अल्फ़ान्यूमेरिक वर्ण ([a-z0-9A-Z]) से शुरू और समाप्त होनी चाहिए जिसके बीच में डैश (-), अंडरस्कोर (_), डॉट (.), और अल्फ़ान्यूमेरिक वर्ण हो सकते हैं।
एक ही संसाधन में कई ओवरराइड लेबल (कई ऑडिटर के लिए) जोड़े जा सकते हैं।
उदाहरणों के लिए उस विशिष्ट ऑडिटर के ऑडिटर दस्तावेज़ देखें जिसे आप ओवरराइड करना चाहते हैं।
लेबल के बारे में अधिक जानने के लिए, https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ देखें।
यदि आप कोई बग ठीक करना चाहते हैं, कोई सुविधा जोड़ना चाहते हैं या केवल एक टाइपो सुधारना चाहते हैं, तो कृपया बेझिझक ऐसा करें जब तक आप हमारे आचार संहिता का पालन करते हैं।
go get github.com/Shopify/kubeauditcd $GOPATH/src/github.com/Shopify/kubeauditgit remote add fork https://github.com/you-are-awesome/kubeauditgit checkout -b awesome-new-featureUSE_KIND=true make test (Kind के बिना परीक्षण चलाने के लिए: make test)git commit -am 'Adds awesome feature'git push forkध्यान दें कि यदि आपने अपना PR खोलने से पहले CLA पर हस्ताक्षर नहीं किया, तो आप PR पर एक टिप्पणी जोड़कर जाँच को पुनः चला सकते हैं जो कहे "I've signed the CLA!"!
| कमांड | विवरण | दस्तावेज़ीकरण |
|---|
all | सभी उपलब्ध ऑडिटर चलाता है, या kubeaudit कॉन्फ़िग का उपयोग करके निर्दिष्ट किए गए। | docs |
autofix | स्वचालित रूप से सुरक्षा मुद्दों को ठीक करता है। | docs |
version | वर्तमान kubeaudit संस्करण प्रिंट करता है। |
| कमांड | विवरण | दस्तावेज़ीकरण |
|---|
apparmor | AppArmor के बिना चलने वाले कंटेनरों को ढूंढता है। | docs |
asat | स्वचालित रूप से माउंट किए गए डिफ़ॉल्ट सेवा खाते का उपयोग करने वाले पॉड्स को ढूंढता है। | docs |
capabilities | ऐसे कंटेनरों को ढूंढता है जो अनुशंसित क्षमताओं को नहीं हटाते या नई जोड़ते हैं। | docs |
deprecatedapis | किसी भी संसाधन को ढूंढता है जो हटाए गए API संस्करण के साथ परिभाषित है। | docs |
hostns | ऐसे कंटेनरों को ढूंढता है जिनमें HostPID, HostIPC या HostNetwork सक्षम है। | docs |
image | ऐसे कंटेनरों को ढूंढता है जो इमेज के वांछित संस्करण (टैग के माध्यम से) का उपयोग नहीं करते या बिना टैग वाली इमेज का उपयोग करते हैं। | docs |
limits | ऐसे कंटेनरों को ढूंढता है जो निर्दिष्ट CPU और मेमोरी सीमा से अधिक हैं या कोई सीमा निर्दिष्ट नहीं करते। | docs |
mounts | ऐसे कंटेनरों को ढूंढता है जिनमें संवेदनशील होस्ट पथ माउंट हैं। | docs |
netpols | ऐसे नेमस्पेस को ढूंढता है जिनमें डिफ़ॉल्ट-अस्वीकार नेटवर्क नीति नहीं है। | docs |
nonroot | रूट के रूप में चलने वाले कंटेनरों को ढूंढता है। | docs |
privesc | ऐसे कंटेनरों को ढूंढता है जो विशेषाधिकार वृद्धि की अनुमति देते हैं। | docs |
privileged | प्रिविलेज्ड के रूप में चलने वाले कंटेनरों को ढूंढता है। | docs |
rootfs | ऐसे कंटेनरों को ढूंढता है जिनमें केवल-पढ़ने के लिए फाइलसिस्टम नहीं है। | docs |
seccomp | Seccomp के बिना चलने वाले कंटेनरों को ढूंढता है। | docs |
| Short | Long | विवरण |
|---|
| --format | उपयोग करने के लिए आउटपुट प्रारूप ("sarif", "pretty", "logrus", "json" में से एक) (डिफ़ॉल्ट "pretty" है) | |
| --kubeconfig | स्थानीय Kubernetes कॉन्फ़िग फ़ाइल का पथ। केवल स्थानीय मोड में उपयोग किया जाता है (डिफ़ॉल्ट $HOME/.kube/config है) | |
| -c | --context | उपयोग करने के लिए kubeconfig संदर्भ का नाम |
| -f | --manifest | ऑडिट करने के लिए yaml कॉन्फ़िगरेशन का पथ। केवल मेनिफेस्ट मोड में उपयोग किया जाता है। stdin से पढ़ने के लिए आप - का उपयोग कर सकते हैं। |
| -n | --namespace | केवल निर्दिष्ट नेमस्पेस में संसाधनों का ऑडिट करें। वर्तमान में मेनिफेस्ट मोड में समर्थित नहीं है। |
| -g | --includegenerated | स्कैन में जनरेट किए गए संसाधनों को शामिल करें (जैसे डिप्लॉयमेंट द्वारा जनरेट किए गए पॉड्स)। यदि आप चाहते हैं कि kubeaudit जनरेट किए गए संसाधनों के लिए परिणाम उत्पन्न करे (उदाहरण के लिए यदि आपके पास कस्टम संसाधन हैं या अनाथ संसाधनों को पकड़ना चाहते हैं जहां मालिक संसाधन अब मौजूद नहीं है) तो आप इस फ्लैग का उपयोग कर सकते हैं। |
| -m | --minseverity | रिपोर्ट करने के लिए न्यूनतम गंभीरता स्तर सेट करें ("error", "warning", "info" में से एक) (डिफ़ॉल्ट "info" है) |
| -e | --exitcode | यदि "error" गंभीरता वाले परिणाम हैं तो उपयोग करने के लिए निकास कोड। परंपरागत रूप से, 0 सफलता के लिए और सभी गैर-शून्य कोड त्रुटि के लिए उपयोग किए जाते हैं। (डिफ़ॉल्ट 2 है) |
| --no-color | आउटपुट में रंगों का उपयोग न करें (डिफ़ॉल्ट false है) |