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