Terraform计划打印敏感信息

时间:2019-12-17 19:33:24

标签: terraform terraform-provider-azure

执行terraform plan时,如果状态中存在azurerm_kubernetes_cluster(Azure)资源,terraform将打印来自kube_config的一些敏感信息。

示例打印输出:(所有...值都会被打印)

kube_config = [
                {
                    client_certificate = (...)
                    client_key = (...)
                    cluster_ca_certificate = (...)
                    host = (...)
                    password = (...)
               }

我不确定这些值中的哪个是敏感的,但是password可能是...正确吗?

另一方面,terraform似乎对哪些值敏感是 的知识,因为它确实以这种方式打印client_secret

service_principal {
            client_id     = "(...)"
            client_secret = (sensitive value)
        }

所以,我的问题是:

  1. 这些值真的敏感吗?
  2. 如果是这样,是否有一种方法可以指示地形掩盖计划中的这些值?

我们使用的版本:

provider "azurerm" {
  version = "~>1.37.0"
}

这是有问题的,原因是我们在Github PR评论中提出了计划。

谢谢

2 个答案:

答案 0 :(得分:0)

  

那些值真的敏感吗?

是的,有敏感数据。实际上,它们是您用来控制AKS集群所需的配置。这是AKS凭证。我认为有必要输出这些数据,只是假设您只有Terraform并使用它来创建AKS集群,如果Terraform不输出凭据,则您将无法控制AKS集群。

  

如果是这样,是否有一种方法可以指示Terraform掩盖   计划?

根据上面的解释,您应该不会对Terraform状态文件中的敏感数据犯错。您需要关心的是如何保护状态文件。我建议您将Terraform状态文件存储在Azure存储中,然后可以对其进行加密。请遵循Store Terraform state in Azure Storage中的步骤。

答案 1 :(得分:0)

Terraform 现在能够将变量设置为敏感,并将输出设置为敏感。

变量示例:

variable "user_information" {
  type = object({
    name = string
    address = string
  })
  sensitive = true
}

输出示例:

output "db_password" {
  value       = aws_db_instance.db.password
  description = "The password for logging in to the database."
  sensitive   = true
}

但是,自 2021 年 7 月 1 日起,对于并非源自敏感输入的内容,将无法隐藏计划输出。

参考文献:

https://www.hashicorp.com/blog/terraform-0-14-adds-the-ability-to-redact-sensitive-values-in-console-output

https://www.terraform.io/docs/language/values/outputs.html