【发布时间】:2021-12-16 01:43:50
【问题描述】:
我有以下 HCL 代码,它从 terraform plan 上的终端询问并读取 secret_api_key 变量并将其保存在秘密管理器中。
variable "secret_api_key" {
type = string
sensitive = true
}
resource "aws_secretsmanager_secret" "secret_api_key" {
name = "secret_api_key"
}
resource "aws_secretsmanager_secret_version" "secret_api_key" {
secret_id = aws_secretsmanager_secret.secret_api_key.id
secret_string = var.secret_api_key
}
在另一种配置中,秘密是这样读取的:
data "aws_secretsmanager_secret" "secret_api_key" {
name = "secret_api_key"
depends_on = [aws_secretsmanager_secret.secret_api_key]
}
data "aws_secretsmanager_secret_version" "secret_api_key" {
secret_id = data.aws_secretsmanager_secret.secret_api_key.id
}
resource "aws_lambda_function" "s3_to_service" {
...
environment {
variables = {
SECRET_ARN = data.aws_secretsmanager_secret_version.secret_api_key.arn
}
}
}
如何强制 terraform 不在我每次计划时都向我询问 API 密钥?它需要在我第一次这样做时询问我,将其存储在秘密管理器中。但在那之后,它是多余的。我怎样才能避免这种情况?
【问题讨论】:
-
提供一些默认值。
-
@Marcin 我无法将敏感值硬编码为默认值。此代码已上传到 Git。
-
我的意思是,你提供一个默认值作为一个空字符串,或者其他什么,然后编程逻辑从 SM 获取值,如果没有给出实际值。
-
不是真的——要么你每次都提供一个值,要么你不提供,但它会使用手头的值;引用秘密,但不要尝试每次都重新创建秘密。如果问题是输入输入而不是获取输入,您也可以通过 CLI 传递值
-
Terraform 用于计算差异 - 如果您什么都不提供,它将假定您希望清除/删除它
标签: amazon-web-services terraform terraform-provider-aws aws-secrets-manager