如何将aws_secretsmanager_secret_version从secret_string迁移到secret_string_wo?
解决AWS Secrets Manager Secret Version迁移到Write-Only属性的问题
要在不重建现有Secret Version资源(避免影响依赖系统)的前提下,从secret_string迁移到secret_string_wo属性,按以下步骤操作:
1. 备份Terraform状态
先执行状态备份,防止操作出错:
terraform state pull > terraform-state-backup.json
2. 调整Terraform配置
修改配置为使用ephemeral资源和secret_string_wo,暂时移除secret_string_wo_version属性(该属性为ForceNew类型,会触发资源重建):
ephemeral "random_password" "no_need_to_change" { length = 20 special = true } resource "aws_secretsmanager_secret_version" "my_value" { secret_id = aws_secretsmanager_secret.my_secret.id secret_string_wo = jsonencode( { password = ephemeral.random_password.no_need_to_change.result } ) }
3. 移除现有资源的状态记录
执行命令移除当前Secret Version的状态条目:
terraform state rm aws_secretsmanager_secret_version.my_value
4. 导入现有Secret Version资源
使用现有Secret的ARN和版本ID导入资源,格式为secret-arn|version-id(替换为你实际的ARN和版本ID):
terraform import aws_secretsmanager_secret_version.my_value "arn:aws:secretsmanager:eu-west-1:123456789:secret:XXXX|terraform-20250999888777666555444"
5. 修正Terraform状态
导入后,Terraform状态仍会保留旧的secret_string属性,需要手动编辑状态移除该属性并添加write-only标记:
执行状态编辑命令:
terraform state edit aws_secretsmanager_secret_version.my_value
在编辑器中:
- 删除包含
secret_string的行 - 添加一行:
has_secret_string_wo = true
保存并退出编辑器。
6. 验证配置
执行terraform plan,此时应该不会再提示资源需要重建。如果需要控制版本更新策略(比如只在创建时设置值),可以后续添加secret_string_wo_version = 1,但需注意:若要修改该属性,仍需通过状态编辑或重新导入避免重建。
额外说明
secret_string_wo是write-only属性,其值不会存储到Terraform状态中,符合安全要求- 若后续需要更新Secret值,直接修改
ephemeral资源的配置或触发Terraform apply即可,不会影响现有依赖系统(只会生成新的Secret版本)
内容的提问来源于stack exchange,提问作者Peter McEvoy
相关产品推荐
相关产品推荐

