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 の状態暗号化を正当化するいくつかのユースケースが欠けていると思います。