권한이 과도할 수 있는 Lambda 실행 역할

Lambda 실행 역할의 실제 권한을 함수의 작업과 필요한 리소스로 제한하세요.

설명

Lambda 실행 역할에 과도한 권한이 있으면 함수 코드의 취약점이나 오작동이 더 많은 AWS 리소스에 영향을 줄 수 있습니다. 역할 이름이나 정책 이름이 아니라 연결된 정책, 조건과 다른 접근 제어를 확인하세요. 와일드카드가 포함되어도 특정 서비스나 작업 범위로 제한될 수 있으므로 실제 허용 범위를 검토해야 합니다.

잠재적 영향

함수가 침해되면 실행 역할이 실제로 허용하는 데이터 조회·변경·삭제 등의 작업이 악용될 수 있습니다. 필요한 범위를 넘는 권한은 피해 범위를 키울 수 있습니다.

해결 방법

  • 함수가 호출하는 API와 리소스를 확인하고 실행 역할을 최소 권한으로 제한하세요. 공용 역할에 다른 함수의 권한이 불필요하게 누적되지 않도록 하세요.
  • 필요한 로그·서비스 접근을 유지하면서 불필요한 권한을 제거하고 정상 호출과 승인하지 않은 접근의 거부를 시험하세요.

예시

고정된 응답을 반환하는 최소 함수와 그 실행 역할을 함께 정의합니다. 실제 코드에는 호환되는 런타임과 해당 코드에 필요한 권한을 선택해야 합니다.

변경 전

yaml
Resources:
  AppendItemToListFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: nodejs22.x
      Code:
        ZipFile: |
          exports.handler = async () => ({ statusCode: 200, body: "ok" });

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: AdminPolicy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action: "*"
                Resource: "*"

실행 역할에 전체 작업·리소스 허용을 부여합니다. 단순 응답 함수의 필요보다 매우 넓습니다.

변경 후

yaml
Resources:
  AppendItemToListFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: nodejs22.x
      Code:
        ZipFile: |
          exports.handler = async () => ({ statusCode: 200, body: "ok" });

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: LimitedPolicy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - logs:CreateLogGroup
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                Resource: "*"

이 정책은 로그 관련 작업만 허용합니다. 로그 리소스 범위도 실제 로그 그룹으로 제한하는 방안을 검토하고, 함수가 다른 AWS API를 사용한다면 필요한 권한만 별도로 추가하세요.

참조