terraform中的Vault的提供程序配置

问题描述

我在Terraform代码中具有以下Terraform配置

data "external" "region" {
  program = ["sh","test.sh"]
  query = {
    aws_region = var.aws_region
    vault_url  = var.vault_url
    vault_role = var.vault_role
  }
}

provider "vault" {
  address = "http://3.218.2.138:8200"
  token   = data.external.region.result["vault_token"]
}

外部程序运行命令库登录-method = aws role = test-role,然后返回库令牌。

有没有一种方法可以避免此外部程序,并在我执行terraform apply和terraform show时使库令牌生成。

因此,基本上,有一种方法可以使外部脚本不被执行,并在不执行外部脚本的情况下获取库令牌。

解决方法

一种典型的方法是在运行Terraform之前先运行vault login(或其他等效过程) ,然后让Terraform以与Vault客户端本身相同的方式读取这些环境凭证会。

尽管Terraform提供程序通常接受凭据作为其配置的一部分,以允许更复杂的情况,但是将凭据传递给Terraform提供程序的理想方法是通过所讨论系统的标准机制间接地传递。例如,Terraform AWS提供程序以与aws CLI相同的方式理解如何读取凭证,并且Vault提供程序在与Vault CLI使用相同的环境变量中查找凭证。

使用集中式系统(如带有Terraform的Vault的系统)的团队通常会run Terraform in automation,以便可以对这些系统的配置进行集中化,而不是为在本地运行的每个用户重新实现。因此,即使Terraform操作本身失败,您的自动化脚本也可以在运行Terraform之前从Vault获取临时令牌,然后在Terraform返回后显式撤消该令牌。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...