Полезно ли шифровать состояние Terraform, хранящееся на удаленном бэкэнде (например, GCS bucket)?

Я использую Terraform для управления ресурсами Google Cloud Platform (GCP). Я использую бэкэнд Google Cloud Storage для хранения файла состояния. GCP предоставляет управляемую службу управления ключами, поэтому с этими ключами можно управлять ключами и легко включать шифрование в корзине. Поэтому я использую следующее для шифрования моего бэкэнда (test-terraform-state, это ведро будет содержать только состояние Terraform).

variable my-project {}
variable my-region {}

provider "google" {
  project = "${var.my-project}"
  region  = "${var.my-region}"
  version = "1.19.1"
}

resource "google_kms_key_ring" "test-terraform-state" {
  name     = "test-terraform-state"
  location = "${var.my-region}"
}

resource "google_kms_crypto_key" "test-terraform-state-bucket" {
  name            = "test-terraform-state-bucket"
  key_ring        = "${google_kms_key_ring.test-terraform-state.self_link}"
  rotation_period = "86400s"

  lifecycle {
    prevent_destroy = true
  }
}

resource "google_storage_bucket" "test-terraform-state" {
  name = "test-terraform-state"

  location      = "${var.my-region}"
  storage_class = "REGIONAL"

  versioning {
    enabled = true
  }

  encryption {
    default_kms_key_name = "${google_kms_crypto_key.test-terraform-state-bucket.self_link}"
  }
}

Поэтому мой вопрос: содержимое сегмента (состояние (я) Terraform) может быть зашифровано, но действительно ли это полезно? Если в корзине есть политики, например, "только некоторые пользователи могут получить к ней доступ (чтение / запись)", имеет ли преимущество шифрование? Я вижу здесь только дополнительный уровень безопасности (необходимо?), Потому что людям понадобится доступ к этой группе + роль roles/cloudkms.cryptoKeyEncrypterDecrypter для доступа к содержимому. Но я думаю, что мне не хватает некоторых вариантов использования, оправдывающих шифрование состояния Terraform.

1 ответ

Решение

Я не знаю достаточно о GCP, но в AWS довольно типично давать достаточно широкие права на чтение непривилегированным пользователям / ролям для многих пользователей, которым управляет AWS. ReadOnly политика, которая позволяет читать все, включая получение объектов из каждого ведра.

Шифрование файла состояния с помощью специального ключа KMS, который непривилегированные пользователи не получают расшифрованного доступа, обеспечивает дополнительный способ управления доступом к файлам состояния и потенциально конфиденциальной информации в них.

Даже если это не так в GCP, он все же обеспечивает еще один уровень безопасности на случай, если что-то изменится, и кому-то непривилегированному случайно предоставлены широкие разрешения на чтение в вашем файле состояния.

Поскольку дополнительные элементы, специфичные для AWS, по умолчанию не шифруются в состоянии покоя (это не проблема для Google Cloud Storage, поскольку по умолчанию оно шифруется в состоянии покоя), то есть технически возможно, что при неправильной утилизации диска будут считываться данные с него. включая любые государственные секреты файлов.