설명
Memorystore for Redis 인벤토리는 캐시의 용도, 연결 네트워크와 소유 팀을 관리하는 자료입니다. 리소스의 존재 자체는 취약점이 아니며, Memorystore는 내부 IP 주소를 사용합니다.
잠재적 영향
관리 정보가 부족하면 원하지 않는 클라이언트의 접근이나 복구 설정 누락을 발견하기 어려워질 수 있습니다.
해결 방법
인스턴스의 용도와 책임자를 기록하고 authorized_network, 연결 경로, 인증, 전송 암호화와 복구 설정을 함께 확인하세요.
예시
기존 구성과 별도 사설 서비스 연결 구성의 발췌입니다. 네트워크 정의는 생략했습니다. 포함된 VPC 인바운드 규칙을 좁히는 것만으로 Memorystore의 접근 제어가 완성되지는 않습니다.
변경 전
hcl
resource "google_redis_instance" "cache" {
name = "memory-cache"
memory_size_gb = 1
}
resource "google_compute_global_address" "service_range" {
name = "address"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = data.google_compute_network.redis-network.id
}
resource "google_service_networking_connection" "private_service_connection" {
network = data.google_compute_network.redis-network.id
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [google_compute_global_address.service_range.name]
}
resource "google_redis_instance" "cache2" {
name = "private-cache"
tier = "STANDARD_HA"
memory_size_gb = 1
location_id = "us-central1-a"
alternative_location_id = "us-central1-f"
authorized_network = data.google_compute_network.redis-network.id
connect_mode = "PRIVATE_SERVICE_ACCESS"
redis_version = "REDIS_4_0"
display_name = "Terraform Test Instance"
depends_on = [google_service_networking_connection.private_service_connection]
}
resource "google_compute_firewall" "redis_ingress_open" {
name = "test-firewall"
network = data.google_compute_network.redis-network.name
direction = "INGRESS"
source_ranges = ["0.0.0.0/0"]
allow {
protocol = "tcp"
ports = ["6379"]
}
}
변경 후
hcl
resource "google_compute_global_address" "service_range" {
name = "redis-private-range"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = google_compute_network.redis_network.id
}
resource "google_service_networking_connection" "private_service_connection" {
network = google_compute_network.redis_network.id
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [google_compute_global_address.service_range.name]
}
resource "google_redis_instance" "cache" {
name = "team-cache-prod"
tier = "STANDARD_HA"
memory_size_gb = 1
authorized_network = google_compute_network.redis_network.id
connect_mode = "PRIVATE_SERVICE_ACCESS"
redis_version = "REDIS_7_0"
display_name = "prod-cache"
depends_on = [google_service_networking_connection.private_service_connection]
}
resource "google_compute_firewall" "redis_ingress_internal" {
name = "redis-ingress-internal"
network = google_compute_network.redis_network.name
direction = "INGRESS"
source_ranges = ["10.10.0.0/16"]
allow {
protocol = "tcp"
ports = ["6379"]
}
}