설명
Ansible의 aws_access_key는 AWS 요청 인증에 사용하는 액세스 키 ID를 받는 필드이며 비밀 액세스 키를 넣는 곳이 아닙니다. 실제 비밀 키를 잘못 넣으면 인증에 실패할 수 있고, 플레이북이나 배포 기록에 비밀정보도 남습니다. 의심되는 값이 공개된 예시인지 실제 비밀정보인지 확인하세요.
Ansible의 배포 인증과 Lambda 실행 역할은 별개입니다. 작업의 role은 실행 중인 함수가 AWS 리소스에 접근할 때 사용할 역할을 지정하며, Ansible의 배포 요청을 인증하지는 않습니다.
잠재적 영향
- 실제 비밀 키와 필요한 다른 인증 정보가 함께 노출되면 해당 권한 범위에서 원치 않는 AWS 요청에 사용될 수 있습니다.
- 잘못된 인증 필드는 배포 실패를 일으킬 수 있습니다. 공유 키가 노출되었다면 이를 사용하는 다른 작업도 조사하고 수정해야 합니다.
해결 방법
- 실제 자격 증명을 플레이북에 직접 넣지 말고 모듈 실행 환경에서 지원하는 임시 자격 증명이나 외부 인증 설정을 사용하세요.
- Lambda 함수에는 필요한 권한을 가진 실행 역할을 지정하고, 배포 주체의 권한과 함수 실행 역할의 권한을 각각 최소화하세요.
- 유효한 키가 노출되었다면 신속히 비활성화하거나 폐기하고 교체하세요. 저장소 이력, 배포 기록과 접근 로그를 조사하고 의존 작업을 수정한 뒤 정상 배포와 함수 동작을 확인하세요.
예시
키 문자열은 AWS 문서의 공개 예시이며 실제 자격 증명이 아닙니다. lambda_functions에는 name과 zip_file이 있는 항목 목록을 제공하고, 코드에 맞는 지원 런타임을 lambda_runtime으로 지정하세요. 실행 역할 ARN과 배포 파일은 별도로 준비해야 합니다.
변경 전
yaml
- name: looped creation
amazon.aws.lambda:
aws_access_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
name: "{{ item.name }}"
state: present
zip_file: "{{ item.zip_file }}"
runtime: "{{ lambda_runtime }}"
role: "{{ lambda_execution_role_arn }}"
handler: "hello_python.my_handler"
loop: "{{ lambda_functions }}"
비밀 액세스 키 예시가 ID 필드에 잘못 들어 있습니다. 실제 키를 이런 방식으로 넣어서는 안 됩니다.
변경 후
yaml
- name: looped creation
amazon.aws.lambda:
name: "{{ item.name }}"
state: present
zip_file: "{{ item.zip_file }}"
runtime: "{{ lambda_runtime }}"
role: "{{ lambda_execution_role_arn }}"
handler: hello_python.my_handler
loop: "{{ lambda_functions }}"
자격 증명을 직접 넣지 않고 모듈 실행 환경에서 제공하도록 합니다. role은 함수의 실행 권한이므로 별도의 배포 인증도 준비하세요. 필드를 지우는 것만으로 이미 노출된 키가 폐기되지는 않습니다.