AWS에서 규정 준수 확인을 위한 Prowler 자동화

AWS 보안 상태를 개선하거나 사이버 보안 프레임워크에 대한 규정 준수를 확인하려는 경우 ProwlerToni de la Fuente에서 개발한 놀라운 오픈 소스 도구입니다. Toni는 S3 버커가 공개적으로 액세스할 수 없도록 하는 것부터 모든 곳에서 암호화에 이르기까지 AWS에서 200개 이상의 보안 제어를 확인하는 도구를 만들었습니다.

Toni의 Github 포털은 도구 사용 방법에 대한 광범위한 문서를 제공하지만 저는 규정 준수 검사를 실행한 다음 스택을 폐기하고 모든 리소스를 제거하기 위해 AWS에서 배포를 자동화하기 위해 생성한 CloudFormation 템플릿을 공유하고 싶었습니다.

Prowler용 EC2 인스턴스 시작



먼저 EC2 인스턴스를 시작하고 bash 스크립트를 실행하여 필요한 소프트웨어를 다운로드하고 Prowler를 설치 및 구성합니다.

  ProwlerInstance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: !Ref ImageId
      InstanceType: !Ref InstanceType
      SubnetId: !Ref SubnetId
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup
      KeyName: !Ref KeyName
      IamInstanceProfile: !Ref ProwlerInstanceProfile
      Tags:
        -
          Key: Name
          Value: Prowler
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            VolumeSize: 8
            Encrypted: true
# Run bash to install and configure Prowler
      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe
            sudo yum update -y
            sudo yum remove -y awscli
            cd /home/ec2-user
            curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/home/ec2-user/awscliv2.zip"
            unzip /home/ec2-user/awscliv2.zip
            sudo /home/ec2-user/aws/install
            sudo yum install -y python3 jq git
            sudo pip3 install detect-secrets==1.0.3
            git clone https://github.com/prowler-cloud/prowler /home/ec2-user/prowler
            chown -R ec2-user:ec2-user /home/ec2-user/prowler


인스턴스 프로필 생성



감사를 실행하는 데 필요한 권한이 있는 역할에 연결된 인스턴스 프로파일을 생성합니다.

  ProwlerInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      InstanceProfileName: prowler-ec2-instance-profile
      Path: /
      Roles:
       - !Ref ProwlerEc2InstanceRole


Prowler를 실행할 수 있는 액세스 권한 제공



다음으로 Prowler가 규정 준수 검사를 실행하는 데 필요한 보기 전용 및 보안 감사 권한이 있는 역할을 생성하려고 합니다.

  ProwlerEc2InstanceRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: prowler-ec2-instance-role
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/SecurityAudit
        - arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
      Path: /


보안 그룹



EC2 인스턴스에 대한 SSH 액세스만 허용하도록 보안 그룹을 생성하려고 합니다.

  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupDescription: Allow ssh from specific host
        GroupName: ProwlerSecurityGroup
        VpcId: !Ref VpcId
        SecurityGroupIngress:
          - IpProtocol: 'tcp'
            FromPort: '22'
            ToPort: '22'
            CidrIp: !Ref CidrIp


매개변수



마지막으로 자동화를 개선하기 위해 파라미터를 CloudFormation 템플릿에 전달합니다. 콘솔을 통해 템플릿을 시작하면 이러한 설정 중 일부가 드롭다운을 통해 선택됩니다. 명령줄 인터페이스를 통해 시작하려면 JSON 파일을 통해 매개변수를 전달합니다.

ImageId: 기본값은 AWS Linux 2 ami-0e1d30f2c40c4c701입니다.
InstanceType: 기본값은 t3.micro입니다.
VpcId : EC2 인스턴스를 시작할 VPC
SubnetId : EC2 인스턴스의 서브넷
KeyName : 사용할 Keypair
CidrIp : SSH x.x.x.x/x에 대한 CIDR 범위

Parameters:
  ImageId:
    Type: String
    Description: AMI - Linux 2
    Default: 'ami-0e1d30f2c40c4c701'
  InstanceType:
    Type: String
    Description: Instance type to be used - t3.micro default
    Default: t3.micro
  VpcId:
    Type: AWS::EC2::VPC::Id
    Description: VPC to be used
  SubnetId:
    Type: AWS::EC2::Subnet::Id
    Description: Subnet to be used
  KeyName:
    Type: AWS::EC2::KeyPair::KeyName
    Description: Keyname
  CidrIp:
    Type: String
    Description: CidrIp to be used to connect from x.x.x.x/x
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: "Network Configuration"
        Parameters:
          - ImageId
          - InstanceType
          - VpcId
          - SubnetId
          - KeyName
          - CidrIp


