Назад | Перейти на главную страницу

Что означает атрибут private в tfstate (для экземпляра DynamoDB)?

Я загружаю удаленное состояние 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" объект тоже - но это свойство не предназначено для этого.