Terraform 导入 AWS Secrets Manager 秘密版本

Abh*_*lik 6 amazon-web-services terraform aws-secrets-manager

AWS 维护一个秘密版本控制系统,如果更新秘密值或轮换秘密,则会创建新版本。

我正在 Terraform 的权限下获取 AWS 中的现有机密。作为步骤 1,我声明了我需要的所有 Terraform 资源:

resource "aws_secretsmanager_secret" "secret" {
  name                    = var.secret_name
  description             = var.secret_description
  kms_key_id              = aws_kms_key.main.id
  recovery_window_in_days = var.recovery_window_in_days
  tags                    = var.secret_tags
  policy                  = data.aws_iam_policy_document.secret_access_policy.json
}


// AWS secrets manager secret version
resource "aws_secretsmanager_secret_version" "secret" {
  secret_id     = aws_secretsmanager_secret.secret.id
  secret_string = jsonencode(var.secret_name_in_secrets_file)
}
Run Code Online (Sandbox Code Playgroud)

接下来我导入:

  1. 将秘密导入到状态:
    terraform import module.<module_name>.aws_secretsmanager_secret.secret
    arn:aws:secretsmanager:<region>:<account_id>:secret:<secret_name>-<hash_value>```
    
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将秘密版本导入到 state :
    terraform import module.<module_name>.aws_secretsmanager_secret_version.secret
    arn:aws:secretsmanager:<region>:<account_id>:secret:<secret_name>-<hash_value>|<unique_secret_id aka AWSCURRENT>
    
    Run Code Online (Sandbox Code Playgroud)

发布此文后,我预计 Terraform 计划仅涉及资源策略的更改。但 Terraform 试图销毁并重新创建秘密版本,这对我来说没有意义。

继续执行该计划后,最初与 AWSCURRENT 暂存标签关联的秘密版本,我在上面导入中使用的版本成为 AWSPREVIOUS 暂存标签 ID,并创建了一个新的 AWSCURRENT。

导入 terraform 之前:

{
    "Versions": [
        {
            "VersionId": "initial-current",
            "VersionStages": [
                "AWSCURRENT"
            ],
            "LastAccessedDate": "xxxx",
            "CreatedDate": "xxx"
        },
        {
            "VersionId": "initial-previous",
            "VersionStages": [
                "AWSPREVIOUS"
            ],
            "LastAccessedDate": "xxxx",
            "CreatedDate": "xxxx"
        }
    ],
    "ARN": "xxxx",
    "Name": "xxxx"
}
Run Code Online (Sandbox Code Playgroud)

TF导入并应用后:

{
    "Versions": [
        {
            "VersionId": "post-import-current",
            "VersionStages": [
                "AWSCURRENT"
            ],
            "LastAccessedDate": "xxxx",
            "CreatedDate": "xxx"
        },
        {
            "VersionId": "initial-current",
            "VersionStages": [
                "AWSPREVIOUS"
            ],
            "LastAccessedDate": "xxxx",
            "CreatedDate": "xxxx"
        }
    ],
    "ARN": "xxxx",
    "Name": "xxxx"
}
Run Code Online (Sandbox Code Playgroud)

我期望初始电流保留在 AWSCURRENT 阶段部分。为什么 AWS 将我使用 TF 导入的初始 AWSCURRENT 秘密 ID 导入到 AWSPREVIOUS 中,并创建一个新的秘密 ID,因为在值或轮换方面没有任何变化?自从 TF 导入版本以来,我预计这方面不会有任何变化