【发布时间】:2020-02-15 21:09:28
【问题描述】:
就我而言,我试图隐藏通过输出打印的 aws 访问密钥和秘密访问密钥。
我尝试实施一个解决方案,但不幸的是它在计划中打印了凭据。因此,每当我将代码/提交推送到 GITHUB 时,我们都会在 Jenkins 中运行 terraform,它会在 GITHUB 中吐出计划,从而暴露 terraform 计划中的凭据。
虽然我已经隐藏在输出中,但现在我正在计划中打印它并在 GitHub 中公开。我还尝试在输出中使用sensitive:true,这很容易解决这个问题。但是我的团队想要实施这个解决方案:(
resource "aws_iam_access_key" "key" {
user = "${aws_iam_user.user.name}"
}
resource "null_resource" "access_key_shell" {
triggers = {
aws_user = "${aws_iam_user.user.name}" // triggering an alert on the user, since if we pass aws_iam_access_key, access key is visible in plan.
}
}
data "external" "stdout" {
depends_on = ["null_resource.access_key_shell"]
program = ["sh", "${path.module}/read.sh"]
query {
access_id = "${aws_iam_access_key.key.id}"
secret_id = "${aws_iam_access_key.key.secret}"
}
}
resource "null_resource" "contents_access" {
triggers = {
stdout = "${lookup(data.external.logstash_stdout.result, "access_key")}"
value = "${aws_iam_access_key.key.id}"
}
}
output "aws_iam_podcast_logstash_access_key" {
value = "${chomp(null_resource.contents_access.triggers["stdout"])}"
}
read.sh
#!/bin/bash
set -eux
echo {\"access_key\":\"$(aws kms encrypt --key-id alias/amp_key --plaintext ${access_id} --output text --query CiphertextBlob)\", > sample.json && echo \"secret_key\": \"$(aws kms encrypt --key-id alias/amp_key --plaintext ${secret_id} --output text --query CiphertextBlob)\"} >> sample.json
cat sample.json | jq -r '.access_key'
cat sample.json | jq -r '.secret_key'
我的地形计划:
<= data.external.stdout
id: <computed>
program.#: "2"
program.0: "sh"
program.1: "/Users/xxxx/projects/tf_iam_stage/read.sh"
query.%: "2"
query.access_id: "xxxxxxxx" ----> I want to hide these values from the plan
query.secret_id: "xxxxxxxxxxxxxxxxxxxxxx/x" ----> I want to hide these values from the plan
result.%: <computed>
任何帮助! 提前致谢!
【问题讨论】:
-
您需要实现一些直接输入
provider的凭据参数,例如Vault。在这种情况下,凭据将没有机会显示。 -
@MattSchuchard,这是一个非常好的解决方案!但是我们目前不想只为这个用例设置Vault,有没有其他办法?
-
您可以编写自己的提供程序以在本地读取凭据。
标签: terraform amazon-iam terraform-provider-aws