Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提取terraform中的敏感输出变量?_Terraform_Secret Key - Fatal编程技术网

如何提取terraform中的敏感输出变量?

如何提取terraform中的敏感输出变量?,terraform,secret-key,Terraform,Secret Key,我有一个terraform配置,它创建了一个AWS IAM用户和一个访问密钥,我将id和secret分配给输出变量: ... resource "aws_iam_access_key" "brand_new_user" { user = aws_iam_user.brand_new_user.name } output "brand_new_user_id" { value = aws_iam_access_key.brand_new_user.id } output "brand

我有一个terraform配置,它创建了一个AWS IAM用户和一个访问密钥,我将id和secret分配给输出变量:

...

resource "aws_iam_access_key" "brand_new_user" {
  user = aws_iam_user.brand_new_user.name
}

output "brand_new_user_id" {
  value = aws_iam_access_key.brand_new_user.id
}

output "brand_new_user_secret" {
  value     = aws_iam_access_key.brand_new_user.encrypted_secret
  sensitive = true
}

这里,
全新用户秘密
被声明为敏感,因此
地形输出
显然不会打印它

有没有办法在不解析整个状态文件的情况下获取其输出值? 试图直接访问它(
terraform output brand\u new\u user\u secret
)不起作用(导致错误“在状态文件中找不到请求的输出变量…”)


Terraform版本:0.12.18

我还没有尝试过,但文档似乎建议,如果要输出
加密的\u密钥
,必须向
aws\u iam\u访问密钥
资源提供
pgp\u密钥

  • pgp_密钥-(可选)base-64编码的pgp公钥或形式为keybase:some_person_的keybase用户名,用于加密的_secret输出属性

  • encrypted_secret-如果指定了pgp_密钥,则为加密密钥,base64编码。~>注意:加密的秘密可以使用命令行解密,例如:terraform output encrypted|u secret | base64--decode | keybase pgp decrypt


我有一些希望避免它,但到目前为止,我没有找到比解析地形状态更好的方法:

terraform state pull | jq '.resources[] | select(.type == "aws_iam_access_key") | .instances[0].attributes'
这将导致结构类似于:

{
  "encrypted_secret": null,
  "id": "....",
  "key_fingerprint": null,
  "pgp_key": null,
  "secret": "....",
  "ses_smtp_password": "....",
  "ses_smtp_password_v4": null,
  "status": "Active",
  "user": "...."
}

我在这里用的是一个像这样的黑客工作区

resource "aws_iam_access_key" "brand_new_user" {
  user = aws_iam_user.brand_new_user.name
}

output "brand_new_user_id" {
  value = aws_iam_access_key.brand_new_user.id
}

data "template_file" "secret" {
  template = aws_iam_access_key.brand_new_user.encrypted_secret
}

output "brand_new_user_secret" {
  value     = data.template_file.secret.rendered
}


“哈奇,但我帮你解决了问题,”马克!我考虑过这一点,但我不想走这条路,因为它不安全:普通输出通常保存并存储在非安全位置——例如,在系统不同模块使用的配置文件夹中(例如,如果您不想硬编码代码中的实例ID)。相反,应始终将状态视为敏感状态。