在Terraform中使用Azure Key Vault数据资源创建TLS Kubernetes密钥对

32次阅读
没有评论

问题描述

在使用Terraform时遇到了一个问题:他想要通过Azure Key Vault数据资源创建一个包含TLS证书和私钥的Kubernetes密钥对。他已经尝试过一些方法,但都遇到了问题。他希望能找到一种解决方案,能够实现TLS加密流量,同时又不必将私钥明文存储在代码库中,也不影响Terraform的计划和应用步骤。

解决方案

请注意以下操作可能会涉及到版本差异,以及需要保障安全性和最佳实践。

方案1:使用Azure CLI设置Key Vault秘密

一种解决方法是使用Azure CLI来设置Key Vault中的秘密,然后在Terraform中引用这些秘密。以下是步骤:

  1. 使用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>

  2. 在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
}
}
``
在这个方案中,我们使用Azure CLI将私钥和证书存储为Key Vault的秘密。然后,在Terraform中,我们使用
azurerm_key_vault_secret`数据源来引用这些秘密,并将它们作为Kubernetes密钥对的数据。

方案2:将文件存储在容器中并使用脚本

如果你不想将私钥和证书明文存储在Azure Key Vault中,你可以考虑将它们存储在安全的存储容器中,并使用脚本来管理Terraform部署过程。以下是一种可能的方法:

  1. 将证书和私钥文件存储在安全的存储容器中。

  2. 编写一个脚本来执行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中的一种来解决这个问题。

正文完