설명
lambda:UpdateFunctionCode를 넓게 허용하면 기존 Lambda 함수 코드를 임의로 바꿀 수 있습니다. 변경된 코드가 실행될 때 함수의 실행 역할 권한으로 데이터에 접근하거나 AWS 작업을 수행할 수 있으므로 간접적인 권한 상승 경로가 될 수 있습니다.
코드 수정 권한 자체가 함수 호출 권한을 부여하지는 않습니다. 실제 실행 경로와 사용 중인 버전·별칭, 실행 역할의 권한을 함께 확인해야 합니다.
잠재적 영향
- 변경된 코드가 실행되면 실행 역할이 접근할 수 있는 데이터가 노출되거나 변경될 수 있습니다.
- 정상 기능을 변조하거나 서비스 동작을 중단시킬 수 있습니다.
해결 방법
- 필요하지 않은 역할에서
lambda:UpdateFunctionCode를 제거하고 승인된 CI/CD 역할과 대상 함수 ARN으로 제한하세요. - 실행 역할을 최소 권한으로 유지하고 중요한 코드 배포에는 검토·승인을 적용하세요.
- 함수 코드 변경을 모니터링하고 실제 실행되는 버전과 별칭이 승인된 배포를 가리키는지 확인하세요.
예시
역할 권한의 발췌입니다. 생략된 필수 assume_role_policy는 승인된 주체만 신뢰하도록 별도로 구성하세요.
변경 전
hcl
resource "aws_iam_role" "example" {
name = "cosmic"
}
resource "aws_iam_role_policy" "example" {
name = "test_inline_policy"
role = aws_iam_role.example.name
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"lambda:UpdateFunctionCode",
]
Effect = "Allow"
Resource = "*"
},
]
})
}
변경 후
hcl
resource "aws_iam_role" "example" {
name = "cosmic"
}
resource "aws_iam_role_policy" "example" {
name = "inline_policy_run_instances"
role = aws_iam_role.example.name
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"ec2:Describe*",
]
Effect = "Allow"
Resource = "*"
},
]
})
}
설명:
- 변경 전: 함수 범위를 제한하지 않고 코드 변경을 허용합니다. 변경된 코드의 실제 실행과 실행 역할 권한에 따라 피해가 달라집니다.
- 변경 후: 같은 역할의 예시 정책을 EC2 조회로 제한합니다. 다른 정책의 코드 변경 권한도 제거하고
ec2:Describe*는 필요한 조회만 허용하세요.