【问题标题】:How to hide the values in terraform plan/apply?如何隐藏 terraform 计划/应用中的值?
【发布时间】:2021-10-22 08:03:10
【问题描述】:

我正在使用 aws_ssm_parameter 创建一个新模块,但是当我运行 terraform 计划时,它会返回添加的值而不是参数名称。

terraform plan 后的输出:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.parameter.aws_ssm_parameter.parameter["Variable-Sensitive-1=12345,Sensitive-Variable-2=67890"] will be created
  + resource "aws_ssm_parameter" "default" {
      + arn       = (known after apply)
      + data_type = (known after apply)
      + id        = (known after apply)
      + key_id    = (known after apply)
      + name      = "/dev/parameter-development/test"
      + overwrite = true
      + tags      = {
      +      env = "Development"
        }
      + tier      = "Standard"
      + type      = "SecureString"
      + value     = (sensitive value)
      + version   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

模块配置:

main.tf

locals {
  parameter = { for e in var.parameter : e.value => merge(var.parameter_defaults, e) }
}

resource "aws_ssm_parameter" "default" {
  for_each = local.parameter

  name     = each.value.name

  description     = each.value.description
  type            = each.value.type
  tier            = each.value.tier
  value           = each.value.value
  overwrite       = each.value.overwrite
  allowed_pattern = each.value.allowed_pattern
  tags            = var.tags
}

变量:

变量.tf

variable "parameter" {
  type        = list(map(string))
  default     = []
}

variable "parameter_defaults" {
  type        = map(any)
  default = {
    description     = null
    type            = "SecureString"
    tier            = "Standard"
    overwrite       = "true"
    allowed_pattern = null
  }
}

环境发展:

module "default" {
  source          = "../../module/default"

  parameter = [
    {
      name        = "/dev/parameter-development/test"
      value       = "Variable-Sensitive-1=12345,Sensitive-Variable-2=67890"
      type        = "SecureString"
      overwrite   = "true"
    }
  ]

  tags = {
    env = "Development"
  }
}

如何隐藏这些敏感值?

我的设置方式有问题吗?

【问题讨论】:

  • 您可以使用敏感选项。 hashicorp.com/blog/…
  • 将 e.value 更改为 e.name。通过值访问您循环的资源索引没有意义,而是通过名称更有意义,即使它不是敏感数据。
  • 谢谢,兄弟!这就是问题所在!

标签: amazon-web-services parameters terraform terraform-provider-aws aws-ssm


【解决方案1】:

您的 Terraform 计划和应用显示敏感值,因为您将它们用作 resource address 的一部分。

您不能以任何方式隐藏它,即使该字段本身是 considered and marked as sensitive,因为资源地址对于 Terraform 如何使用其 resource graph 非常重要,并且通常期望应该考虑资源地址不敏感。

然而,更重要的是,通过敏感值来寻址这些资源实际上没有意义,您可以改为通过参数名称而不是值来寻址它们,并且仍然实现相同的循环机制,这也将有隐藏您的敏感值的好处。

您可以通过更改循环 each object 来引用名称来做到这一点:

locals {
  parameter = { for e in var.parameter : e.name => merge(var.parameter_defaults, e) }
}

resource "aws_ssm_parameter" "default" {
  for_each = local.parameter

  name     = each.value.name

  description     = each.value.description
  type            = each.value.type
  tier            = each.value.tier
  value           = each.value.value
  overwrite       = each.value.overwrite
  allowed_pattern = each.value.allowed_pattern
  tags            = var.tags
}

我们只将e.value 更改为e.name 并保留其他所有内容。

【讨论】:

    猜你喜欢
    • 2020-12-13
    • 2019-02-04
    • 2020-07-21
    • 1970-01-01
    • 2021-07-06
    • 2013-04-06
    • 2012-12-08
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多