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

osc*_*enk 7 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>" 
        }
      ]
    }
Run Code Online (Sandbox Code Playgroud)

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

它包含什么?

Mar*_*ins 6

"private"属性是其中提供者可以从实际保留他们需要为生命周期内跟踪的任何元数据,分别的场所的数据"attributes"

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

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

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