确保Vault Secrets管理的REST调用安全

时间:2018-09-19 20:13:07

标签: rest ssh tls1.2 hashicorp-vault

曾经尝试弄清楚如何做到这一点。本质上,Vault的REST调用没有安全选项。我想让这些其余调用尽可能在点a和b之间进行加密。我的想法是:

  • 使用SSH隧道
  • 使用像Stunnel这样的TLS隧道

我目前在Docker容器中有保管箱,所以还要提一下。有没有人遇到过这种情况,您如何处理?

更新:因此,使用Python API(HVAC),出现以下错误:

set.seed(1)
ID<-c(rep("a",36),rep("b",60));Val<-round(rnorm(96,15,4),digits=0)
df<-as.data.frame(cbind(ID,Val))
df$Val<-as.numeric(df$Val)
Yearly<-NULL
df$Yearly<-0
library("zoo")
for(i in unique(df$ID)){
  Yearly<-rep(rollapply(df[which(df$ID==i),]$Val, 12, sum, by = 12), 
          rep(12,nrow(df[which(df$ID==i),])%/%12))
  df[which(df$ID==i),]$Yearly<-Yearly
}
library("dplyr")
df<-df %>%
group_by(ID) %>% 
mutate(TotalSum= sum(Val),cumulativeSum=cumsum(Val),dif=TotalSum-lag   (cumulativeSum))
# View(df)
df$dif_withReplacedNAs<-df$dif
df[which(is.na(df$dif)),]$dif_withReplacedNAs <- df[which(is.na(df$dif)),]$TotalSum
head(df,16)
# ID      Val Yearly TotalSum cumulativeSum   dif dif_withReplacedNAs
# <fct> <dbl>  <dbl>    <dbl>         <dbl> <dbl>               <dbl>
#1 a        3.    85.     300.            3.   NA                 300.
#2 a        7.    85.     300.           10.  297.                297.
#3 a        3.    85.     300.           13.  290.                290.
#4 a       12.    85.     300.           25.  287.                287.
#5 a        7.    85.     300.           32.  275.                275.
#6 a        3.    85.     300.           35.  268.                268.
#7 a        8.    85.     300.           43.  265.                265.
#8 a        9.    85.     300.           52.  257.                257.
#9 a        8.    85.     300.           60.  248.                248.
#10 a        5.    85.     300.           65.  240.                240.
#11 a       12.    85.     300.           77.  235.                235.
#12 a        8.    85.     300.           85.  223.                223.
#13 a        4.   111.     300.           89.  215.                215.
#14 a       16.   111.     300.          105.  211.                211.
#15 a       10.   111.     300.          115.  195.                195.
#16 a        6.   111.     300.          121.  185.                185.

使用以下命令:

requests.exceptions.SSLError: HTTPSConnectionPool(host='0.0.0.0',
port=8200): Max retries exceeded with url: /v1/secret (Caused by
SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_record',
'wrong version number')],)",),))

3 个答案:

答案 0 :(得分:2)

保险柜有TLS enabled by default,因此您的所有REST调用均已加密。如果您在使用https时遇到麻烦,请查看select format(2.00,2)+0, format(1.5,2)+0, format(1.55,2)+0 2, 1.5, 1.55 环境变量的文档。

来自Vault的文档。

  

VAULT_CACERT

     

本地磁盘上PEM编码的CA证书文件的路径。这个文件   用于验证Vault服务器的SSL证书。这个环境   变量优先于VAULT_CAPATH。

     

VAULT_CAPATH到PEM编码的CA证书文件目录的路径   在本地磁盘上。这些证书用于验证保险柜   服务器的SSL证书。

您可以使用VAULT_CACERTVAULT_CAPATH之类的工具来确保您的请求确实已加密。

答案 1 :(得分:0)

要详细说明在容器中运行的Vault,您需要为Vault创建一个配置文件,其中包含与此类似的内容(Chef / Ruby代码):

config_content = %(
  "storage": {
     ...
  },
  "default_lease_ttl": "768h",
  "max_lease_ttl": "8766h",
  "listener": [
    {"tcp": {
      "address": "0.0.0.0:8200",
      "tls_disable": 0,
      "tls_cert_file": "/vault/certs/my-cert-combined.pem",
      "tls_key_file": "/vault/certs/my-cert.key"
    }}],
  "log_level": "info"
 )

尤其是侦听器部分。使您的后端存储成为您想使用的任何存储(不是Dev默认的内存!)。

请注意,您还需要在绑定到容器的卷中获得有效的证书及其私钥。

将此配置文件存储在目录中,该目录在容器内绑定到路径/ vault / config。我在主机上使用/ var / vault / config。例如(更多Ruby / Chef):

docker_container 'vault' do
  container_name 'vault'
  tag 'latest'
  port '8200:8200'
  cap_add ['IPC_LOCK']
  restart_policy 'always'
  volumes ['/var/vault:/vault']
  command 'vault server -config /vault/config'
  action :run_if_missing
end

该命令告诉Vault在/ vault / config中查找,并且应该在其中找到带有.json扩展名的配置文件。请注意,将配置文件侦听器-> tcp->地址设置为0.0.0.0,而不是127.0.0.1,这一点很重要,因为Vault无法正确解析外部访问。

然后,保管箱将对所有事务使用TLS加密启动。定义VAULT_ADDR以使https://your-host.com:8200消失。

答案 2 :(得分:0)

就我而言,我一直在本地环境中对其进行测试。因此,我没有调用安全的 https:https://localhost:8200,而是调用了常规的 http:http://localhost:8200。 这解决了错误。