terraform远程状态文件的“专用”属性是做什么用的?

时间:2019-08-19 07:11:30

标签: terraform

我最近将一些现有的AWS资源导入了terraform,效果很好(谢谢)

其中一些资源很敏感,例如KMS密钥和Cloudtrail审计跟踪。

在查看存储在S3中的远程状态文件时,我发现这些对象上有一个{64}编码的private属性,例如,在我看到的其中一条路径上

"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ=="

bease64解码显示这是

"private": {"schema_version":"0"}

所以我不太担心,但是我想知道此"private"属性用于确保东西不会在这里泄漏的原因。

谢谢

卡尔

1 个答案:

答案 0 :(得分:1)

此处“私有”的含义是,从Terraform的角度来看,这是提供者确定的不透明二进制数据块。因此,不可能普遍回答 该字段的用途-特定的资源类型原则上可以将其用于任何内容,但要集中精力特别是在aws_kms_key上,我们可以讨论今天的使用方式:

AWS提供程序是使用官方Terraform Go SDK构建的,因此,在我撰写本文时,private数据实际上是由SDK逻辑而非特定于提供程序的逻辑使用的。如果解压缩共享的Base64值,则会在其中找到一些JSON:

{"schema_version":"0"}

SDK正在使用它来跟踪此对象当前正在使用的架构版本。从Terraform 0.12开始,模式版本实际上是状态格式的显式部分,因此这是多余的,但是SDK仍在此处记录它,因为当今的提供程序仍与Terraform 0.10和0.11兼容,因此将其设置为“私有”也可以在旧版本的运行之间保留它。

原则上,提供程序可以在此处存储任何内容,但是意图是提供程序使用它来跟踪使资源生命周期正常运行所需的这种“无聊”元数据,而不是任何实际的资源 data ...数据本身属于主要对象属性。