DevOps/AWS
ecs -> eks 전환 처리
계범
2025. 8. 20. 20:30
1. AWS SDK 버전업
EKS IRSA 방식의 AWS SDK V2 인증의 형태로 전환하려는 과정에서
기존 aws 1.점대의 sdk가 문제가 됨.
aws 2.점대로 버전 업 처리가 필요.
pem키의 포맷 이슈 발생.
aws 1.xx의 cloudfront 에서 제공하던 SignerUtils가 사라졌고
import com.amazonaws.services.cloudfront.util.SignerUtils;
그로 인해 키를 읽는 방법의 바뀜으로서 PKCS#1 포맷의 키를 못읽음.
해당 명령어로 키 포맷을 변경 후 해결.
openssl pkcs8 -topk8 \
-inform PEM \
-in private_key.pem \
-outform PEM \
-nocrypt \
-out private_key_pkcs8.pem
해당 키 양식이 자바가 기본적으로 읽는 포맷.
간단한 설명추가.
더보기
1. PKCS#1 (RSA 전용 키 포맷)
- 헤더:
-
-----BEGIN RSA PRIVATE KEY-----
- RSA 알고리즘 전용으로 정의된 구조 (ASN.1 RSAPrivateKey).
- 키 내부에는 n, e, d, p, q … (RSA 수학적 파라미터)만 들어있음.
- 표준은 오래되었고, 범용성이 떨어짐.
2. PKCS#8 (범용 PrivateKey 포맷)
- 헤더:
-
-----BEGIN PRIVATE KEY-----
- 어떤 알고리즘인지(RSA, EC, DSA …)와 그에 해당하는 키 데이터를 알고리즘 식별자 + PrivateKey 형태로 감싸둔 구조.
- 즉 RSA/EC/DSA 등 다양한 키를 공통된 포맷으로 표현 가능.
- 자바 JCA(KeyFactory 등)와 AWS SDK v2의 PemUtils 같은 도구들이 이 형식만 인식하도록 구현되어 있음.
3. 변환이 의미하는 것
- 키 자체의 수학적 값(n, d, p, q …)은 그대로입니다. (안 바뀜)
- 단지 저장/인코딩 방식(래핑 포맷) 만 바뀌는 거예요.
- PKCS#1 → PKCS#8 변환은:
- “RSA 전용 표현” → “범용 PrivateKey 표현”으로 포장하는 것.
- 그래서 자바에서 PKCS8EncodedKeySpec 으로 읽을 수 있게 됨.
4. 왜 꼭 필요할까?
- 자바 기본 KeyFactory 는 PKCS#8만 읽습니다. PKCS#1을 주면 InvalidKeySpecException 터짐.
- AWS SDK v2도 내부적으로 PKCS#8로 파싱하기 때문에 PKCS#1 키를 넣으면 실패합니다.
- 반대로 OpenSSL, 일부 구버전 유틸은 PKCS#1도 지원.
kms 2버전 코드 변경 필요
build기반으로 변경 필요
환경변수 주입 방법 변경 필요
ECS와 EKS에서 환경변수 처리 방식이 달라짐.
ECS
// ECS Task Definition
{
"environment": [
{
"name": "APP_ATTACHFILE_DIR",
"value": "my-bucket"
}
]
}
- ecs는 환경변수를 JVM 시스템 프로퍼티로도 자동 변환
- 그로 인해 System.getProperty()를 통해 불러오는 것도 작동함
- 컨테이너 런타임이 환경변수를 시스템 프로퍼티로 매핑
EKS
# Kubernetes Deployment
spec:
containers:
- env:
- name: APP_ATTACHFILE_DIR
value: "my-bucket"
- kubernetes는 환경변수를 OS 환경변수로만 설정
- System.getenv()는 동작하지만, System.getProperty()는 null을 반환
- JVM 시스템 프로퍼티로 자동 변환되지 않음.
System.getProperty()를 쓰는 경우, getEnv 또는 @Value 형태로 변경 필요