如何提取terraform中的敏感输出变量?
我有一个terraform配置,它创建了一个AWS IAM用户和一个访问密钥,我将id和secret分配给输出变量:如何提取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
...
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)。相反,应始终将状态视为敏感状态。