Kubernetes Secret 관리 완벽 가이드! 민감 정보 보호와 Application 보안 구조 이해하기

서버 운영 환경에서는 다양한 민감 정보를 관리해야 합니다.

예:

  • Database 비밀번호
  • API Key
  • 인증 Token
  • TLS 인증서
  • Cloud Access Key

이러한 정보를 Application 코드 내부에 직접 작성하면 심각한 보안 문제가 발생할 수 있습니다.

예:

Application 코드

Database Password 포함

Git Repository 저장

외부 노출 위험

Kubernetes에서는 이러한 문제를 해결하기 위해 Secret Resource를 제공합니다.

Kubernetes Secret은 민감한 데이터를 별도로 저장하고 Pod에서 안전하게 사용할 수 있도록 관리하는 기능입니다.

구성 요소역할
Secret민감 정보 저장
ConfigMap일반 설정 저장
Volume Mount파일 형태 제공
Environment Variable환경 변수 제공

Secret 구조를 이해하면 Database 인증 정보, API Token, TLS Certificate 등을 안전하게 관리할 수 있습니다.

Kubernetes Secret이 필요한 이유

Application 운영에서는 설정 정보와 비밀번호를 분리해야 합니다.

잘못된 방식:

Application Code

Database Password 포함

Git 저장

Password 노출

안전한 방식:

Secret 생성

Pod 연결

Application 사용

민감 정보와 Application을 분리할 수 있습니다.

Kubernetes Secret과 ConfigMap 차이

두 Resource는 비슷하지만 목적이 다릅니다.

구분ConfigMapSecret
용도일반 설정민감 정보
데이터환경 설정, 옵션비밀번호, Token
암호화기본 미지원Base64 Encoding
보안 중요도일반높음

Database 주소는 ConfigMap, Password는 Secret으로 관리하는 방식이 일반적입니다.

Kubernetes Secret 저장 구조

Secret은 Kubernetes API Server에 저장됩니다.

구조:

Secret 생성

API Server 저장

Pod 요청

Container 전달

기본적으로 Secret 데이터는 Base64 Encoding 형태로 저장됩니다.

중요:

Base64는 암호화가 아니라 Encoding 방식입니다.

따라서 추가적인 보안 설정이 필요합니다.

Kubernetes Secret 생성 방법

직접 생성

예:

kubectl create secret generic db-secret \
--from-literal=password=my-password

Secret 생성:

Kubernetes 저장

Pod 사용 가능

Kubernetes Secret YAML 구조

예:

apiVersion: v1
kind: Secret
metadata:
  name: database-secret
type: Opaque
data:
  password: bXktcGFzc3dvcmQ=

주요 구성:

항목설명
metadataSecret 이름
typeSecret 종류
data저장 데이터

운영 환경에서는 YAML 파일 관리에도 주의해야 합니다.

Kubernetes Secret을 Environment Variable로 사용

Application에서 환경 변수로 사용할 수 있습니다.

예:

env:
- name: DB_PASSWORD
  valueFrom:
    secretKeyRef:
      name: database-secret
      key: password

Container 실행 시 Secret 값을 전달합니다.

Kubernetes Secret을 Volume으로 Mount

Secret은 파일 형태로 제공할 수도 있습니다.

구조:

Secret

Volume

Container 내부 파일

TLS Certificate 같은 데이터 관리에 활용됩니다.

Kubernetes TLS Secret 관리

HTTPS 서비스를 운영하려면 인증서 관리가 필요합니다.

구조:

TLS Certificate

Kubernetes Secret

Ingress Controller

HTTPS 서비스

예:

kubectl create secret tls tls-secret \
--cert=cert.crt \
--key=cert.key

웹 서비스 보안 운영에 사용됩니다.

Kubernetes Secret 암호화 저장

기본 Secret은 Base64 Encoding 상태입니다.

보안을 강화하려면 Encryption at Rest를 사용할 수 있습니다.

구조:

Secret

API Server

Encryption Provider

Encrypted Storage

Etcd 데이터 보호에 활용됩니다.

Kubernetes Secret과 RBAC 관계

Secret 접근 권한은 RBAC으로 관리합니다.

예:

개발자

Pod 조회 가능

하지만

Secret 조회 불가

운영자

Secret 관리 가능

민감 정보 접근을 제한할 수 있습니다.

Kubernetes Secret 운영 시 주의사항

Secret은 중요 데이터이므로 관리가 필요합니다.

항목방법
접근 제한RBAC 적용
암호화Encryption at Rest
백업 보호Secret Backup 관리
권한 검토정기 확인

Secret 관리가 잘못되면 전체 서비스 보안 문제가 발생할 수 있습니다.

Kubernetes Secret 장애 사례

문제원인
Application 실행 실패Secret Key 오류
인증 실패잘못된 Password
Permission DeniedRBAC 부족
TLS 오류Certificate 문제

Log와 Event 확인이 필요합니다.

Kubernetes Secret 확인 방법

Secret 목록:

kubectl get secrets

상세 확인:

kubectl describe secret secret-name

데이터 확인:

kubectl get secret secret-name -o yaml

운영 환경에서는 접근 권한을 확인해야 합니다.

Kubernetes Secret과 DevOps 관계

CI/CD 환경에서도 Secret 관리가 중요합니다.

구조:

CI/CD Pipeline

Secret Management

Kubernetes Deploy

Application 실행

Git Repository에 Password를 저장하지 않는 것이 중요합니다.

Kubernetes Secret 외부 관리 방식

대규모 환경에서는 외부 Secret Manager를 사용하기도 합니다.

예:

Cloud Secret Manager

CSI Driver

Kubernetes Pod

대표:

  • AWS Secrets Manager
  • HashiCorp Vault

Enterprise 환경에서 많이 사용됩니다.

Kubernetes Secret 장점

장점설명
정보 분리Code와 Secret 분리
접근 제어RBAC 관리
자동 연결Pod 사용 가능
보안 강화암호화 지원

Secret은 Kubernetes 보안 운영의 핵심 기능입니다.

자주 묻는 질문

Kubernetes Secret은 암호화되어 저장되나요?

기본적으로 Base64 Encoding이며 별도의 Encryption 설정이 필요합니다.

ConfigMap에 비밀번호를 저장하면 안 되나요?

가능하지만 보안 목적의 데이터는 Secret 사용이 권장됩니다.

Secret을 Git에 저장해도 되나요?

민감 정보가 포함된 Secret 파일은 직접 저장하지 않는 것이 좋습니다.

마무리

Kubernetes Secret은 Database Password, API Token, TLS Certificate 같은 민감 정보를 안전하게 관리하기 위한 Kubernetes Resource입니다.

구성 요소역할
Secret민감 정보 저장
ConfigMap일반 설정 관리
RBAC접근 권한 제어
Encryption데이터 보호

Secret 구조를 이해하면 Kubernetes 환경에서 Application 인증 정보와 보안 데이터를 안전하게 관리할 수 있습니다.

다음 글에서는 Kubernetes 서비스 접근 보안을 다루는 Kubernetes ServiceAccount 완벽 가이드! Application 인증과 API 접근 권한 관리 구조 이해하기를 알아보겠습니다.

댓글 남기기