🔥
saml with gke
dev.xxxx.com 환경에서 GKE, IAP, Cloud Armor, Load Balancing과 함께 SAML 인증을 구성하는 방법을 설명해드리겠습니다.
먼저 기존 코드에 SAML 관련 설정을 추가하겠습니다:
gke.tf
// ... existing code ...
# Workload Identity Pool 생성
resource "google_iam_workload_identity_pool" "saml_pool" {
workload_identity_pool_id = "dev-saml-pool"
display_name = "Dev SAML Pool"
description = "Identity pool for dev environment SAML federation"
}
# SAML Provider 설정
resource "google_iam_workload_identity_pool_provider" "saml" {
workload_identity_pool_id = google_iam_workload_identity_pool.saml_pool.workload_identity_pool_id
workload_identity_pool_provider_id = "dev-saml-provider"
display_name = "Dev SAML Provider"
saml {
idp_metadata_xml = file("path/to/metadata.xml")
}
attribute_mapping = {
"google.subject" = "assertion.sub"
"attribute.user_email" = "assertion.email"
"attribute.groups" = "assertion.groups"
}
}
# IAP Brand에 SAML 설정 추가
resource "google_iap_brand" "default" {
support_email = "support@xxxx.com"
application_title = "XXXX Dev Application"
# SAML 설정 추가
identity_provider = {
idp_id = google_iam_workload_identity_pool_provider.saml.name
sign_response = true
use_metadata = true
}
}
# IAP OAuth Client 설정 업데이트
resource "google_iap_client" "default" {
display_name = "IAP SAML Client"
brand = google_iap_brand.default.name
}
# Cloud Armor 정책 업데이트
resource "google_compute_security_policy" "policy" {
// ... existing rules ...
# SAML 인증된 사용자만 허용
rule {
action = "allow"
priority = "1500"
match {
expr {
expression = "has(request.headers['x-goog-iap-jwt-assertion']) && request.headers['x-goog-iap-jwt-assertion'].contains('dev.xxxx.com')"
}
}
}
}
그리고 SAML 설정을 위한 새로운 파일을 생성합니다:
saml.tf
# SAML 설정을 위한 Service Account
resource "google_service_account" "saml_sa" {
account_id = "dev-saml-service-account"
display_name = "Dev SAML Service Account"
}
# SAML 인증서를 저장할 Storage Bucket
resource "google_storage_bucket" "saml_cert" {
name = "dev-saml-cert-${var.project_id}"
location = "asia-northeast3"
uniform_bucket_level_access = true
}
# SAML 메타데이터 저장
resource "google_storage_bucket_object" "saml_metadata" {
name = "saml-metadata.xml"
bucket = google_storage_bucket.saml_cert.name
source = "path/to/metadata.xml" # IdP에서 제공받은 메타데이터 파일
}
# IAM 정책 바인딩
resource "google_project_iam_binding" "saml_viewer" {
project = var.project_id
role = "roles/browser"
members = [
"serviceAccount:${google_service_account.saml_sa.email}",
]
}
주요 변경사항 설명:
-
SAML 인증 흐름:
- 사용자가 dev.xxxx.com 접속
- IAP에서 SAML IdP로 리디렉션
- SAML 인증 후 GKE 서비스 접근
-
보안 설정:
- Cloud Armor에서 SAML 인증된 요청만 허용
- IAP를 통한 접근 제어
- Workload Identity를 통한 서비스 계정 관리
-
구성 필요사항:
- IdP에서 제공하는 SAML 메타데이터 파일 필요
- support@xxxx.com 이메일 주소 확인
- 실제 도메인(dev.xxxx.com) DNS 설정 확인
-
추가 설정 필요사항:
- IdP 측에서의 설정 (SP 메타데이터 등록)
- SAML 어설션 매핑 확인
- SSL 인증서 발급 확인
이 설정으로 dev.xxxx.com에 대한 접근은:
- SAML 인증 필요
- IAP를 통한 접근 제어
- Cloud Armor를 통한 보안 강화
- GKE 클러스터와의 안전한 통합이 가능합니다.
Discussion