lambda:UpdateFunctionCode로 권한 상승이 가능한 IAM 역할

Lambda 코드 수정 권한을 승인된 배포 역할과 함수로 제한하세요.

설명

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*는 필요한 조회만 허용하세요.

참조