Terraform-provider-local: sensitive = trueの場合、local_fileは機密情報を出力に出力しないでください

作成日 2018年08月22日  ·  14コメント  ·  ソース: hashicorp/terraform-provider-local

_この問題は、もともと@mtheusによってhashicorp / terraform# 18718として開かれました。 プロバイダーの分割の結果として、ここに移行されました。 問題の元の本文は以下のとおりです。_


Terraformバージョン

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件

マスターのコードはソリューションを実装します: sensitve_content 。 これは他のテラフォームリソースと一致していませんが、少なくともその解決策です。

ただし、Terraformv0.11.10およびprovider.localv1.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パラメータを含めることができます。これは、コンテンツをcontent (およびcontent_base64 )ではなくsensitive_contentプロパティに配置する必要があることを示します。 content_base64 )。 しかし、それは新機能の提案のようです。 おそらく、それに対処するために別の問題を作成する必要がありますか?

ここで作成しました:
https://github.com/terraform-providers/terraform-provider-local/issues/36

このオプションはデータ構造に存在する必要があると思います。そのため、local_fileリソースを介して定義されたファイルからsensitive_contentを取得できるだけでなく、既存のファイルからも取得できます。

このページは役に立ちましたか?
0 / 5 - 0 評価