
vault v2.1.0
गुप्त प्रबंधन, एन्क्रिप्शन एक सेवा के रूप में, और विशेषाधिकार प्राप्त पहुँच प्रबंधन के लिए एक उपकरण
Vault

कृपया ध्यान दें: हम Vault की सुरक्षा और अपने उपयोगकर्ताओं के विश्वास को बहुत गंभीरता से लेते हैं। यदि आपको लगता है कि आपको Vault में कोई सुरक्षा समस्या मिली है, तो कृपया [email protected] पर हमसे संपर्क करके जिम्मेदारी से खुलासा करें.
- वेबसाइट: developer.hashicorp.com/vault
- घोषणा सूची: Google Groups
- चर्चा मंच: Discuss
- दस्तावेज़ीकरण: https://developer.hashicorp.com/vault/docs
- ट्यूटोरियल: https://developer.hashicorp.com/vault/tutorials
- प्रमाणन परीक्षा: https://developer.hashicorp.com/certifications/security-automation
- दस्तावेज़ीकरण स्रोत: https://github.com/hashicorp/web-unified-docs
Vault गुप्त जानकारी (secrets) को सुरक्षित रूप से एक्सेस करने का एक उपकरण है। गुप्त जानकारी वह कुछ भी है जिस तक आप पहुंच को कड़ाई से नियंत्रित करना चाहते हैं, जैसे कि API कुंजियाँ, पासवर्ड, प्रमाणपत्र और बहुत कुछ। Vault किसी भी गुप्त जानकारी के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है, साथ ही कड़ा पहुंच नियंत्रण और विस्तृत ऑडिट लॉग रिकॉर्ड करता है।
एक आधुनिक सिस्टम को असंख्य गुप्त जानकारियों तक पहुंच की आवश्यकता होती है: डेटाबेस क्रेडेंशियल, बाहरी सेवाओं के लिए API कुंजियाँ, सेवा-उन्मुख आर्किटेक्चर संचार के लिए क्रेडेंशियल, आदि। यह समझना कि कौन किस गुप्त जानकारी तक पहुँच रहा है, पहले से ही बहुत कठिन और प्लेटफ़ॉर्म-विशिष्ट है। कुंजी रोलिंग, सुरक्षित भंडारण और विस्तृत ऑडिट लॉग जोड़ना एक कस्टम समाधान के बिना लगभग असंभव है। यहीं पर Vault कदम रखता है।
Vault की प्रमुख विशेषताएं हैं:
-
सुरक्षित गुप्त भंडारण: Vault मनमाने key/value जोड़े संग्रहीत कर सकता है। Vault डेटा को स्थायी भंडारण में लिखने से पहले एन्क्रिप्ट करता है, इसलिए कच्चे भंडारण तक पहुंच प्राप्त करना आपके रहस्यों तक पहुंचने के लिए पर्याप्त नहीं है। Vault डिस्क, Consul और अधिक पर लिख सकता है।
-
गतिशील गुप्त जानकारियाँ: Vault कुछ सिस्टमों के लिए ऑन-डिमांड गुप्त जानकारी उत्पन्न कर सकता है, जैसे कि AWS या SQL डेटाबेस। उदाहरण के लिए, जब किसी एप्लिकेशन को S3 बकेट तक पहुँचने की आवश्यकता होती है, तो वह Vault से क्रेडेंशियल माँगता है, और Vault ऑन-डिमांड एक AWS कीपेयर उत्पन्न करेगा जिसमें वैध अनुमतियाँ हों। ये गतिशील गुप्त जानकारियाँ बनाने के बाद, Vault लीज़ समाप्त होने पर स्वचालित रूप से उन्हें रद्द भी कर देगा।
-
डेटा एन्क्रिप्शन: Vault डेटा को संग्रहीत किए बिना एन्क्रिप्ट और डिक्रिप्ट कर सकता है। यह सुरक्षा टीमों को एन्क्रिप्शन पैरामीटर परिभाषित करने और डेवलपर्स को अपनी स्वयं की एन्क्रिप्शन विधियाँ डिज़ाइन किए बिना SQL डेटाबेस जैसे स्थान पर एन्क्रिप्टेड डेटा संग्रहीत करने की अनुमति देता है।
-
लीज़ और नवीनीकरण: Vault प्रत्येक गुप्त जानकारी के साथ एक लीज़ जोड़ता है। लीज़ के अंत में, Vault स्वचालित रूप से गुप्त जानकारी को रद्द कर देता है। क्लाइंट बिल्ट-इन रिन्यू APIs के माध्यम से लीज़ का नवीनीकरण करने में सक्षम हैं।
-
रद्दीकरण: Vault में गुप्त जानकारी रद्द करने के लिए अंतर्निहित समर्थन है। Vault न केवल एकल गुप्त जानकारी, बल्कि गुप्त जानकारियों का एक पेड़ रद्द कर सकता है, उदाहरण के लिए, किसी विशिष्ट उपयोगकर्ता द्वारा पढ़ी गई सभी गुप्त जानकारियाँ, या किसी विशेष प्रकार की सभी गुप्त जानकारियाँ। रद्दीकरण कुंजी रोलिंग के साथ-साथ घुसपैठ की स्थिति में सिस्टम को लॉक डाउन करने में सहायता करता है।
दस्तावेज़ीकरण, प्रारंभ करना और प्रमाणन परीक्षाएँ
दस्तावेज़ीकरण Vault वेबसाइट पर उपलब्ध है।
यदि आप Vault में नए हैं और सुरक्षा ऑटोमेशन से शुरुआत करना चाहते हैं, तो कृपया HashiCorp के लर्निंग प्लेटफ़ॉर्म पर हमारे प्रारंभ करने की मार्गदर्शिकाएँ देखें। आपकी सीखने की यात्रा को जारी रखने के लिए अतिरिक्त मार्गदर्शिकाएँ भी हैं।
अपने एप्लिकेशन के अंदर से विभिन्न प्रोग्रामिंग भाषाओं में Vault के साथ बातचीत करने के उदाहरणों के लिए, vault-examples रिपॉजिटरी देखें। एक आउट-ऑफ़-द-बॉक्स नमूना एप्लिकेशन भी उपलब्ध है।
प्रमाणन परीक्षा उत्तीर्ण करके अपने Vault ज्ञान का प्रदर्शन करें। परीक्षाओं के बारे में जानकारी के लिए प्रमाणन पृष्ठ पर जाएँ और HashiCorp के लर्निंग प्लेटफ़ॉर्म पर अध्ययन सामग्री खोजें।
Vault विकसित करना
यदि आप Vault या इसके किसी भी अंतर्निहित सिस्टम पर काम करना चाहते हैं, तो आपको पहले अपनी मशीन पर Go स्थापित करना होगा।
स्थानीय डेव के लिए पहले सुनिश्चित करें कि Go सही ढंग से स्थापित है, जिसमें GOPATH सेट अप करना शामिल है, फिर GOBIN वेरिएबल को $GOPATH/bin पर सेट करें। सुनिश्चित करें कि $GOPATH/bin आपके पथ में है क्योंकि कुछ वितरण बिल्ड टूल्स के पुराने संस्करण को बंडल करते हैं।
इसके बाद, इस रिपॉजिटरी को क्लोन करें। Vault Go Modules का उपयोग करता है, इसलिए यह अनुशंसा की जाती है कि आप रिपॉजिटरी को GOPATH के बाहर क्लोन करें। फिर आप अपने वातावरण को बूटस्ट्रैप करके किसी भी आवश्यक बिल्ड टूल को डाउनलोड कर सकते हैं:
$ make bootstrap
...
Vault का एक डेवलपमेंट संस्करण संकलित करने के लिए, make या make dev चलाएँ। यह Vault बाइनरी को bin और $GOPATH/bin फ़ोल्डरों में रखेगा:
$ make dev
...
$ bin/vault
...
UI के साथ Vault का डेवलपमेंट संस्करण संकलित करने के लिए, make static-dist dev-ui चलाएँ। यह Vault बाइनरी को bin और $GOPATH/bin फ़ोल्डरों में रखेगा:
$ make static-dist dev-ui
...
$ bin/vault
...
परीक्षण चलाने के लिए, make test टाइप करें। ध्यान दें: इसके लिए Docker स्थापित होना आवश्यक है। यदि यह एग्ज़िट स्थिति 0 के साथ बाहर निकलता है, तो सब कुछ काम कर रहा है!
$ make test
...
यदि आप किसी विशिष्ट पैकेज का विकास कर रहे हैं, तो आप TEST वेरिएबल निर्दिष्ट करके केवल उस पैकेज के परीक्षण चला सकते हैं। उदाहरण के लिए नीचे, केवल vault पैकेज के परीक्षण चलाए जाएँगे।
$ make test TEST=./vault
...
समस्या निवारण
यदि आपको could not read Username for 'https://github.com' जैसी कोई त्रुटि मिलती है, तो आपको अपने git कॉन्फ़िगरेशन को इस प्रकार समायोजित करने की आवश्यकता हो सकती है:
$ git config --global --add url."[email protected]:".insteadOf "https://github.com/"
Vault आयात करना
यह रिपॉजिटरी दो लाइब्रेरी प्रकाशित करता है जिन्हें अन्य प्रोजेक्ट द्वारा आयात किया जा सकता है: github.com/hashicorp/vault/api और github.com/hashicorp/vault/sdk।
ध्यान दें कि इस रिपॉजिटरी में Vault (उत्पाद) भी शामिल है, और अधिकांश Go प्रोजेक्ट्स की तरह, Vault अपनी निर्भरताओं को प्रबंधित करने के लिए Go modules का उपयोग करता है। ऐसा करने का तंत्र go.mod फ़ाइल है। ऐसा होता है कि उस फ़ाइल की उपस्थिति सैद्धांतिक रूप से Vault को अन्य प्रोजेक्ट्स में निर्भरता के रूप में आयात करना संभव बनाती है। कुछ अन्य प्रोजेक्ट्स ने Vault के परीक्षण के लिए विकसित परीक्षण उपकरणों का लाभ उठाने के लिए ऐसा करने की प्रथा बनाई है। यह Vault प्रोजेक्ट का उपयोग करने का समर्थित तरीका नहीं है, और कभी रहा ही नहीं है। हम आपके प्रोजेक्ट में github.com/hashicorp/vault आयात करने में विफलता से संबंधित बगों को ठीक करने की संभावना नहीं रखते हैं।
नीचे "Docker-आधारित परीक्षण" अनुभाग भी देखें।
स्वीकृति परीक्षण
Vault में गुप्त और प्रमाणीकरण विधियों की अधिकांश विशेषताओं को कवर करने वाले व्यापक स्वीकृति परीक्षण हैं।
यदि आप किसी गुप्त या प्रमाणीकरण विधि की किसी सुविधा पर काम कर रहे हैं और यह सत्यापित करना चाहते हैं कि यह कार्य कर रही है (और कुछ और भी नहीं तोड़ा है), तो हम स्वीकृति परीक्षण चलाने की सलाह देते हैं।
चेतावनी: स्वीकृति परीक्षण वास्तविक संसाधन बनाते/नष्ट करते/संशोधित करते हैं, जो कुछ मामलों में वास्तविक लागतें उत्पन्न कर सकते हैं। बग की उपस्थिति में, यह तकनीकी रूप से संभव है कि टूटे हुए बैकएंड पीछे डैंगलिंग डेटा छोड़ सकते हैं। इसलिए, कृपया स्वीकृति परीक्षण अपने जोखिम पर चलाएँ। कम से कम, हम अनुशंसा करते हैं कि आप जिस भी बैकएंड का परीक्षण कर रहे हैं, उसके लिए उन्हें अपने निजी खाते में चलाएँ।
स्वीकृति परीक्षण चलाने के लिए, make testacc लागू करें:
$ make testacc TEST=./builtin/logical/consul
...
TEST वेरिएबल आवश्यक है, और आपको वह फ़ोल्डर निर्दिष्ट करना चाहिए जहाँ बैकएंड है। TESTARGS वेरिएबल को किसी विशिष्ट संसाधन को परीक्षण के लिए फ़िल्टर करने की अनुशंसा की जाती है, क्योंकि एक साथ सभी का परीक्षण करने में कभी-कभी बहुत लंबा समय लग सकता है।
स्वीकृति परीक्षणों को आमतौर पर एक्सेस कुंजी जैसी चीजों के लिए अन्य पर्यावरण चर सेट करने की आवश्यकता होती है। परीक्षण स्वयं जल्दी त्रुटि देना चाहिए और आपको बताना चाहिए कि क्या सेट करना है, इसलिए यहाँ इसका दस्तावेज़ीकरण नहीं किया गया है।
Vault Enterprise सुविधाओं के बारे में अधिक जानकारी के लिए, Vault Enterprise साइट पर जाएँ।
Docker-आधारित परीक्षण
हमने NewTestCluster से प्रेरित एक प्रायोगिक नया परीक्षण तंत्र बनाया है। इसका उपयोग करने का एक उदाहरण:
import (
"testing"
"github.com/hashicorp/vault/sdk/helper/testcluster/docker"
)
func Test_Something_With_Docker(t *testing.T) {
opts := &docker.DockerClusterOptions{
ImageRepo: "hashicorp/vault", // or "hashicorp/vault-enterprise"
ImageTag: "latest",
}
cluster := docker.NewTestDockerCluster(t, opts)
client := cluster.Nodes()[0].APIClient()
_, err := client.Logical().Read("sys/storage/raft/configuration")
if err != nil {
t.Fatal(err)
}
}
या Enterprise के लिए:
import (
"testing"
"github.com/hashicorp/vault/sdk/helper/testcluster/docker"
)
func Test_Something_With_Docker(t *testing.T) {
opts := &docker.DockerClusterOptions{
ImageRepo: "hashicorp/vault-enterprise",
ImageTag: "latest",
VaultLicense: licenseString, // not a path, the actual license bytes
}
cluster := docker.NewTestDockerCluster(t, opts)
}
यहाँ एक अधिक यथार्थवादी उदाहरण है कि हम व्यवहार में इसका उपयोग कैसे करते हैं। DefaultOptions repo और tag के रूप में hashicorp/vault:latest का उपयोग करता है, लेकिन यह VAULT_BINARY पर्यावरण चर को भी देखता है। यदि यह भरा हुआ है, तो यह VAULT_BINARY द्वारा संदर्भित स्थानीय फ़ाइल को कंटेनर में कॉपी करेगा। स्थानीय परिवर्तनों का परीक्षण करते समय यह उपयोगी है।
VaultLicense विकल्प सेट करने के बजाय, आप VAULT_LICENSE_CI पर्यावरण चर सेट कर सकते हैं, जो लाइसेंस को संस्करण नियंत्रण में कमिट करने से बेहतर है।
वैकल्पिक रूप से आप COMMIT_SHA सेट कर सकते हैं, जो डिबगिंग सुविधा के रूप में हमारे द्वारा बनाए गए इमेज नाम में जोड़ दिया जाएगा।
func Test_Custom_Build_With_Docker(t *testing.T) {
opts := docker.DefaultOptions(t)
cluster := docker.NewTestDockerCluster(t, opts)
}
github.com/hashicorp/vault/sdk/helper/testcluster पैकेज में विभिन्न प्रकार के सहायक हैं, जैसे कि नीचे दिए गए ये परीक्षण क्रमशः PR या DR प्रतिकृति का उपयोग करके 3-नोड क्लस्टर की एक जोड़ी बनाएंगे और उन्हें लिंक करेंगे, और यदि पारित किए गए संदर्भ की समय सीमा समाप्त होने से पहले प्रतिकृति स्थिति स्वस्थ नहीं होती है तो विफल हो जाएंगे।
फिर से, जैसा लिखा गया है, ये स्थानीय रूप से Vault Enterprise बाइनरी होने और VAULT_BINARY एनवी वेरिएबल को उसकी ओर इंगित करने के लिए सेट होने के साथ-साथ VAULT_LICENSE_CI सेट होने पर निर्भर करते हैं।
func TestStandardPerfReplication_Docker(t *testing.T) {
opts := docker.DefaultOptions(t)
r, err := docker.NewReplicationSetDocker(t, opts)
if err != nil {
t.Fatal(err)
}
defer r.Cleanup()
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
err = r.StandardPerfReplication(ctx)
if err != nil {
t.Fatal(err)
}
}
func TestStandardDRReplication_Docker(t *testing.T) {
opts := docker.DefaultOptions(t)
r, err := docker.NewReplicationSetDocker(t, opts)
if err != nil {
t.Fatal(err)
}
defer r.Cleanup()
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
err = r.StandardDRReplication(ctx)
if err != nil {
t.Fatal(err)
}
}
अंत में, यहाँ एक कस्टम बाइनरी के साथ मौजूदा OSS डॉकर परीक्षण चलाने का एक उदाहरण है:
$ GOOS=linux make dev
$ VAULT_BINARY=$(pwd)/bin/vault go test -run 'TestRaft_Configuration_Docker' ./vault/external_tests/raft/raft_binary
ok github.com/hashicorp/vault/vault/external_tests/raft/raft_binary 20.960s