问题描述
在使用Terraform时遇到了一个问题:他想要通过Azure Key Vault数据资源创建一个包含TLS证书和私钥的Kubernetes密钥对。他已经尝试过一些方法,但都遇到了问题。他希望能找到一种解决方案,能够实现TLS加密流量,同时又不必将私钥明文存储在代码库中,也不影响Terraform的计划和应用步骤。
解决方案
请注意以下操作可能会涉及到版本差异,以及需要保障安全性和最佳实践。
方案1:使用Azure CLI设置Key Vault秘密
一种解决方法是使用Azure CLI来设置Key Vault中的秘密,然后在Terraform中引用这些秘密。以下是步骤:
使用Azure CLI将私钥和证书上传到Key Vault中:
bash
az keyvault secret set --vault-name <vault name> --name my-private-key --file <path to key file>
az keyvault secret set --vault-name <vault name> --name my-certificate --file <path to cert file>在Terraform代码中引用Key Vault数据资源和Kubernetes密钥对:
“`terraform
data “azurerm_key_vault_secret” “my_private_key” {
name = “my-private-key”
key_vault_id = data.azurerm_key_vault.mykv.id
}
data “azurerm_key_vault_secret” “my_certificate” {
name = “my-certificate”
key_vault_id = data.azurerm_key_vault.mykv.id
}
resource “kubernetes_secret” “my_tls_secret” {
metadata {
name = “my-tls-secret”
}
type = “kubernetes.io/tls”
data = {
“tls.crt” = data.azurerm_key_vault_secret.my_certificate.value
“tls.key” = data.azurerm_key_vault_secret.my_private_key.value
}
}
``
azurerm_key_vault_secret`数据源来引用这些秘密,并将它们作为Kubernetes密钥对的数据。
在这个方案中,我们使用Azure CLI将私钥和证书存储为Key Vault的秘密。然后,在Terraform中,我们使用
方案2:将文件存储在容器中并使用脚本
如果你不想将私钥和证书明文存储在Azure Key Vault中,你可以考虑将它们存储在安全的存储容器中,并使用脚本来管理Terraform部署过程。以下是一种可能的方法:
将证书和私钥文件存储在安全的存储容器中。
编写一个脚本来执行Terraform部署步骤:
“`bash
#!/bin/bash
# 从存储容器中获取证书和私钥
wget -O certfile.cer
wget -O keyfile.key
# 执行Terraform步骤
terraform init
terraform apply
“`
在这个方案中,你可以确保私钥和证书的安全性,同时通过脚本来控制Terraform的部署步骤。你需要将<certfile_url>
和<keyfile_url>
替换为存储容器中相应文件的URL。
总结
通过使用Azure Key Vault数据资源以及一些额外的步骤,你可以在Terraform中实现使用TLS证书和私钥的Kubernetes密钥对,同时保障了安全性和最佳实践。根据你的需求和安全性要求,你可以选择方案1或方案2中的一种来解决这个问题。