我有一个由 Terraform 创建的 IAM 用户。密钥存储在 Hashicrop Vault 中,应用程序从那里读取它们。
我已经开发了 ansible 代码/bash 脚本来成功地定期轮换密钥。
但问题是 terraform 不喜欢旋转按键。每当我们尝试运行 terraform 时,它都会尝试重新创建密钥
有什么方法可以通过 terraform 管理密钥轮换吗?或者我们可以在地形中忽略这一点吗?任何有关示例的帮助都会非常有帮助。
terraform 中的密钥轮换可以通过使用
terraform apply -replace=<resource address>
来实现,它会立即替换资源,或者使用 terraform taint <resource address>
来替换下一次申请 v0.15.2 以下版本时的资源。请参阅 https://www.terraform.io/docs/cli/commands/taint.html 了解更多信息。
使用这些命令时,将要替换的资源的生命周期设置为
create_before_destroy
以避免停机是有意义的。所以对于 AWS 访问密钥来说,那就是
resource "aws_iam_access_key" "my_user" {
user = "my_user_name"
lifecycle {
create_before_destroy = true
}
}
鉴于此配置,人们可以简单地运行
terraform apply -replace=aws_iam_access_key.my_user
来旋转密钥。只需确保使用密钥的下游应用程序注意到更改,并在必要时重新启动以使用新密钥。
我们通过在创建用户时最初通过 terraform 删除密钥生成来解决该问题。
我们现在使用一些 ansible 和 bash 脚本来生成和轮换密钥,然后使用 Vault API 来更新 Vault 中的机密。
请参阅此处使用replace_triggered_by
https://github.com/hashicorp/terraform-provider-aws/issues/23180