설명
EC2 인스턴스의 user_data, 스크립트, 파일 또는 환경 변수에 AWS 액세스 키와 시크릿 키를 직접 넣으면 코드 저장소, 로그나 이미지에서 노출될 수 있습니다. 인스턴스 프로파일을 통한 IAM 역할을 사용하면 장기 키를 직접 배포하지 않고 필요한 AWS 권한을 제공할 수 있습니다.
잠재적 영향
- 노출된 장기 키가 다른 환경에서 재사용될 수 있습니다.
- 여러 인스턴스에 복사한 키는 교체와 사용처 파악이 어려워질 수 있습니다.
해결 방법
iam_instance_profile로 필요한 권한만 가진 IAM 역할을 연결하고 애플리케이션이 역할의 임시 자격 증명을 사용하도록 전환하세요. 배포한 장기 키의 사용처를 확인해 교체하고, 노출된 키는 비활성화하거나 삭제하세요. 코드에서 키를 지우는 것만으로 발급된 키가 폐기되지는 않습니다.
예시
자격 증명 공급 방식만 비교하는 예시입니다. 첫 번째 키 문자열은 실제 키가 아닌 자리표시자입니다. AMI는 대상 리전과 운영체제에 맞게 선택하고 인스턴스 프로파일, 역할 신뢰 및 권한 정책은 별도로 구성하세요.
변경 전
hcl
resource "aws_instance" "example" {
ami = "ami-005e54dee72cc1d00"
instance_type = "t2.micro"
user_data = <<EOF
#!/bin/bash
apt-get install -y awscli
export AWS_ACCESS_KEY_ID=your_access_key_id_here
export AWS_SECRET_ACCESS_KEY=your_secret_access_key_here
EOF
}
변경 후
hcl
resource "aws_instance" "example" {
ami = "ami-005e54dee72cc1d00"
instance_type = "t2.micro"
iam_instance_profile = aws_iam_instance_profile.test_profile.name
}
변경 후에는 장기 키를 사용자 데이터에 넣지 않고 인스턴스 프로파일을 연결합니다. 실제 권한 범위는 연결한 역할의 정책과 다른 접근 제어에 따라 결정됩니다.