이 섹션에는 소스 코드 외부에 있지만 제작 중인 제품의 보안에는 여전히 중요한 내용이 모두 포함되어 있습니다. 이 섹션에서 다루는 문제들은 소스 코드와 직접적으로 관련이 없기 때문에 나머지 섹션과 분리했습니다.
https_redirect
를 false
로 설정하여 클라이언트가 통신에 HTTP를 상둉하도록 허용합니다.
resource "google_network_services_edge_cache_service" "srv_demo" {
...
routing {
...
path_matcher {
...
route_rule {
...
url_redirect {
https_redirect = false
}
}
}
}
}
master_authorized_networks_config
블록에서 승인된 네트워크를 정의하지 않고 공용 클러스터를 설정합니다. 따라서, GKE 제어 영역 API 끝점에 공개적으로 액세스할 수 있습니다.
resource "google_container_cluster" "cluster_demo" {
name = "name-demo"
}
master_auth
블록에서 issue_client_certificate
를 true
로 설정하여 GKE 클라이언트 인증서 기반 인증을 활성화합니다.
resource "google_container_cluster" "container_cluster_demo" {
...
master_auth {
client_certificate_config {
issue_client_certificate = true
...
}
...
}
...
}
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"]
...
}