光盘 机密_使用保险柜管理机密
光盤 機(jī)密
您如何存儲秘密?
密碼,API密鑰,安全令牌和機(jī)密數(shù)據(jù)屬于秘密類別。 那是不應(yīng)該存在的數(shù)據(jù)。 在容易猜測的位置,不得以純文本格式提供。 實(shí)際上,不得在任何位置以明文形式存儲它。
可以使用Spring Cloud Config Server或TomEE對敏感數(shù)據(jù)進(jìn)行加密。 加密數(shù)據(jù)比未加密數(shù)據(jù)好了一步。 加密在另一側(cè)強(qiáng)加了對用戶側(cè)解密的需求,這需要分發(fā)解密密鑰。 現(xiàn)在,您將鑰匙放在哪里? 密鑰受密碼保護(hù)嗎? 您將密碼短語放在哪里? 您在多少系統(tǒng)上分發(fā)密鑰和密碼?
如您所見,加密引入了雞蛋問題。 存儲解密密鑰使應(yīng)用程序可以解密數(shù)據(jù)。 它還允許攻擊媒介。 未經(jīng)授權(quán)的人可以通過訪問機(jī)器來訪問解密密鑰。 該人可以解密可通過此密鑰解密的數(shù)據(jù)。 該密鑰是靜態(tài)的,因此泄漏的密鑰需要更改密鑰。 數(shù)據(jù)需要重新加密,憑據(jù)需要更改。 在線測量不可能發(fā)現(xiàn)這種泄漏,因?yàn)橐坏┇@得數(shù)據(jù)就可以離線解密。
一種方法是在應(yīng)用程序啟動之前將密鑰放在難以猜測的位置,并在將密鑰讀取到內(nèi)存后擦除密鑰。 按鍵可用的時間縮短了。 縮短了攻擊時間范圍,但關(guān)鍵仍然在那里。 擦除密鑰僅對一個應(yīng)用程序啟動有效。 眾所周知,云中的容器和微服務(wù)一旦崩潰,便會重新啟動。 由于密鑰已丟失,因此不再可能重新啟動應(yīng)用程序。
等等,有希望!
正確地進(jìn)行加密非常困難,而如果自己進(jìn)行加密,則管理秘密就更加困難。 保險柜正好解決了這些問題。 它有助于解決雞蛋問題,并且?guī)в屑用芄δ堋?保管箱是管理機(jī)密的服務(wù)。 它提供了一個API,可基于策略訪問機(jī)密。 API的任何用戶都需要進(jìn)行身份驗(yàn)證,并且只能看到其被授權(quán)的機(jī)密。 保管箱使用帶有GCM的 256位AES加密數(shù)據(jù)。 它可以將數(shù)據(jù)存儲在各種后端(文件,Amazon DynamoDB,Consul等)中。 另一個關(guān)鍵方面是,保管箱從不將密鑰存儲在持久位置中。 啟動/重新啟動保管庫始終需要一個或多個操作員才能解封保管庫。 但是,讓我們先從基礎(chǔ)開始。
保險柜并不是所有安全問題的答案。 值得檢查Vault安全模型文檔以了解威脅模型。
要引導(dǎo)Vault,您需要從https://www.vaultproject.io/downloads.html下載二進(jìn)制文件。 Vault用Go編寫,二進(jìn)制文件可用于各種平臺。 解壓縮下載的文件,即可開始使用Vault。
接下來啟動Vault服務(wù)器。 您需要一個配置文件來指定一些選項。
vault.conf
backend "inmem" { }listener "tcp" {address = "0.0.0.0:8200"tls_disable = 1 }disable_mlock = true此配置適用于大多數(shù)平臺,可以嘗試使用Vault的第一步。 不要在生產(chǎn)中使用它。
通過啟動Vault
$ vault server -config vault.conf保管箱將作為前臺進(jìn)程啟動。
恭喜,您已啟動保險柜。
現(xiàn)在是打開第二個控制臺以使用Vault執(zhí)行管理任務(wù)的好時機(jī)。 Vault現(xiàn)在以純文本模式運(yùn)行,因?yàn)橐呀肨LS / SSL。 您需要設(shè)置VAULT_ADDR環(huán)境變量,以告知Vault客戶端使用純文本:
$ export VAULT_ADDR=http://127.0.0.1:8200保管箱已啟動。 在實(shí)際開始使用保管庫之前,它需要兩個額外的步驟。 保管箱需要初始化和啟封。 初始化是初始密鑰生成的過程。 啟封正在為Vault提供密鑰,因此Vault可以解密加密的數(shù)據(jù)并開始為客戶端提供服務(wù)。
保管箱在初始化時會創(chuàng)建兩件事:
保險柜允許使用Shamir Secret Sharing算法共享密鑰。 數(shù)據(jù)通常用一個密鑰加密。 有權(quán)訪問密鑰的人作為一個人就可以完全控制所有數(shù)據(jù)。 有時你不想要那個。 通常,您希望在多個人之間分配主密鑰,因此,沒有一個人可以控制所有加密數(shù)據(jù)。 保管箱允許指定總數(shù)的密鑰共享和初始化期間解封Vault所需的密鑰共享數(shù)。 保險柜初始化后,便無法更改該設(shè)置。 從控制臺初始化保管庫將顯示完整密鑰。 您可能希望通過DevOps工具采用API進(jìn)行初始化,例如,向應(yīng)該接收密鑰共享的操作員發(fā)送安全消息。
使用以下方法初始化保管箱:
$ vault init -key-shares=5 -key-threshold=2保管箱將顯示密鑰共享和根密鑰。 請注意,這些值是隨機(jī)的,并且在每次初始化時都會更改。 請小心該輸出,因?yàn)槟粫吹揭淮巍?之后沒有辦法檢索密鑰和令牌。 在將保管箱用于真實(shí)數(shù)據(jù)時,請仔細(xì)閱讀說明,否則會丟失數(shù)據(jù)。
Key 1: 99eb89735688ad7a29bb1ff27383bd1005a22a62c97f14357ea4f5f98c1d2c8c01 Key 2: 0c5605b16905794a302603bbeb8f6c8ad5ecf7e877f0e29084f838eba931b86902 Key 3: 7f3d88067c7e355acea4fe756a8b23fc6cd6bc671d7cb0f3d2cc8ae543dc3dc303 Key 4: 3d37062e1704ca2a02073b29c097d5a56e7056e710f515c16b40b9cfe3698bb804 Key 5: 4e5c8b99027f863afc85c6e741939ad3d74a1d687a7947a23d740bc109840e1205 Initial Root Token: 9a63de21-8af7-311a-9a5a-151b6a0d4795Vault initialized with 5 keys and a key threshold of 2. Please securely distribute the above keys. When the Vault is re-sealed, restarted, or stopped, you must provide at least 2 of these keys to unseal it again.Vault does not store the master key. Without at least 2 keys, your Vault will remain permanently sealed.然后,您需要打開Vault的密封。 保管箱不會將密鑰存儲在磁盤上。 它一直存儲在內(nèi)存中。 初始化并在(重新)啟動Vault之后,您需要使用所需數(shù)量的密鑰共享來打開Vault的密封,以便Vault可以提供機(jī)密信息。 在這種情況下,這是兩個關(guān)鍵部分。 注意:還有一個Seal命令可使Vault停止提供機(jī)密信息。
$ vault unseal 99eb89735688ad7a29bb1ff27383bd1005a22a62c97f14357ea4f5f98c1d2c8c01 Sealed: true Key Shares: 5 Key Threshold: 2 Unseal Progress: 1$ vault unseal 7f3d88067c7e355acea4fe756a8b23fc6cd6bc671d7cb0f3d2cc8ae543dc3dc303 Sealed: false Key Shares: 5 Key Threshold: 2 Unseal Progress: 0保險柜開封后,您可以開始在保險柜內(nèi)存儲秘密數(shù)據(jù)。
保險柜需要經(jīng)過身份驗(yàn)證的訪問權(quán)限才能從此處繼續(xù)。 保險柜將令牌用作其傳輸級別的常規(guī)身份驗(yàn)證。
還記得初始化的輸出嗎? 密鑰共享之后的最后一項是根令牌。 目前最簡單的方法是使用根令牌。 在控制臺上使用令牌的最簡單方法是將其存儲在環(huán)境變量中:
$ export VAULT_TOKEN=9a63de21-8af7-311a-9a5a-151b6a0d4795 $ vault write secret/my-application password=H@rdT0Gu3ss通用秘密后端允許將任意值存儲為鍵值存儲。 單個上下文可以存儲一個或多個鍵值元組。 上下文可以按層次進(jìn)行組織,并且使用的數(shù)據(jù)格式為JSON。
Vault提供除一般的秘密后臺其它后端,使證書產(chǎn)生MySQL,SQL服務(wù)器和PostgreSQL,領(lǐng)事和更多 。
認(rèn)證方式
保管箱主要使用令牌。 每個令牌都分配給可能限制操作和路徑的策略。 策略使用基于路徑的匹配來應(yīng)用規(guī)則。 令牌可以獲取元數(shù)據(jù)(鍵值)并顯示分配的名稱,這使管理對操作更加友好。
您可以手動創(chuàng)建令牌,并將其分配給應(yīng)用程序和用戶。 除此之外,還有兩種身份驗(yàn)證機(jī)制 (LDAP,用戶名/密碼,GitHub令牌……),允許用戶登錄并獲取令牌。 令牌和身份驗(yàn)證機(jī)制可以撤銷,這使得鎖定特定用戶變得容易。
Spring Cloud Vault
我們在Pivotal考察了Vault,并認(rèn)為它是一種很有前途的工具。 這就是我們構(gòu)建Spring Cloud Vault的原因。 Spring Cloud Vault是類似于Spring Cloud Config的配置擴(kuò)展。 Spring Cloud Config的目標(biāo)是外部配置管理,該管理由存儲在各種存儲庫(例如GitHub,SVN甚至Vault)中的數(shù)據(jù)支持。
借助Spring Cloud Vault,您可以訪問Vault中的秘密。 在啟動應(yīng)用程序時會獲取機(jī)密。 Spring Cloud Vault使用應(yīng)用程序中的數(shù)據(jù)(應(yīng)用程序名稱,活動上下文)來確定存儲機(jī)密的上下文路徑。
/secret/{application}/{profile} /secret/{application} /secret/{defaultContext}/{profile} /secret/{defaultContext}Spring Cloud Vault入門
首先,您需要一個Spring Boot項目。 start.spring.io是一個很好的起點(diǎn)。 任何空項目都足夠。
在您的項目中包含Spring Cloud Vault入門
將以下代碼添加到您的構(gòu)建配置文件中。 這些行包括具有所有必需依賴項的Spring Cloud Vault入門程序。
Maven
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-vault-starter-config</artifactId><version>1.0.0.BUILD-SNAPSHOT</version> </dependency><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/libs-snapshot</url><snapshots><enabled>true</enabled></snapshots></repository> </repositories>Gradle
repositories {maven {url 'https://repo.spring.io/libs-snapshot'} }dependencies {compile("org.springframework.cloud:spring-cloud-vault-starter-config:1.0.0.BUILD-SNAPSHOT") }使用SNAPSHOT依賴項時,請確保包括Snapshots存儲庫。
設(shè)置配置
Spring Cloud Vault默認(rèn)使用application作為默認(rèn)上下文,并使用spring.application.name的值作為應(yīng)用程序上下文。 所有配置都需要在引導(dǎo)程序配置中指定。 對于此示例,我們在src/main/resources使用bootstrap.yml :
spring:application.name: my-applicationcloud.vault:token: 9a63de21-8af7-311a-9a5a-151b6a0d4795scheme: httpspring.cloud.vault.scheme設(shè)置為http因?yàn)槲覀円呀?jīng)以純文本HTTP模式啟動了Vault。 不要為生產(chǎn)而這樣做。 純文本使整個秘密故事變得毫無用處,因?yàn)榫W(wǎng)絡(luò)上的所有聽眾都可以看到您的秘密。 spring.cloud.vault.scheme默認(rèn)為https 。
請注意,此處的令牌取自根令牌。 您可以使用以下方法創(chuàng)建新令牌:
$ vault token-create Key Value --- ----- token 728d26ae-53a6-d8b6-d7a0-c5f62238ea55 token_accessor 2fd7dcba-39d0-04d3-8d6b-096c3529cf14 token_duration 0 token_renewable true token_policies [root]將數(shù)據(jù)寫入保險柜
將一些數(shù)據(jù)寫入保險柜:
$ vault write secret/my-application password=H@rdT0Gu3ss更新您的Spring Boot應(yīng)用程序
現(xiàn)在轉(zhuǎn)到您的應(yīng)用程序啟動器類,并增強(qiáng)它以注入秘密。 使用與將其寫入保險柜時相同的屬性名稱:
package example;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class SpringBootVaultHelloWorldApplication {public static void main(String[] args) {SpringApplication.run(SpringBootVaultHelloWorldApplication.class, args);}@Value("${password}")String password;@PostConstructprivate void postConstruct() {System.out.println("My password is: " + password);} }其他所有事情都由Spring Cloud Vault本身處理。 現(xiàn)在運(yùn)行您的應(yīng)用程序。
恭喜,您成功了!
外表
Spring Cloud Vault現(xiàn)在位于Cloud Incubator中。 它支持令牌和AppId身份驗(yàn)證。 Spring Cloud Vault帶有用于各種數(shù)據(jù)庫集成和RabbitMQ / Consul支持的啟動程序和依賴項。 您可以在ttps://github.com/spring-cloud-incubator/spring-cloud-vault-config上簽出項目和文檔 。
我們準(zhǔn)備了一些示例,以給您印象,如何將Spring Cloud Vault與應(yīng)用程序集成。 您可以在https://github.com/mp911de/spring-cloud-vault-config-samples上找到示例。
翻譯自: https://www.javacodegeeks.com/2016/07/managing-secrets-vault.html
光盤 機(jī)密
總結(jié)
以上是生活随笔為你收集整理的光盘 机密_使用保险柜管理机密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 除了003福建舰,世界上还有哪些在建或即
- 下一篇: 写文章时如何做到主题明确写文章时如何做到