이 섹션에는 소스 코드 외부에 있지만 제작 중인 제품의 보안에는 여전히 중요한 내용이 모두 포함되어 있습니다. 이 섹션에서 다루는 문제들은 소스 코드와 직접적으로 관련이 없기 때문에 나머지 섹션과 분리했습니다.
master_auth
블록에서 username
과 password
를 비어 있지 않은 값으로 설정하여 GKE 클러스터에서 HTTP 기본 인증을 활성화하는 Terraform 구성을 보여줍니다.
resource "google_container_cluster" "container_cluster_demo" {
...
master_auth {
username = "foo"
password = "bar"
}
...
}
enable_legacy_abac
를 true
로 설정하여 GKE 클러스터의 기존 ABAC 인증을 활성화하는 Terraform 구성을 보여줍니다.
resource "google_container_cluster" "container_cluster_demo" {
...
enable_legacy_abac = true
...
}
management
블록에서 auto_repair
를 false
로 설정하여 노드 풀의 노드 자동 복구를 비활성화합니다.
resource "google_container_node_pool" "node-pool-demo" {
...
management {
auto_repair = false
...
}
...
}
enable_private_nodes
및 enable_private_endpoint
가 false
로 설정되어 있기 때문입니다.
resource "google_container_cluster" "cluster-demo" {
...
private_cluster_config {
enable_private_endpoint = false
enable_private_nodes = false
}
...
}
node_config
블록에서 image_type
이 COS 외의 이미지로 설정되어 있기 때문에 COS를 실행하지 않는 GKE 노드 풀을 설정합니다.
resource "google_container_node_pool" "node_pool_demo" {
...
node_config {
image_type = "UBUNTU"
...
}
...
}
management
블록에서 auto_upgrade
를 false
로 설정하여 Kubernetes 노드의 자동 업그레이드를 비활성화합니다.
resource "google_container_node_pool" "node_pool_demo" {
...
management {
auto_upgrade = false
...
}
...
}
auto_create_network
를 true
로 설정하여 프로젝트 전체 네트워크의 자동 생성을 활성화합니다.
resource "google_project" "project-demo" {
...
auto_create_network = true
...
}
cloud-platform
으로 설정합니다. 이로 인해 손상된 Compute Engine 인스턴스에 액세스할 수 있는 공격 표면이 대폭 확장되고 최소 권한 원칙에 위반됩니다.scopes
)를 cloud-platform
으로 설정하는 Terraform 구성을 보여줍니다.
resource "google_compute_instance" "compute-instance-demo" {
name = "name-demo"
machine_type = "e2-micro"
...
service_account {
email = "foobar.service.account@example.com"
scopes = ["cloud-platform"]
}
}
example.com
도메인용 ssl_settings
블록이 포함되지 않은 Terraform 구성이 나와 있습니다. 따라서 App Engine 응용 프로그램용 사용자 지정 도메인이 HTTPS를 지원하지 않습니다.
resource "google_app_engine_domain_mapping" "domain_mapping" {
domain_name = "example.com"
}
https_trigger_security_level
이 SECURE_OPTIONAL
로 설정되어 있으므로 HTTPS 끝점이 적용되지 않습니다.
resource "google_cloudfunctions_function" "demo_function" {
...
trigger_http = true
https_trigger_security_level = "SECURE_OPTIONAL"
...
}
require_ssl
을 false
로 설정하여 데이터베이스 인스턴스가 모든 연결에 대해 SSL을 적용하도록 요구하지 않는 Terraform 구성을 보여줍니다.
resource "google_sql_database_instance" "database_instance_demo" {
...
settings {
ip_configuration {
require_ssl = false
...
}
...
}
}
require_tls
를 false
로 설정하여 클라이언트가 통신에 TLS를 사용하지 않아도 되도록 지정합니다.
resource "google_network_services_edge_cache_service" "srv_demo" {
...
require_tls = false
...
}
profile
을 COMPATIBLE
로 설정하여 약한 SSL 암호화 알고리즘을 사용하는 것을 허용하는 SSL 정책을 정의합니다.예제 2: 다음 예제 Terraform 구성은 프록시 로드 밸런서가
resource "google_compute_ssl_policy" "policy-demo" {
...
profile = "COMPATIBLE"
...
}
TLS_RSA_WITH_AES_128_CBC_SHA
라는 약한 SSL 암호화 알고리즘을 사용하는 것을 허용하는 것을 허용하는 SSL 정책을 정의합니다.
resource "google_compute_ssl_policy" "policy-demo" {
...
profile = "CUSTOM"
min_tls_version = "TLS_1_2"
custom_features = ["TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_RSA_WITH_AES_128_CBC_SHA"]
...
}
log_bucket
인수가 없기 때문에 사용량 로깅 및 스토리지 로깅을 활성화하지 않고 Cloud Storage 버킷을 만드는 Terraform 구성을 보여줍니다.
resource "google_storage_bucket" "bucket-demo" {
name = "name-demo"
location = "US"
}
logging_service
를 none
으로 설정하여 GKE 클러스터의 로깅 서비스를 비활성화하는 Terraform 구성을 보여줍니다.
resource "google_container_cluster" "cluster-demo" {
name = "name-demo"
location = "us-central1-a"
logging_service = "none"
...
}
monitoring_service
를 none
으로 설정하여 GKE 클러스터의 모니터링 서비스를 비활성화하는 Terraform 구성을 보여줍니다.
resource "google_container_cluster" "cluster-demo" {
name = "name-demo"
location = "us-central1-a"
monitoring_service = "none"
...
}