설명
Lambda 함수의 리소스 기반 정책은 다른 계정이나 서비스가 그 함수에 접근할 수 있는 권한을 관리합니다. lambda:*처럼 넓은 작업 허용 대신 필요한 작업을 지정하고, 서비스 주체를 신뢰할 때는 해당 서비스의 실제 소스도 제한해야 합니다.
이 권한은 함수 코드가 실행 중 사용하는 실행 역할과 별개입니다. 함수 정책의 허용을 계정의 모든 Lambda 관리 권한으로 해석하면 안 됩니다.
잠재적 영향
- 필요하지 않은 함수 접근 권한이 부여되거나 의도하지 않은 이벤트 소스에서 호출될 수 있습니다.
- 불필요한 호출은 비용 증가나 함수가 처리하는 데이터·업무의 오용으로 이어질 수 있습니다.
해결 방법
- 일반적인 함수 호출에는 lambda:InvokeFunction처럼 필요한 작업만 허용하세요.
- principal을 필요한 주체로 제한하고 서비스에 맞는 source_arn과 source_account 조건을 검토하세요. S3 연동은 실제 버킷 ARN과 소유 계정을 제한하세요.
- 정상 이벤트 호출은 성공하고 승인되지 않은 소스는 거부되는지 확인하세요. 실행 역할의 권한도 별도로 최소화하세요.
예시
서로 다른 S3와 EventBridge 연동의 권한 발췌입니다. 참조 함수는 별도로 정의하고 EventBridge 규칙 ARN은 실제 값으로 바꾸세요. 이벤트 소스와 함수 대상 연결도 별도로 구성해야 합니다.
변경 전
hcl
resource "aws_lambda_permission" "allow_all" {
statement_id = "AllowAllResources"
action = "lambda:*"
function_name = aws_lambda_function.my_lambda.function_name
principal = "s3.amazonaws.com"
}
S3 서비스에 lambda:*를 허용하며 소스 버킷 제한은 없습니다. 실제 필요한 함수 호출 작업과 버킷·소유 계정으로 제한하세요.
변경 후
hcl
resource "aws_lambda_permission" "allow_cloudwatch" {
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.test_lambda.function_name
principal = "events.amazonaws.com"
source_arn = "arn:aws:events:eu-west-1:111122223333:rule/RunDaily"
}
지정한 EventBridge 규칙의 함수 호출만 허용하는 대안입니다. 기존 S3 연동을 이 구성으로 그대로 대체하는 예시는 아닙니다.