Terraform-provider-local: 如果sensitive = true,local_file 不应在输出中打印敏感信息

创建于 2018-08-22  ·  14评论  ·  资料来源: hashicorp/terraform-provider-local

_这个问题最初由@mtheus作为hashicorp/terraform#18718 打开。 由于提供者拆分,它被迁移到这里。 问题的原始正文如下。_


地形版本

Terraform v0.11.8

Terraform 配置文件

resource "local_file" "kubeconfig" {
    sensitive = true
    content  = "${data.terraform_remote_state.kubernetes.kubeconfig}"
    filename = ".kube/config"
}

调试输出

预期行为

敏感信息似乎不在输出中

实际行为

data.terraform_remote_state.kubernetes: Refreshing state...
local_file.kubeconfig: Creating...
  content:  "" => "\n\napiVersion: v1\nclusters:\n- cluster:\n    server: https://**<SENSIVE>**.sk1.us-east-1.eks.amazonaws.com\n    certificate-authority-data: LS0tLS1C**<SENSIVE>**\n  name: kubernetes\ncontexts:\n- context:\n    cluster: kubernetes\n    user: aws\n  name: aws\ncurrent-context: aws\nkind: Config\npreferences: {}\nusers:\n- name: aws\n  user:\n    exec:\n      apiVersion: client.authentication.k8s.io/v1alpha1\n      command: aws-iam-authenticator\n      args:\n        - \"token\"\n        - \"-i\"\n        - \"latam\"\n"
  filename: "" => ".kube/config"
local_file.kubeconfig: Creation complete after 0s (ID: 73a74cc24de6ebfe8304a9b889415884fd819390)

重现步骤

  1. terraform init
  2. terraform apply

补充

应该适用于所有打印输出的组件

最有用的评论

https://github.com/terraform-providers/terraform-provider-local/releases/tag/v1.2.0现已推出,增加了对sensitive_content的支持,所以我认为这个问题现在可以关闭了。

所有14条评论

master 的代码实现了一个解决方案: sensitve_content 。 这与其他 terraform 资源不一致,但至少它是一种解决方案。

然而,它似乎还没有在 Terraform v0.11.10 和 provider.local v1.1.0 中可用。

这在 2018 年 3 月的 #9 中实施,但尚未发布。

@alewando很抱歉这里的反应很慢! 核心团队一直在埋头研究 terraform 0.12 版本,不幸的是,有些事情(比如这个提供者!)因此被忽视了。

我会将其添加到书签中,以提醒自己通过待处理的 PR 并发布版本。 感谢您处理此特定问题,并感谢您的耐心等待!

@mildwonkey是否有机会获得发布削减? 我们可以分叉并发布一个新版本,但它需要在 Terraform 编排中加载大量样板才能引入自定义插件。

@mildwonkey再次,我呼吁释放。 这是一场轻松的胜利,可以帮助我们很多。

@mildwonkey我也认为这将是一个很棒的功能,并期待它的发布。 🙂

对于那些寻找临时替代方案的人,这就是我为多个 RDS 数据库导出凭据所做的(我有一个数据库/密码和主密码的映射):

locals {
  databases = "${keys(var.shared_db_databases_passwords)}"
  manual_output = {
    endpoint  = "${module.shared_database.database_endpoint}"
    username  = "myusername"
    password  = "${var.shared_db_master_password}"
    port      = 5432
    databases = "${local.databases}"
    passwords = "${values(var.shared_db_databases_passwords)}"
  }
}

resource "null_resource" "manual_output" {
  triggers {
    databases = "${join(",", local.databases)}"
  }

  provisioner "local-exec" {
    command = "echo $DATA > manual_output.json"
    environment {
      DATA = "${jsonencode(local.manual_output)}" # Necessary to hide outputs
    }
  }
}

https://github.com/terraform-providers/terraform-provider-local/releases/tag/v1.2.0现已推出,增加了对sensitive_content的支持,所以我认为这个问题现在可以关闭了。

谢谢@invidian

local_file数据源也应该支持sensitive_content

@ShahNewazKhan您是说local_file数据源应该有一个属性sensitive_content吗? 如果是这样,这将是什么用例?

@unacceptable想象一下,您正在通过与实际创建 local_file 资源不同的方式设置 local_file 资源的内容(或者您只想读取现有文件)。 如果该内容首先是敏感的,则您需要访问它而不直接在输出或 tfstate 中显示它。

我认为拥有这个功能是有意义的。 local_file数据源可以有sensitive_filename参数,这表明内容应该放在sensitive_content属性而不是content (和content_base64 )。 然而,这似乎是一个新的功能提议。 也许我们应该创建另一个问题来解决它?

我刚刚在这里创建了它:
https://github.com/terraform-providers/terraform-provider-local/issues/36

我相信该选项应该存在于数据结构中,因此不仅可以从通过 local_file 资源定义的文件中获取敏感内容,还可以从现有文件中获取它。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ghost picture ghost  ·  24评论

ghost picture ghost  ·  8评论

brett-richardson picture brett-richardson  ·  4评论

hashibot picture hashibot  ·  8评论

bramp picture bramp  ·  3评论