최종 YAML 스크립트



이 모든 것을 합친 후에. 최종 YAML 스크립트는 다음과 같습니다. 이 코드는 Github에서도 사용할 수 있습니다.

AWSTemplateFormatVersion: "2010-09-09"
Description: "Create EC2 instanace with Prowler pre-configured and tied to roles to run"
# Template Parameters
# ImageId : Default is AWS Linux 2 ami-0e1d30f2c40c4c701
# InstanceType : Default is t3.micro
# VpcId : VPC to launch in
# SubnetId : Subnet to connect
# KeyName : Keypair to use
# CidrIp : CIDR range for SSH x.x.x.x/x
Resources:
# Create Prowler Instance - Parameters for ImageId, InstanceType, SubnetId, SecurityGroupIds, and KeyName
  ProwlerInstance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: !Ref ImageId
      InstanceType: !Ref InstanceType
      SubnetId: !Ref SubnetId
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup
      KeyName: !Ref KeyName
      IamInstanceProfile: !Ref ProwlerInstanceProfile
      Tags:
        -
          Key: Name
          Value: Prowler
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            VolumeSize: 8
            Encrypted: true
# Run bash to install and configure Prowler
      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe
            sudo yum update -y
            sudo yum remove -y awscli
            cd /home/ec2-user
            curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/home/ec2-user/awscliv2.zip"
            unzip /home/ec2-user/awscliv2.zip
            sudo /home/ec2-user/aws/install
            sudo yum install -y python3 jq git
            sudo pip3 install detect-secrets==1.0.3
            git clone https://github.com/prowler-cloud/prowler /home/ec2-user/prowler
            chown -R ec2-user:ec2-user /home/ec2-user/prowler
  ProwlerInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      InstanceProfileName: prowler-ec2-instance-profile
      Path: /
      Roles:
       - !Ref ProwlerEc2InstanceRole
# Create Security Group
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupDescription: Allow ssh from specific host
        GroupName: ProwlerSecurityGroup
        VpcId: !Ref VpcId
        SecurityGroupIngress:
          - IpProtocol: 'tcp'
            FromPort: '22'
            ToPort: '22'
            CidrIp: !Ref CidrIp
# Create EC2 Instance Role to run security checks and attach to instance
  ProwlerEc2InstanceRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: prowler-ec2-instance-role
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/SecurityAudit
        - arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
      Path: /
# Parameters for cloudformation template with some defaults
Parameters:
  ImageId:
    Type: String
    Description: AMI - Linux 2
    Default: 'ami-0e1d30f2c40c4c701'
  InstanceType:
    Type: String
    Description: Instance type to be used - t3.micro default
    Default: t3.micro
  VpcId:
    Type: AWS::EC2::VPC::Id
    Description: VPC to be used
  SubnetId:
    Type: AWS::EC2::Subnet::Id
    Description: Subnet to be used
  KeyName:
    Type: AWS::EC2::KeyPair::KeyName
    Description: Keyname
  CidrIp:
    Type: String
    Description: CidrIp to be used to connect from x.x.x.x/x
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: "Network Configuration"
        Parameters:
          - ImageId
          - InstanceType
          - VpcId
          - SubnetId
          - KeyName
          - CidrIp
Conditions: {}


러닝 프라울러



CloudFormation 템플릿을 시작한 후 EC2 인스턴스에 로그인하고/home/ec2-user/prowler 디렉터리로 변경하기만 하면 됩니다.

시작하려면 HTML 출력 파일 옵션으로 Prowler를 실행하는 것이 좋습니다. 이는 모든 결과를 검토할 수 있는 동적 HTML 파일을 제공합니다.

./prowler -M html


csv 및 json과 같은 여러 형식으로 한 번에 직접 출력을 실행할 수 있습니다.

./prowler -M csv,json,html


리소스 폐기



Prowler를 실행한 후 검토 및 기록 보관을 위해 출력 파일을 다른 시스템 또는 S3에 복사합니다. CloudFormation으로 돌아가 스택을 삭제하여 생성된 모든 리소스를 제거합니다.

다음 단계



Prowler는 AWS Security Hub에서도 지원되므로 결과를 Security Hub로 직접 보낼 수 있습니다. Prowler 데이터에서 Quicksight의 보안 대시보드를 구축할 수 있는 워크샵도 있습니다. 이 통합에 대한 자세한 내용은 Building Prowler into a QuickSight powered AWS Security Dashboard에서 확인할 수 있습니다.

좋은 웹페이지 즐겨찾기