【问题标题】:How to prevent terraform from asking for the value of a variable that is set on AWS Secrets Manager?如何防止 terraform 询问在 AWS Secrets Manager 上设置的变量的值?
【发布时间】: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


【解决方案1】:

不是真的。

您可以每次手动提供一个值,也可以不提供,但每次您想要评估 Terraform 配置时,无论是您自己还是默认情况下,Terraform 变量都需要以某种形状、方式或形式指定的值。

p>

如果您计划/应用 aws_secretsmanager_secret,则无法手动提供值,除非您对值进行硬编码或指定默认值。

Terraform 工作基于计算状态差异 - 它需要知道您的预期状态是什么(使用您的变量值),然后将其与实际状态进行比较。

我建议您在创建/更新机密时为机密计划/应用 Terraform 配置,并将机密的创建与机密的使用分开。

然后,您可以使用data.aws_secretsmanager_secret.secret_api_key 访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 2020-05-09
    • 2020-02-28
    • 2021-04-21
    • 2020-06-16
    • 2021-03-17
    • 2020-03-09
    • 2021-11-19
    相关资源
    最近更新 更多