`tfstate` 中的 `private` 属性含义是什么(对于 DynamoDB 实例)?

`tfstate` 中的 `private` 属性含义是什么(对于 DynamoDB 实例)?

我正在通过存储来引导我的 Terraform 远程状态tfstate创建 S3 存储桶和 DynamoDB 锁定表并将其存储在 git 中来引导我的 Terraform 远程状态。我的组织使用 Yelp/检测秘密并将包含的行标记privateBase64 High Entropy String

# excerpt from `tfstate` file
    {
      "mode": "managed",
      "type": "aws_dynamodb_table",
      "name": "state-lock",
      "provider": "provider.aws",
      "instances": [
        {
          "schema_version": 1,
          "attributes": {
            "arn": "arn:aws:dynamodb:eu-west-1:111:table/terraform-state-lock",

           ...

            "write_capacity": 1
          },
          "private": "<long string>" 
        }
      ]
    }

https://www.terraform.io/docs/providers/aws/r/dynamodb_table.html没有将该字段作为属性导出,而且我找不到有关该字段含义的文档。

它包含什么?

答案1

"private"属性是提供商可以保留内部生命周期跟踪所需的任何元数据的地方,与实际的数据"attributes"

从 Terraform Core 的角度来看,它只是一个任意的字节序列,经过 base64 编码。您可以对其进行 base64 解码,以查看提供商在其中存储的内容。

原则上,提供商可以自由存储任何内容,但在实践中,Terraform SDK 目前最常使用它来跟踪架构版本。如果您以 JSON 格式解码此文件,您可能会发现这一点。Terraform 0.12 状态快照格式具有架构版本的一等属性,您可以在该对象的更上方看到它,因此在这种情况下,该数据是多余的,但 SDK 将其保留在两个位置,以便提供商可以与 Terraform 0.10 和 0.11 保持兼容。

在此上下文中,“private” 表示“仅供提供者使用”,而不是“秘密”。因此,从工具的角度来看,detect-secrets这是一个不幸的误报。原则上,提供者可以在那里存储私有数据 - 就像它也可以在对象中这样做一样"attributes"- 但这不是此属性的设计目的。

相关内容