通过 Terraform 创建的用户的轮换密钥

sjm*_*sjm 8 amazon-web-services amazon-iam terraform terraform-provider-aws

我有一个由 Terraform 创建的 IAM 用户。密钥存储在 Hashicrop Vault 中,应用程序从那里读取它们。

我已经开发了 ansible 代码/bash 脚本来成功地定期轮换密钥。

但问题是 terraform 不喜欢旋转键。每当我们尝试运行 terraform 时,它都会尝试重新创建密钥

有没有办法通过 terraform 管理密钥轮换?或者我们可以在地形中忽略这一点吗?任何有关示例的帮助都会非常有帮助。

Jar*_*rno 12

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
  }
}

Run Code Online (Sandbox Code Playgroud)

有了这种配置,人们可以简单地运行terraform apply -replace=aws_iam_access_key.my_user来轮换密钥。只需确保使用密钥的下游应用程序注意到这些更改,并在必要时重新启动以使用新密钥。


sjm*_*sjm 2

我们通过在创建用户时最初通过 terraform 删除密钥生成来解决这个问题。

我们现在使用一些 ansible 和 bash 脚本来生成和轮换密钥,然后使用 Vault api 来更新 Vault 中的机密。