설명
Lambda 환경 변수에 장기 AWS 자격 증명을 직접 넣으면 템플릿, 배포 이력이나 함수 설정을 볼 수 있는 경로를 통해 노출될 수 있습니다. 값의 모양만으로 유효한 키라고 단정하지 말고 실제 비밀정보인지 확인하세요. AWS API 접근에는 보통 실행 역할의 임시 자격 증명을 사용할 수 있습니다.
잠재적 영향
실제 접근 키 ID와 비밀 키가 함께 유출되면 해당 키에 허용된 작업이 악용될 수 있습니다. 영향은 연결된 정책과 다른 접근 제어에 따라 달라집니다.
해결 방법
- 실제 자격 증명을 제거하고 함수에 필요한 권한만 가진 실행 역할을 사용하세요. 다른 시스템의 비밀정보는 적절한 비밀정보 저장소에서 제한된 권한으로 가져오세요.
- 노출된 실제 키는 사용처를 대체한 뒤 폐기·교체하세요. 템플릿에서 지워도 저장소 이력이나 배포 기록의 사본이 사라지지는 않습니다.
예시
foo의 긴 문자열은 AWS 문서에 공개된 예시 비밀 키이며 실제 자격 증명이 아닙니다. 코드 버킷·객체와 역할 ARN은 실제 배포 값으로 제공하고, 코드가 지정한 런타임과 호환되는지 확인하세요.
변경 전
yaml
Parameters:
FunctionCodeBucket:
Type: String
FunctionCodeKey:
Type: String
ExecutionRoleArn:
Type: String
Resources:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.handler
Role: !Ref ExecutionRoleArn
Environment:
Variables:
foo: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
databaseName: lambdadb
databaseUser: admin
Code:
S3Bucket: !Ref FunctionCodeBucket
S3Key: !Ref FunctionCodeKey
Runtime: nodejs22.x
자격 증명 값을 구성에 직접 넣는 형태를 보여 줍니다. 예시 문자열을 실제 키로 교체하여 배포하지 마세요.
변경 후
yaml
Parameters:
FunctionCodeBucket:
Type: String
FunctionCodeKey:
Type: String
ExecutionRoleArn:
Type: String
Resources:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.handler
Role: !Ref ExecutionRoleArn
Environment:
Variables:
foo: test
databaseName: lambdadb
databaseUser: admin
Code:
S3Bucket: !Ref FunctionCodeBucket
S3Key: !Ref FunctionCodeKey
Runtime: nodejs22.x
일반 설정만 남깁니다. 실제 AWS 호출은 실행 역할을 사용하도록 코드도 확인하고 기존 키가 폐기되었는지 검증하세요.