Я загружаю удаленное состояние terraform, сохраняя tfstate
создания корзины S3 и таблицы блокировок DynamoDB и сохранения ее в git. Моя организация просканировала репозиторий с помощью 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 не экспортирует поле как атрибут, и я не могу найти документацию по значению поля.
Что в нем содержится?
В "private"
свойство - это место, где поставщики могут хранить любые метаданные, которые им нужны для внутреннего отслеживания жизненного цикла, отдельно от фактических данные в "attributes"
.
С точки зрения Terraform Core, это просто произвольная последовательность байтов в кодировке base64. Вы можете декодировать его с помощью base64, чтобы увидеть, что там хранит провайдер.
В принципе, провайдер может хранить все, что хочет, но сегодня на практике это чаще всего используется Terraform SDK для отслеживания версий схемы. Вероятно, это то, что вы обнаружите, если расшифруете это в формате JSON. Формат моментального снимка состояния Terraform 0.12 имеет первоклассное свойство для версии схемы, которое вы можете увидеть дальше в этом объекте, поэтому в этом случае эти данные являются избыточными, но SDK сохраняет их в двух местах, чтобы поставщики могли оставаться совместимыми с Terraform 0,10 и 0,11.
«частный» в этом контексте означает «только для использования поставщиком», а не «секретно». Поэтому с точки зрения detect-secrets
инструмент это неудачный ложноположительный результат. В принципе, провайдер может хранить там личные данные - точно так же, как он может делать это в "attributes"
объект тоже - но это свойство не предназначено для этого.