[AWS][트러블슈팅] EKS 환경에서 쿠버네티스 시크릿으로 비밀키 관리하기

2025. 9. 13. 18:28·AWS

1. 문제 상황

현재 EKS로 배포하고자 하는 서비스가 API Gateway를 통해 공개키 인증이 필요하도록 구현하였다.

 

ECR로 push하는 도커 이미지에는 비밀키에 대한 정보를 갖고있어야하는데,

만약 이미지를 탈취당하거나 노출될 경우, 경우 비밀키가 공개될 수 있는 보안 취약점이 존재한다.

 

또한 이미지 레이어 캐싱 구조상, 한번 포함되면 완전히 제거하기 어렵기 때문에 한번이라도 비밀키값이 포함되지않도록 유의해야한다.

 

따라서 도커 이미지가 실행될 때 비밀키를 사용할 수 있어야하지만, 비밀키 내용이 직접 이미지에 포함되지 않는 방법을 찾아야만 했다.

기존 spring boot로 실행할때는 key path를 인자로 넣어 key 값을 참조할 수 있도록 하였다.

 

2. 해결방법

사용하는 키값으로 시크릿을 생성하여, 쿠버네티스 Deplopyment에서 참조하도록 하였다.

 

쿠버네티스 시크릿(Secret)이란?

쿠버네티스의 Secret은 비밀번호, API 토큰, 인증서 키처럼 민감한 데이터를 안전하게 저장하고 Pod에 전달하기 위한 리소스이다.

  • 기본적으로 key-value 구조로 저장되며, etcd에 Base64로 인코딩되어 보관된다.
  • Pod 내부에서는 환경변수 또는 볼륨 마운트된 파일 형태로 접근할 수 있다.
  • ConfigMap과 비슷하지만, 보안 민감 데이터를 다루는 경우 Secret을 사용하는 게 권장된다.

2.1 시크릿 생성

키 값들이 존재하는 로컬 위치에서,

다음 명령어를 통해 jwt-keys 라는 이름의 시크릿을 원하는 네임스페이스에 생성한다.

kubectl create secret generic jwt-keys \
  --from-file=private_pkcs8.pem=./private_pkcs8.pem \
  --from-file=public.pem=./public.pem \
  -n [네임스페이스]

이렇게 하면 jwt-keys 라는 시크릿이 만들어지고,

실제 쿠버네티스 내부에는 key-value 형태로 파일 내용이 Base64 인코딩되어 저장된다.

2.2 volumes, volumeMounts 선언

pod와 container는 볼륨을 갖는데, jwt-keys라는 외부 데이터와 연결해서 사용할 수 있도록

Deployment에서 지정해주는 과정이 필요하다.

 

먼저 Pod 레벨의 volumes 정의이다.

volumes:
  - name: jwt-keys
    secret:
      secretName: jwt-keys
  •  jwt-keys라는 Secert에서 가져온 데이터로 "jwt-keys"라는 볼륨을 선언한다.

 

다음은 Container 레벨의 volumeMounts 정의이다.

volumeMounts:
  - name: jwt-keys
    mountPath: /etc/jwt
    readOnly: true
  • Pod에 정의된 jwt-keys 볼륨을 컨테이너에서는 /etc/jwt에 붙인다는 선언이다.
  • 이를 통해 컨테이너 내부에서는 /etc/jwt/private_pkcs8.pem, /etc/jwt/public.pem 파일이 자동 생성된다.
  • 이때 key값들은 읽기 전용으로 생성된다.

2.3 환경변수로 지정

위 과정을 통해 키 값들이 /etc/jwt 위치에 마운트되었다.

 

애플리케이션이 실행할 때 키의 위치를 참조하려면 path를 알려줘야하는데,

이를 위해 환경변수 값으로 넣어준다.

 

이를 통해, 애플리케이션은 실행할 때 필요한 키값의 위치를 /etc/jwt에서 찾을 수 있다.

env:
- name: JWT_PRIVATE_KEY_PATH
  value: /etc/jwt/private_pkcs8.pem
- name: JWT_PUBLIC_KEY_PATH
  value: /etc/jwt/public.pem

 

위의 시크릿, 볼륨, 볼륨마운트, 환경변수 참조를 그림으로 그려보면 아래와 같다.

 

Deployment.yaml의 코드이다!

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-deployment
  namespace: production
  labels:
    app: auth
spec:
  template:
    spec:
      volumes:               # Pod 레벨 선언
        - name: jwt-keys
          secret:
            secretName: jwt-keys
      containers:            # Container 레벨 선언
      - name: auth-service
        volumeMounts:
        - name: jwt-keys
          mountPath: /etc/jwt
          readOnly: true
        env:
        - name: JWT_PRIVATE_KEY_PATH
          value: /etc/jwt/private_pkcs8.pem
        - name: JWT_PUBLIC_KEY_PATH
          value: /etc/jwt/public.pem

 

쿠버네티스 시크릿을 생성하고 이를 container에 볼륨 마운트하는 과정을 통해,

비밀키를 Docker 이미지에 직접 포함하지 않고도 안전하게 비밀키 값을 참조할 수 있게되었다.

'AWS' 카테고리의 다른 글

[AWS][트러블슈팅] ECR 이미지 업데이트 문제 해결 (latest 태그, Rolling 업데이트)  (0) 2025.09.10
[AWS][트러블슈팅] EKS kubectl 에러, Error from server (Forbidden): nodes is forbidden  (0) 2025.09.07
[SpringBoot][트러블슈팅] com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed 보안 오류  (0) 2025.09.03
[AWS] 과금 폭탄 $1500 찍힌 썰 (ECS, CloudWatch Log)  (0) 2025.09.03
[AWS][트러블슈팅] CloudFront Access Denied 에러 (This XML file does not appear to have any style information associated with it.)  (0) 2025.08.25
'AWS' 카테고리의 다른 글
  • [AWS][트러블슈팅] ECR 이미지 업데이트 문제 해결 (latest 태그, Rolling 업데이트)
  • [AWS][트러블슈팅] EKS kubectl 에러, Error from server (Forbidden): nodes is forbidden
  • [SpringBoot][트러블슈팅] com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed 보안 오류
  • [AWS] 과금 폭탄 $1500 찍힌 썰 (ECS, CloudWatch Log)
공부하는 나무꾼
공부하는 나무꾼
  • 공부하는 나무꾼
    헤맨 만큼 내 땅이다
    공부하는 나무꾼
  • 전체
    오늘
    어제
  • 글쓰기/관리
    • 분류 전체보기
      • AWS
      • SAA-C03
      • 네트워크 보안
      • 최신정보보안이론
      • 컴퓨터네트워크
      • OpenFaaS
      • C++
      • Java
      • HTML, CSS
      • 자료구조
      • 알고리즘
      • 정보보안인재양성
      • [MAC]트러블슈팅&Tip
      • 공부
      • Web(Django)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    cloud
    자격증
    aws-c03
    Web Server
    웹애플리케이션서버
    등록번호
    웹클라이언트
    SAA-C03
    AWS
    java #자바 #객체지향프로그래밍 #복습
    WAS
    클라우드
    web application server
    웹서버
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
공부하는 나무꾼
[AWS][트러블슈팅] EKS 환경에서 쿠버네티스 시크릿으로 비밀키 관리하기
상단으로

티스토리툴바