AWS에서 규정 준수 확인을 위한 Prowler 자동화
22792 단어 securitycloudformationcloudaws
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에서 확인할 수 있습니다.
Reference
이 문제에 관하여(AWS에서 규정 준수 확인을 위한 Prowler 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/automating-prowler-for-compliance-checking-in-aws-3oef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)