3

我正在使用 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 状态加密的用例。

4

1 回答 1

1

我对 GCP 知之甚少,但在 AWS 中,鉴于 AWS 托管ReadOnly策略允许读取所有内容,包括从每个存储桶中获取对象,通常会向具有许多用户的非特权用户/角色提供相当广泛的读取权限。

使用非特权用户无法获得解密访问权限的特定 KMS 密钥加密状态文件提供了一种额外的方式来控制对状态文件及其中潜在敏感信息的访问。

即使在 GCP 中不是这种情况,它仍然提供另一层安全性,以防万一事情发生变化,并且非特权的人意外地获得了对您的状态文件存储桶的广泛读取权限。

作为一个额外的 AWS 特定事物,默认情况下不会对存储桶进行静态加密(谷歌云存储不是问题,因为它默认是静态加密的),因此从技术上讲,磁盘处理不当可能会读取数据包括任何国家档案机密。

于 2018-11-30T13:59:20.327 回答