我正在通过存储来引导我的 Terraform 远程状态tfstate
创建 S3 存储桶和 DynamoDB 锁定表并将其存储在 git 中来引导我的 Terraform 远程状态。我的组织使用 Yelp/检测秘密并将包含的行标记private
为Base64 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"
- 但这不是此属性的设计目的。