使用 terraform 覆盖已删除的 aws_secretsmanager_secret 资源

Posted

技术标签:

【中文标题】使用 terraform 覆盖已删除的 aws_secretsmanager_secret 资源【英文标题】:override deleted aws_secretsmanager_secret resource using terraform 【发布时间】:2020-09-20 12:52:13 【问题描述】:

我有一些使用 terraform 创建的秘密,由于一些错误我已经评论并应用了 tf 所以资源标记为删除,但现在如果我启用它并应用它说资源被标记为删除。

resource "aws_secretsmanager_secret" "rotation-example" 
  name                = "mysecret"
description       ="sccretatexample"
   recovery_windows_in_days = 7

我无法更改名称和创建其他资源,也无法访问 aws console/cli 。请指导我如何再次创建或者是否可以通过覆盖来使用旧的

【问题讨论】:

您好,如果您评论了资源并申请了tf,它不会将资源标记为删除,但会破坏资源。或者你只是执行 apply 但没有给 yes 执行?但在以后的情况下,如果您取消注释/启用资源并执行它不会显示资源被标记为删除。一种情况是有人从控制台手动更改了资源中的某些内容,这就是为什么现在 Terraform 想要删除并重新创建它。如果我的理解有问题,请纠正我。 我已经在 terraform 中评论了资源并应用了,看起来只有在创建期间将保留天数设置为零但在我的情况下我设置为 7 天时才能销毁秘密管理器...跨度> 【参考方案1】:

到目前为止,还没有可用于使用 terraform 检索已删除机密的功能。检查这个未解决的问题 - https://github.com/terraform-providers/terraform-provider-aws/issues/10259

但是您可以使用一些手动工作来完成此操作,但是您需要 AWS 管理员的帮助,或者 AWS 访问密钥应该具有以下权限。

To restore a secret and the metadata in the console, you must have these permissions:

secretsmanager:ListSecrets – Use to navigate to the secret you want to restore.

secretsmanager:RestoreSecret – Use to delete any versions still associated with the secret. 

如果 AWS 访问密钥具有以上权限,请使用 cmd 下方恢复密码。

aws secretsmanager restore-secret --secret-id mysecret 

按照此 AWS 文档恢复密钥。 https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_delete-restore-secret.html

一旦机密恢复,您可以使用下面的“terraform import”来使用现有机密详细信息更新您的状态文件。

terraform import aws_secretsmanager_secret.rotation-example mysecret

另外,如果你想创建和删除经常使用下面的秘密。

recovery_windows_in_days = 0

【讨论】:

以上是关于使用 terraform 覆盖已删除的 aws_secretsmanager_secret 资源的主要内容,如果未能解决你的问题,请参考以下文章

AWS Beanstalk Tomcat 和 Terraform

Terraform 配置 LB 属性失败

Terraform:运行空资源后如何强制资源更新?

如何在Terraform中将字符串添加到变量?

如何让 Terraform 读取 AWS 凭证文件?

地图资源的 Terraform 导入