사용자 데이터의 인코딩된 키 자료 점검

사용자 데이터에 실제 개인 키가 포함되어 있는지 확인하세요. Base64 인코딩은 비밀정보를 보호하지 않습니다.

설명

EC2 사용자 데이터에 개인 키를 넣으면 해당 데이터에 접근할 수 있는 사용자나 소프트웨어가 키를 읽을 수 있습니다. Base64는 인코딩 형식이며 암호화가 아닙니다. PEM 형식의 내용이 개인 키인지, 공개 키나 인증서인지 먼저 구분하세요.

잠재적 영향

실제 사용 중인 개인 키가 노출되면 용도와 보호 상태에 따라 인증이나 서명에 악용될 수 있습니다. 공개 인증서나 예시 문자열을 실제 개인 키 유출로 취급해서는 안 됩니다.

해결 방법

비밀정보를 사용자 데이터에서 제거하고 AWS Secrets Manager 같은 전용 저장소에서 필요한 권한만 가진 인스턴스 역할로 가져오세요. 이미 노출된 키는 폐기 또는 교체하고 사용하는 구성요소도 갱신하세요. 기존 시작 구성이나 템플릿 버전, 인스턴스에 남은 사본도 확인하세요.

예시

새 구성에는 EC2 시작 템플릿을 사용하세요. ami_id와 security_group_ids에는 실제 리소스를 지정하고 default 키 페어가 있는지 확인하세요. 이 모듈의 user_data는 Base64로 인코딩된 값을 받습니다.

변경 전

yaml
- name: launch template with illustrative encoded key material
  amazon.aws.ec2_launch_template:
    name: special
    image_id: "{{ ami_id }}"
    key_name: default
    security_group_ids: "{{ security_group_ids }}"
    instance_type: t3.micro
    user_data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpzb21lS2V5

예시 값은 -----BEGIN RSA PRIVATE KEY-----와 someKey를 인코딩한 것으로, 완전한 개인 키가 아닙니다. 실제 키를 이런 방식으로 넣지 마세요.

변경 후

yaml
- name: launch template without embedded private key
  amazon.aws.ec2_launch_template:
    name: special
    image_id: "{{ ami_id }}"
    key_name: default
    security_group_ids: "{{ security_group_ids }}"
    instance_type: t3.micro
    user_data: IyEvYmluL3NoCmV4aXQgMAo=

변경된 값은 #!/bin/sh 다음 줄에 exit 0을 실행하는 빈 초기화 스크립트입니다. 비밀정보를 담지 않으며, 애플리케이션의 비밀정보 조회 코드는 별도로 구성해야 합니다.

참조