시작 구성 사용자 데이터의 Base64 개인 키 점검

Base64로 인코딩해도 개인 키는 비밀로 보호되지 않습니다. EC2 사용자 데이터에서 실제 개인 키를 제거하세요.

설명

user_data_base64에 개인 키를 넣으면 코드, Terraform 상태나 인스턴스 사용자 데이터에 비밀 값이 남을 수 있습니다. Base64는 암호화가 아닌 인코딩이므로 내용을 읽을 수 있는 사람은 원래 값을 복원할 수 있습니다.

유출된 개인 키가 인증이나 서명에 유효하다면 이를 신뢰하는 시스템에서 악용될 수 있습니다. 공개 인증서와 개인 키는 구분해야 하며, 모든 인증서가 비밀정보인 것은 아닙니다.

잠재적 영향

  • 실제 개인 키가 유출되면 그 키에 연결된 인증 또는 서명 권한이 악용될 수 있습니다.
  • 여러 시스템에서 같은 키를 사용하면 영향을 받는 서비스가 늘어날 수 있습니다.
  • 코드와 배포 자료에 복제된 키는 교체와 회수가 어렵습니다.

해결 방법

  • 사용자 데이터에서 개인 키를 제거하고 Secrets Manager 또는 Parameter Store의 SecureString 같은 비밀 관리 경로를 사용하세요. 워크로드에는 필요한 비밀 값의 조회 권한만 부여하세요.
  • 실제로 노출된 키는 사용처를 확인해 교체하고 이전 키에 대한 신뢰나 인증 권한을 폐기하세요.
  • 시작 구성은 직접 수정할 수 없으므로 대체 구성을 준비하고 인스턴스 교체를 계획하세요. 신규 구성은 시작 템플릿 사용을 우선 검토하세요.

예시

기존 시작 구성의 부분 예제입니다. AMI 조회 설정과 인스턴스 요구사항은 별도로 준비해야 합니다.

변경 전

hcl
resource "aws_launch_configuration" "app_launch_config" {
  image_id         = data.aws_ami.ubuntu.id
  instance_type    = "m4.large"
  user_data_base64 = "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpzb21lS2V5"
}

이 값은 개인 키 시작 표시와 someKey로 복원되는 설명용 문자열이며, 완전한 유효 개인 키는 아닙니다. 실제 개인 키를 같은 방식으로 인코딩해도 비밀 값이 보호되지는 않습니다.

변경 후

hcl
resource "aws_launch_configuration" "app_launch_config" {
  image_id      = data.aws_ami.ubuntu.id
  instance_type = "m4.large"
}

user_data_base64 전체를 제거합니다. 초기화 정보가 따로 남는 예제가 아니므로 필요한 부트스트랩 작업은 비밀 값을 포함하지 않는 방식으로 별도 구성하세요.

참조