업데이트로 돌아가기
New releaseSep 10, 2026

aws-security-assessment-solution v3.0.0

Prowler를 사용하여 AWS 계정의 특정 시점 평가를 생성하는 데 도움을 주는 AWS 도구입니다.

공유

셀프 서비스 보안 평가 솔루션 (v2.0)

사이버 보안은 많은 CIO, CISO 및 그들의 고객에게 여전히 매우 중요한 주제이자 관심사입니다. 이러한 중요한 우려 사항을 해결하기 위해 AWS는 고객이 계정을 보호하는 데 도움이 되는 주요 서비스 세트를 개발했습니다. Amazon GuardDuty, AWS Security Hub, AWS ConfigAWS Well-Architected 리뷰는 고객이 AWS 계정에 대해 강력한 보안 태세를 유지하는 데 도움이 됩니다. 더 많은 조직이 클라우드에 배포함에 따라, 특히 빠르게 배포하고 아직 권장 AWS 서비스를 구현하지 않은 경우 클라우드 환경에 대한 신속한 보안 평가가 필요할 수 있습니다.

우리는 고객에게 보안 평가 보고서를 제공하기 위해 저렴하고, 배포하기 쉽고, 안전하며, 빠른 솔루션을 개발했습니다. 이러한 보고서는 오픈 소스 프로젝트인 Prowler를 사용하여 생성됩니다. Prowler는 AWS 모범 사례를 기반으로 특정 시점의 보안 평가를 수행하며 고객의 배포 환경에서 잠재적인 위험 영역을 신속하게 식별하는 데 도움이 될 수 있습니다. 이러한 평가를 지속적으로 수행하는 데 관심이 있다면 AWS는 Security Hub의 기초 보안 모범 사례 표준을 활성화할 것을 권장합니다. Prowler 평가 결과를 Security Hub와 통합하는 데 관심이 있다면 Prowler 문서의 지침을 따를 수 있습니다.

참고: Prowler는 AWS 소유 솔루션이 아닙니다. 고객은 이 솔루션을 실행하기 전에 Prowler를 독립적으로 검토해야 합니다. Prowler와 관련된 모든 종속성은 최신 상태로 유지해야 합니다. 이 솔루션은 pip 패키지 설치 프로그램에서 고정된 버전의 Prowler(현재 5.41.0)를 설치하므로 Prowler의 출력 형식 변경이 경고 없이 스캔을 중단시킬 수 없습니다. 최신 릴리스로 이동하려면 2-sat2-codebuild-prowler.yaml에서 pip3 install prowler== 줄을 편집하세요.

📕 더 자세한 단계별 지침은 SHIP 워크숍의 모듈 2를 방문하세요.

목차

개요

이 솔루션은 AWS CloudFormation으로 배포됩니다. 배포 시 Prowler 생성 보고서를 저장하기 위한 AWS CodeBuild 프로젝트와 Amazon S3 버킷이 생성됩니다. 그런 다음 AWS Lambda 함수가 AWS CodeBuild 프로젝트를 시작하는 데 사용됩니다.

파라미터(사용자 입력) 기본값은 단일 계정에서 기본 스캔을 실행합니다. 그러나 더 광범위한 스캔을 실행하거나 여러 계정을 스캔하기 위해 다른 파라미터를 선택할 수 있습니다. 배포 프로세스는 완료하는 데 5분 미만이 소요됩니다. 솔루션의 AWS CloudFormation 템플릿은 이 Github 리포지토리에서 검토용으로 제공됩니다.

템플릿이 배포되면 CodeBuild 프로젝트가 실행됩니다. 기본 평가는 완료하는 데 약 5분이 소요됩니다. 보안 평가 완료 시간은 리소스 수와 선택한 스캔 옵션에 따라 달라집니다. 평가가 끝나면 보고서는 생성된 S3 버킷으로 전달됩니다.

아키텍처 다이어그램

파라미터

SATv2는 CloudFormation 파라미터를 업데이트하여 사용자 지정할 수 있습니다. 이 섹션에서는 사용 가능한 옵션을 요약하고 자세한 정보가 있는 섹션에 대한 링크를 제공합니다.

파라미터설명추가 정보
ProwlerScanType수행할 스캔 유형을 지정합니다. 다른 ProwlerOptions를 지정하지 않고 full을 선택하면 전체 스캔이 수행됩니다. 특정 검사를 수행하려면 Full을 선택하고 ProwlerOptions에 -c 를 추가하세요.스캔 유형
MultiAccountScan조직의 모든 계정을 스캔하려면 이 값을 true로 설정하세요. 역할을 프로비저닝하기 위한 사전 필수 템플릿을 배포했거나 적절한 권한이 있는 다른 ProwlerRole을 지정해야 합니다.다중 계정 스캔
ReportingProwler 보고서를 단일 csv로 요약하려면 이 값을 true로 설정하세요. 여러 계정을 스캔할 때 유용합니다.보고 요약
EmailAddress평가 완료 시 이메일을 받으려면 주소를 지정하세요.알림
고급 파라미터
ConcurrentAccountScans다중 계정 스캔의 경우 동시에 스캔할 계정 수를 지정합니다. 계정이 많은 대규모 조직에 유용합니다. 3개 이상을 선택하면 CodeBuild 인스턴스 크기가 변경되며 추가 비용이 발생할 수 있습니다.
CodeBuildTimeoutCodeBuild 작업의 제한 시간을 설정합니다. 기본값은 300분(5시간)입니다.
MultiAccountListOverride스캔할 계정의 공백으로 구분된 목록을 지정합니다. 이 값을 비워 두면 조직의 모든 계정이 스캔됩니다. 특정 계정을 스캔하려면 위의 MultiAccountScan 파라미터를 true로 설정했는지 확인하세요. 위임된 ListAccount 액세스를 제공할 수 없는 경우 MultiAccountListOverride 파라미터를 제공할 수 있습니다.다중 계정 스캔
ProwlerOptionsProwler의 파라미터를 지정합니다. --role 및 ARN은 지정한 파라미터 끝에 자동으로 추가됩니다. 단일 검사를 지정하는 데에도 사용할 수 있습니다.전체 스캔
ProwlerRoleProwler가 스캔을 수행하기 위해 수임해야 하는 역할입니다. 다른 권한이 있는 자체 역할을 지정하려면 이 값을 변경하세요.

배포

이 프로젝트를 사용하여 AWS Organizations의 여러 계정 또는 단일 계정에서 Prowler를 실행할 수 있습니다. AWS CloudShell 또는 AWS 콘솔을 사용하는 지침을 제공합니다. 시작하려면 옵션을 선택하세요.

배포 유형AWS CloudShellAWS 콘솔
단일 계정링크링크
다중 계정링크링크

단일 계정 스캔

단일 계정에 대해 셀프 서비스 보안 평가 솔루션(SATv2)을 실행하려면 아래 지침을 따르세요. AWS CLI 또는 AWS 콘솔을 선택할 수 있습니다.

AWS CloudShell

단계 표시

솔루션 배포

  1. AWS 계정에 로그인합니다.

  2. 탐색 모음에서 AWS CloudShell을 선택합니다.

  3. CloudFormation 템플릿을 다운로드하려면 다음 명령을 입력합니다.

    wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml
    
  4. 템플릿을 스테이징할 S3 버킷을 생성하려면 다음 명령을 입력합니다. 템플릿은 51,200바이트보다 크므로 CloudFormation은 인라인으로 전달하는 대신 S3에 업로드해야 합니다.

    TEMPLATE_BUCKET=sat2-cfn-templates-$(aws sts get-caller-identity --query Account --output text)-$AWS_REGION
    aws s3 mb s3://$TEMPLATE_BUCKET --region $AWS_REGION
    
  5. CloudFormation 템플릿을 배포하려면 다음 명령을 입력합니다. --s3-bucket 옵션은 스택을 생성하기 전에 템플릿을 버킷에 업로드합니다.

    aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
    --stack-name sat2 \
    --capabilities CAPABILITY_NAMED_IAM \
    --s3-bucket $TEMPLATE_BUCKET
    
  6. 스택이 생성된 후 스테이징 버킷을 삭제할 수 있습니다. 이 버킷은 템플릿을 CloudFormation에 전달하는 데만 사용됩니다.

    aws s3 rb s3://$TEMPLATE_BUCKET --force
    

AWS 콘솔

단계 표시

솔루션 배포

  1. 2-sat2-codebuild-prowler.yaml CloudFormation 템플릿을 다운로드합니다.
  2. AWS CloudFormation 콘솔로 이동합니다.
  3. 탐색 창에서 스택을 선택합니다.
  4. 스택 생성을 선택합니다.
  5. 템플릿 지정에서 템플릿 파일 업로드를 선택합니다.
  6. 1단계에서 다운로드한 2-sat2-codebuild-prowler.yaml을 선택합니다.
  7. 다음을 선택합니다.
  8. 스택 이름에 sat2를 입력합니다.
  9. 다음을 선택합니다.
  10. 스택 옵션 구성 페이지에서 다음을 선택합니다.
  11. SAS 검토 페이지에서 AWS CloudFormation이 IAM 리소스를 생성할 수 있음을 인정합니다. 확인란을 선택하고 제출을 선택합니다.

다중 계정 스캔

셀프 서비스 보안 평가 솔루션(SAT)은 다중 계정 스캔도 지원합니다. 스캔을 수행하려는 각 계정에 사전 필수 역할을 배포해야 합니다. 여러 계정에 대해 SATv2를 실행하려면 아래 지침을 따르세요. AWS CLI 또는 AWS 콘솔을 선택할 수 있습니다.

이 지침은 스택 세트 작업을 위한 사전 요구 사항이 이미 있다고 가정합니다. 자세한 내용은 AWS CloudFormation 사용자 가이드를 방문하세요.

참고: StackSets는 관리 계정에는 적용되지 않습니다. 관리 계정을 평가하려면 1-sat2-member-role을 CloudFormation 스택으로 배포하세요.

AWS CloudShell

단계 표시

1단계: 사전 필수 역할 배포

  1. AWS 관리 계정에 로그인합니다.

  2. 탐색 모음에서 AWS CloudShell을 선택합니다.

  3. Prowler 스캔을 실행할 계정을 식별합니다. 고객은 일반적으로 보안 도구 계정 또는 감사 계정을 사용합니다. ProwlerAccountID 파라미터에 대한 계정 ID를 기록해 두세요.

  4. CloudFormation 템플릿을 다운로드하려면 다음 명령을 입력합니다.

    wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/1-sat2-member-roles.yaml
    
  5. CloudFormation StackSets를 통해 CloudFormation 템플릿을 배포합니다. 다음 파라미터를 업데이트합니다.

    • **<aws-account-id>**를 Prowler를 실행할 계정 ID로 바꿉니다.
    • **<region>**을 템플릿을 배포할 리전으로 바꿉니다.
    aws cloudformation create-stack-set --template-body file://1-sat2-member-roles.yaml \
    --stack-set-name sat2-member-roles \
    --permission-model SERVICE_MANAGED \
    --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \
    --capabilities CAPABILITY_NAMED_IAM \
    --parameters ParameterKey=ProwlerAccountID,ParameterValue=<aws-account-id> \
    --region <region>
    
  6. 다음 명령을 사용하여 조직의 각 계정에 대한 스택 인스턴스를 생성합니다. 특정 OU 또는 루트 OU를 대상으로 지정할 수 있습니다. 다음 파라미터를 업데이트합니다.

    • **<root-ou>**를 조직 루트 ID로 바꿉니다.
    • **<region>**을 템플릿을 배포할 리전으로 바꿉니다.
    aws cloudformation create-stack-instances --stack-set-name sat2-member-roles \
    --deployment-targets OrganizationalUnitIds='["<root-ou>"]' \
    --regions '["<region>"]' \
    --operation-preferences FailureTolerancePercentage=100,MaxConcurrentPercentage=100 \
    --region <region>
    
  7. Prowler 계정에 대해 위임된 관리자 또는 리소스 정책이 이미 존재하는지 확인합니다. 하나의 옵션만 필요하며 리소스 정책이 더 세분화되어 있으므로 권장됩니다.

    참고: 리소스 정책은 GovCloud에서 사용할 수 없으므로 위임된 관리자를 사용해야 합니다.

    7a. Prowler 계정에 이미 위임이 있을 수 있습니다. 다음 명령을 사용하여 확인할 수 있습니다:

    aws organizations list-delegated-administrators
    

    7b. Prowler 계정에 이미 리소스 정책이 있을 수 있습니다. 다음 명령을 사용하여 확인할 수 있습니다:

    aws organizations describe-resource-policy
    
  8. 위임된 관리자 또는 리소스 정책이 없는 경우 다음 명령을 사용하여 적절한 액세스를 추가할 수 있습니다.

    참고: 위임된 ListAccount 액세스를 제공할 수 없는 경우 2-sat2-codebuild-prowler 템플릿에서 MultiAccountListOverride 파라미터를 제공할 수 있습니다.

    참고: GovCloud를 사용하는 경우 8a단계를 사용하여 위임된 관리자를 생성하세요. 상용 리전을 사용하는 경우 8b단계를 사용하여 ListAccounts에 대한 최소 권한 액세스를 제공하세요.

    8a. 이미 없는 경우 관리자를 위임하려면 다음 명령을 사용합니다. **<aws-account-id>**를 Prowler를 실행할 계정 ID로 바꿉니다.

    aws organizations register-delegated-administrator <aws-account-id>
    

    8b. 다음 명령을 사용하여 리소스 정책을 추가합니다.

    • **<aws-account-id>**를 Prowler를 실행할 계정 ID로 바꿉니다.

      aws organizations put-resource-policy --content \
      '{
          "Version": "2012-10-17",
          "Statement": [
          {
              "Sid": "Statement",
              "Effect": "Allow",
              "Principal": {
              "AWS": "arn:aws:iam::<aws-account-id>:root"
              },
              "Action": [
                  "organizations:ListAccounts",
                  "organizations:DescribeAccount",
                  "organizations:ListTagsForResource",
                  "organizations:ListParents",
                  "organizations:DescribeOrganizationalUnit"
      	    ],
              "Resource": "*"
          }
          ]
      }'
      

    참고: ListParentsDescribeOrganizationalUnit은 결과에서 account_ou_uidaccount_ou_name 열을 채우는 데 사용됩니다. 이를 생략해도 나머지 스캔은 작동하지만 해당 두 열은 비어 있게 됩니다.

2단계: SATv2 솔루션 배포

참고: Prowler를 실행하도록 지정한 계정으로 전환했는지 확인하세요.

  1. 템플릿을 다운로드하려면 Prowler 계정에서 AWS CloudShell을 열고 다음 명령을 입력합니다.

    wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml
    
  2. 템플릿을 스테이징할 S3 버킷을 생성하려면 다음 명령을 입력합니다. 템플릿은 51,200바이트보다 크므로 CloudFormation은 인라인으로 전달하는 대신 S3에 업로드해야 합니다.

    TEMPLATE_BUCKET=sat2-cfn-templates-$(aws sts get-caller-identity --query Account --output text)-$AWS_REGION
    aws s3 mb s3://$TEMPLATE_BUCKET --region $AWS_REGION
    
  3. Prowler 계정에 템플릿을 배포합니다. 조직의 모든 계정을 스캔하려면 MultiAccountScantrue로 설정합니다. --s3-bucket 옵션은 스택을 생성하기 전에 템플릿을 버킷에 업로드합니다.

    aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
    --stack-name sat2-prowler \
    --capabilities CAPABILITY_NAMED_IAM \
    --s3-bucket $TEMPLATE_BUCKET \
    --parameter-overrides MultiAccountScan=true
    
  4. 스택이 생성된 후 스테이징 버킷을 삭제할 수 있습니다. 이 버킷은 템플릿을 CloudFormation에 전달하는 데만 사용됩니다.

    aws s3 rb s3://$TEMPLATE_BUCKET --force
    

AWS 콘솔

단계 표시

1단계: 사전 필수 역할 배포

  1. 1-sat2-member-roles.yaml2-sat2-codebuild-prowler.yaml 파일을 다운로드합니다.

  2. CloudFormation StackSets를 통해 CloudFormation 템플릿을 배포합니다. 다음 파라미터를 업데이트합니다.

    • <aws-account-id>를 Prowler를 실행할 계정 ID로 바꿉니다.
    • <region>을 템플릿을 배포할 리전으로 바꿉니다.3. AWS CloudFormation 콘솔로 이동합니다.
  3. 탐색 창에서 StackSets를 선택합니다.

  4. Create StackSet을 선택합니다.

  5. Permissions에서 Service-managed permissions을 선택한 상태로 둡니다.

  6. Specify template에서 Upload a template file을 선택합니다.

  7. 1-1단계에서 다운로드한 1-sat2-member-roles.yaml을 선택합니다.

  8. Next를 선택합니다.

  9. Stack name에 sat2-member-role을 입력합니다.

  10. Parameters에 다음을 입력합니다.

    • ProwlerAccountID - Prowler를 실행할 계정 ID입니다.
  11. Next를 선택합니다.

  12. Configure StackSet options 페이지에서 Next를 선택합니다.

  13. Set deployment options에서 다음을 입력합니다.

    1. Deployment targets에서 Deploy to organization을 선택한 상태로 둡니다.
    2. Specify regions에서 us-east-1을 선택합니다.
    3. Region Concurrency에서 Parallel을 선택합니다.
  14. Next를 선택합니다.

  15. Review 페이지에서 I acknowledge that AWS CloudFormation might create IAM resources. 확인란을 선택하고 Submit을 선택합니다.

2단계: AWS Organizations 위임 관리자 활성화

Prowler를 배포하려는 계정에 대해 위임 관리자 또는 리소스 정책이 이미 존재하는지 확인합니다. 보안 도구(Audit) 계정에서 Prowler를 실행하는 것이 좋습니다. Audit 계정에 ListAccounts 권한이 있는지 업데이트하거나 확인하려면 다음 단계를 따르세요.

  1. AWS Organization 콘솔로 이동합니다.

  2. 탐색 창에서 Settings를 선택합니다.

  3. Delegated administrator for AWS Organizations에 다음 문을 포함합니다.

    {
        "Version": "2012-10-17",
        "Statement": [
        {
            "Sid": "Statement",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::<aws-account-id>:root"
            },
            "Action": [
                    "organizations:ListAccounts",
                    "organizations:DescribeAccount",
                    "organizations:ListTagsForResource",
                    "organizations:ListParents",
                    "organizations:DescribeOrganizationalUnit"
    		    ],
            "Resource": "*"
        }
        ]
    }
    

    참고: ListParentsDescribeOrganizationalUnit은 결과에서 account_ou_uidaccount_ou_name 열을 채우는 데 사용됩니다. 이를 생략해도 나머지 스캔은 정상 작동하지만 해당 두 열은 비어 있게 됩니다.

3단계: SATv2 솔루션 배포

  1. 도구를 실행할 계정(ProwlerAccountID)의 AWS CloudFormation 콘솔로 이동합니다.

  2. 탐색 창에서 Stacks를 선택합니다.

  3. Create stack을 선택합니다.

  4. Specify template에서 Upload a template file을 선택합니다.

  5. 1-1단계에서 다운로드한 2-sat2-codebuild-prowler.yaml을 선택합니다.

  6. Next를 선택합니다.

  7. Stack name에 sat2-prowler를 입력합니다.

  8. Parameters 섹션의 MultiAccountScan에서 true를 선택합니다.

  9. 모든 계정의 요약을 단일 csv 파일로 받으려면 보고를 선택적으로 활성화할 수 있습니다. Reporting에서 true를 선택합니다.

  10. Next를 선택합니다.

  11. Configure stack options 페이지에서 Next를 선택합니다.

  12. Review SAS 페이지에서 I acknowledge that AWS CloudFormation might create IAM resources. 확인란을 선택하고 Submit을 선택합니다.

결과 검토

솔루션이 배포된 후 Lambda 함수가 CodeBuild 프로젝트를 시작합니다. CodeBuild 프로젝트 빌드가 완료되면 Prowler 결과가 생성된 Amazon S3 버킷에 업로드됩니다. 알림을 구성한 경우 Prowler 스캔이 완료되면 이메일을 받게 됩니다. 보고를 구성한 경우 /reports 폴더에 통합 csv 파일이 생성됩니다.

이메일 알림을 구성하지 않은 경우 CodeBuild 콘솔에서 진행 상황을 모니터링할 수 있습니다.

결과를 검토하려면 다음 단계를 따르세요.

  1. Prowler를 배포한 계정의 Amazon S3 콘솔로 이동합니다.

  2. **sat2-prowler-prowlerfindingsbucket-**로 시작하는 버킷을 선택합니다.

  3. 원하는 출력 형식의 폴더를 선택한 다음 검토하려는 실행의 scan_date=scan_time= 폴더를 선택합니다.

    각 출력 형식에는 자체 최상위 폴더가 있으며, 각 실행은 그 아래의 scan_date=YYYY-MM-DD/scan_time=HHMMSS 하위 폴더에 기록됩니다. 시간은 스캔이 시작된 UTC 시간입니다:

    csv/scan_date=2026-09-01/scan_time=204955/         Prowler의 CSV 결과(작성된 그대로)
    html/scan_date=2026-09-01/scan_time=204955/        계정별 HTML 보고서
    json/scan_date=2026-09-01/scan_time=204955/        계정별 JSON
    ocsf-json/scan_date=2026-09-01/scan_time=204955/   계정별 OCSF JSON
    parquet/scan_date=2026-09-01/scan_time=204955/     Athena 쿼리용 복사본
    compliance/scan_date=2026-09-01/scan_time=204955/  생성 시 규정 준수 CSV
    reports/                                           통합 CSV 및 대시보드
    

    각 실행에는 자체 폴더가 있으므로 솔루션을 다시 실행해도 같은 날 여러 번 실행하더라도 새 결과가 이전 결과와 섞이지 않습니다. 이전 실행은 비교할 수 있도록 유지됩니다.

  4. 각 계정에 대해 prowler-output-<aws-account-id>-<datetime> 형식의 4가지 파일 유형(csv, html, json, json-ocsf)이 있습니다.

  5. html 객체 중 하나를 선택합니다.

  6. Open을 선택합니다.

    Prowler Output

  7. 보고서가 포함된 새 창이 열립니다. 필터를 사용하여 결과를 식별하고 우선순위를 지정할 수 있습니다.

    Prowler findings

SATv2 대시보드(권장)

보고를 활성화한 경우 reporting 폴더에 정적 html 대시보드가 있습니다.

  1. satv2-dashboard.html 객체를 선택하고 Open을 선택합니다.
  2. 통합 csv를 선택하고 Actions, Share with a presigned URL을 선택합니다.

    참고: 사전 서명된 URL을 다른 사람과 공유하지 마세요. 사전 서명된 URL은 보안 자격 증명을 사용하여 객체를 다운로드할 수 있는 시간 제한 권한을 부여합니다. URL은 브라우저에 입력하거나 프로그램에서 객체를 다운로드하는 데 사용할 수 있습니다. 사전 서명된 URL에 사용되는 자격 증명은 URL을 생성한 AWS 사용자의 자격 증명입니다. 자세한 내용은 사전 서명된 URL로 객체 공유를 검토하세요.

  3. number of minutes1을 입력합니다.
  4. URL을 satv2-dashboard.html 페이지에 붙여넣습니다.
  5. img/satv2-dashboard.png에서 예제 대시보드 출력을 검토합니다.

Prowler 대시보드

Prowler에는 결과를 검토할 수 있는 기본 제공 대시보드가 있습니다. Prowler 대시보드를 사용하려면 Prowler를 로컬에 설치하고 Prowler 결과를 로컬로 다운로드해야 합니다.

AWS Command Line Interface(CLI)와 유효한 자격 증명이 있어야 합니다. 자세한 내용은 AWS Command Line interface 사용자 가이드를 검토하세요.

  1. Prowler를 설치합니다. 자세한 내용은 Prowler 설치 지침을 검토하세요.

    pip install prowler
    
  2. Amazon S3 버킷 이름을 가져옵니다. 버킷 이름은 CloudFormation 콘솔에서 ProwlerFindingsBucket 리소스로 표시됩니다. 또는 S3 콘솔로 이동하여 {stack_name}-prowlerfindingsbucket-{ID} 형식의 버킷을 찾습니다.

  3. S3에서 CSV 및 규정 준수 데이터를 다운로드합니다. 전체 스캔을 실행하지 않은 경우 규정 준수 데이터가 없을 수 있습니다. {bucket_name}을 버킷 이름으로, {scan_date}{scan_time}을 로드하려는 실행으로 바꿉니다(예: 2026-09-01204955). 사용 가능한 실행을 나열하려면 aws s3 ls s3://{bucket_name}/csv/scan_date={scan_date}/를 사용합니다.

    aws s3 sync s3://{bucket_name}/compliance/scan_date={scan_date}/scan_time={scan_time}/ output/compliance/
    aws s3 sync s3://{bucket_name}/csv/scan_date={scan_date}/scan_time={scan_time}/ output/
    

    참고: 한 번에 하나의 실행만 동기화하세요. Prowler 대시보드는 output/*.csv를 읽고 하위 폴더를 검색하지 않으므로 scan_date= 폴더 자체를 output/에 복사하면 빈 대시보드가 생성됩니다. 두 실행을 동시에 로드하면 각 결과가 두 번 표시됩니다.

  4. 대시보드를 실행합니다. 다음 명령을 사용하여 대시보드를 실행합니다. 기본적으로 http://127.0.0.1:11666/에서 시작됩니다.

    prowler dashboard
    

스캔 유형

기본적으로 SAT2는 13개의 검사를 포함하는 기본 스캔을 실행합니다. 다른 ProwlerScanType 매개변수 값을 선택하여 중간 또는 전체 검사를 실행하도록 선택할 수 있습니다.

예를 들어 중간 스캔 옵션을 사용한 단일 계정 스캔은 다음 명령을 사용합니다:```bash aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml
--stack-name sat2-prowler
--capabilities CAPABILITY_NAMED_IAM
--s3-bucket $TEMPLATE_BUCKET
--parameter-overrides ProwlerScanType=Intermediate

>참고: 템플릿이 CloudFormation이 인라인으로 허용하는 최대 크기인 51,200바이트보다 크기 때문에 `--s3-bucket` 옵션이 필요합니다. `$TEMPLATE_BUCKET`은 위의 CloudShell 배포 단계에서 생성된 스테이징 버킷입니다. 이는 이 README의 모든 `aws cloudformation deploy` 예제에 적용됩니다.

검사 항목은 자주 추가되며, 최신 검사 항목을 확인하려면 `prowler aws --list-checks` 명령을 실행하세요. 각 검사 수준에 대한 예시가 아래에 제공되어 있습니다.

### 기본 검사
검사 항목 목록을 보려면 [기본 검사](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks/basic_checks.txt)를 검토하세요.

- 수동 검사 - 현재 연락처 정보를 유지합니다.
- 사용되지 않는 Lambda 런타임을 찾습니다.
- 모든 리전에서 CloudTrail이 활성화되어 있는지 확인합니다.
- 모든 리전에서 AWS Config가 활성화되어 있는지 확인합니다.
- 어떤 보안 그룹도 0.0.0.0/0 또는 ::/0에서 모든 포트로의 인그레스를 허용하지 않는지 확인합니다.
- GuardDuty가 활성화되어 있는지 확인합니다.
- IAM 암호 정책에 소문자가 하나 이상 필요합니다.
- IAM 암호 정책에 숫자가 하나 이상 필요합니다.
- IAM 암호 정책에 기호가 하나 이상 필요합니다.
- IAM 암호 정책에 대문자가 하나 이상 필요합니다.
- 루트 계정에 MFA가 활성화되어 있는지 확인합니다.
- 액세스 키가 90일 이하로 교체되는지 확인합니다.
- Everyone 또는 모든 AWS 사용자에게 공개된 S3 버킷이 없는지 확인합니다.

### 중간 검사
검사 항목 목록을 보려면 [중간 검사](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks/intermediate_checks.txt)를 검토하세요.

이 검사는 Prowler 검사 옵션에 `--severity critical high`를 추가합니다. 이 옵션을 선택하면 Prowler는 심각도가 critical 또는 high인 모든 보안 검사를 실행합니다.

### 전체 검사
검사 항목 목록을 보려면 [전체 검사](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks/full_checks.txt)를 검토하세요.

이 옵션은 Prowler 검사에 추가 매개변수를 추가하지 않습니다. 결과적으로 Prowler는 500개 이상의 검사를 실행합니다.

전체 검사를 사용하여 원하는 대로 검사를 사용자 지정할 수도 있습니다.

**ProwlerScanType**에서 **Full**을 선택하세요.

**ProwlerOptions**에 검사 항목을 추가하세요. 예를 들어 GuardDuty가 활성화되어 있는지만 확인하려면 다음을 입력하세요:

`aws --ignore-exit-code-3 -c guardduty_is_enabled`

## 알림

CloudFormation 템플릿을 배포할 때 EmailAddress 매개변수에 이메일 주소를 선택적으로 지정할 수 있습니다. 이렇게 하면 SNS 주제가 생성되고 CodeBuild 작업이 완료될 때 이메일이 전송됩니다.

이는 더 긴 검사를 실행하거나 여러 계정에서 실행할 때 유용할 수 있습니다.

예를 들어, 이메일 알림이 포함된 단일 계정 검사는 다음 명령을 사용합니다:```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
--stack-name sat2-prowler \
--capabilities CAPABILITY_NAMED_IAM \
--s3-bucket $TEMPLATE_BUCKET \
--parameter-overrides [email protected]

선택적으로 EmailAddress 파라미터를 설정했는지 여부와 관계없이 CodeBuild 콘솔에서 진행 상황을 확인할 수 있습니다.

  1. CodeBuild 콘솔로 이동합니다.

  2. 탐색 창에서 Build 아래의 Build projects를 선택합니다.

  3. **ProwlerCodeBuild-**로 시작하는 Build 프로젝트를 선택합니다.

  4. Build history 아래에서 마지막 실행을 확인할 수 있습니다.

    CodeBuild project

  5. 선택적으로 Start build를 선택하여 솔루션을 배포할 때 선택한 옵션으로 또 다른 스캔을 실행할 수 있습니다.

보고 요약

여러 Prowler 스캔 결과를 단일 파일로 요약하는 보고 기능을 선택적으로 활성화할 수 있습니다. 이는 AWS Organization의 여러 계정에서 Prowler를 실행할 때 유용할 수 있습니다. 보고 요약 기능은 기본적으로 비활성화되어 있습니다. 보고를 활성화하려면 CloudFormation 템플릿을 배포할 때 Reporting 파라미터를 true로 설정합니다. 그러면 Athena WorkGroup, Glue 테이블이 생성되고 결과를 통합하는 쿼리가 자동으로 실행됩니다. 요약된 csv 파일은 Prowler 결과와 동일한 S3 버킷의 /reports 폴더에 위치합니다.

보고가 활성화된 상태에서 이메일 주소를 지정하면 Athena 쿼리가 완료되었을 때 두 번째 이메일을 받게 됩니다.

Athena 테이블 구성 방식

Athena는 Prowler의 CSV가 아닌 parquet/ 사본의 결과를 쿼리합니다. CodeBuild 프로젝트는 각 CSV를 업로드하기 전에 Parquet로 변환하며, Glue 테이블 prowlerparquet/를 가리킵니다.

변환이 필요한 이유는 Prowler 5.17.0 이상이 체크 메타데이터에 여러 줄로 된 마크다운을 포함하기 때문입니다. 따라서 DESCRIPTION, RISKREMEDIATION_* 필드에 줄바꿈이 포함됩니다. Prowler는 이러한 필드를 올바르게 인용하지만, Athena는 Hive의 TextInputFormat을 통해 CSV를 읽으므로 SerDe가 실행되기 전에 줄바꿈을 기준으로 레코드를 분할합니다. 따라서 CSV 기반 테이블은 결과 하나당 한 행을 반환하는 대신 물리적 줄 하나당 한 행을 반환하며, 첫 번째 여러 줄 필드 뒤에 오는 열은 조용히 삭제됩니다. Parquet는 줄바꿈을 레코드 경계로 사용하지 않으므로 텍스트가 그대로 유지됩니다. 또한 Parquet는 반복되는 교정 텍스트를 크게 압축하여 쿼리 비용을 절감합니다. 116MB의 CSV 세트가 약 3MB의 Parquet로 줄어듭니다.

csv/ 폴더는 Prowler가 작성한 그대로 유지되므로 Prowler 대시보드와 기존 CSV 도구는 계속 작동합니다.

스캔 기록 및 중복

테이블은 scan_date scan_time으로 파티셔닝되므로 솔루션을 실행할 때마다 고유한 파티션이 생성됩니다. 이로 인해 두 가지가 따릅니다.

  • /reports의 통합 CSV는 가장 최근 실행만 포함하므로 솔루션을 다시 실행해도 결과가 중복 계산되지 않으며, 더 이상 존재하지 않는 결과도 보고서에 남지 않습니다.
  • 이전 실행은 계속 쿼리할 수 있습니다. scan_datescan_time은 일반 열이므로 실행 간 결과를 비교할 수 있습니다. Prowler scan trend 저장 쿼리가 이를 수행하며, 실행당 한 행씩 반환합니다.

날짜만으로 파티셔닝하는 것은 충분하지 않습니다. 같은 날 두 번째 스캔을 실행하면 동일한 파티션에 기록되며, 해당 결과는 이전 실행의 결과를 대체하는 대신 병합됩니다. 리소스가 삭제되었거나, 계정이 조직을 떠났거나, 멤버 역할이 더 이상 작동하지 않거나, 스캔 유형이 축소되어 최신 스캔이 더 이상 보고하지 않는 결과도 보고서에 계속 표시되어 최신 상태로 보일 수 있습니다.

새 파티션은 자동으로 등록됩니다. 보고 Lambda는 통합 쿼리를 실행하기 전에 MSCK REPAIR TABLE을 실행하므로 예약할 크롤러도, 수동으로 추가할 항목도 없습니다.

자체 Athena 쿼리를 작성하는 경우 단일 실행으로 제한해야 합니다. 그렇지 않으면 버킷의 모든 스캔을 한 번에 집계하게 됩니다. 두 키 모두 고정 너비이므로 연결된 키를 비교하면 실행이 시간순으로 정렬됩니다.```sql SELECT severity, count(*) FROM "{bucket_name}"."prowler" WHERE status = 'FAIL' AND concat(scan_date, scan_time) = ( SELECT max(concat(scan_date, scan_time)) FROM "{bucket_name}"."prowler" ) GROUP BY severity

하루 전체의 모든 실행을 조회하려면 `scan_date`만으로 필터링하세요.

>참고: 이전의 `scan_date`-only 레이아웃을 사용하던 배포를 업그레이드하는 경우, 업그레이드 이전의 결과는 새 테이블에 표시되지 않습니다. 해당 결과의 S3 경로에 `scan_time=` 수준이 없기 때문입니다. 데이터는 S3에서 그대로 유지됩니다. 다음 스캔이 테이블을 다시 채우도록 하거나, 예를 들어 `aws s3 mv s3://{bucket_name}/parquet/scan_date={scan_date}/ s3://{bucket_name}/parquet/scan_date={scan_date}/scan_time=000000/ --recursive` 명령으로 기존 파일을 `scan_time=` 폴더로 이동한 후 Athena에서 `MSCK REPAIR TABLE prowler`를 실행하세요.

예를 들어, 보고 및 이메일 알림이 활성화된 다중 계정 스캔은 다음 명령을 사용합니다:```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
--stack-name sat2-prowler \
--capabilities CAPABILITY_NAMED_IAM \
--s3-bucket $TEMPLATE_BUCKET \
--parameter-overrides MultiAccountScan=true Reporting=true [email protected]

reporting architecture diagram

예시로 두 개의 저장된 쿼리가 생성됩니다:

저장된 쿼리표시 내용
Prowler 조직 요약가장 최근 스캔에서 평가된 모든 계정의 실패한 검사 항목.
Prowler 스캔 추세스캔 날짜 및 심각도별 실패한 검사 항목으로, 시간 경과에 따른 실행을 비교합니다.

쿼리를 검토하고 실행하려면 다음 단계를 따르세요:

  1. Amazon Athena 콘솔로 이동합니다.

  2. sat2-prowler-*로 시작하는 워크그룹을 선택합니다.

  3. 저장된 쿼리 탭을 선택합니다.

  4. ID를 선택하여 실행하려는 쿼리를 선택합니다.

    Athena 저장된 쿼리

  5. 실행을 선택하여 쿼리를 실행합니다.

    Athena 저장된 쿼리 결과

자주 묻는 질문(FAQ)

  1. 비용이 발생하나요?
    • 이 솔루션은 AWS 프리 티어 내에서 실행되도록 설계되었습니다.
    • Amazon CodeBuild의 경우, 고객은 월 100분의 빌드 시간을 사용할 수 있습니다.
    • CodeBuild, S3 및 Lambda에서 이미 프리 티어를 초과한 고객의 경우, 이 솔루션 실행 비용은 1달러 미만입니다.
  2. 이것은 지속적인 모니터링 및 보고 도구인가요?
    • 아닙니다. 이는 일회성 평가이며, 지속적인 평가를 위해 AWS Security Hub를 사용하는 것이 좋습니다.
  3. GuardDuty, Security Hub, CloudWatch 등과 통합되나요?
    • 아닙니다. 이 블로그의 지침에 따라 Prowler와 Security Hub를 통합할 수 있습니다.
  4. 보고서의 문제를 어떻게 해결하나요?
    • 일반적으로 문제는 보고서에 쉽게 식별 가능한 수정 사항과 함께 설명되어 있습니다. 각 도구(Prowler)의 공개 문서도 함께 확인하시기 바랍니다. 이것으로 충분하지 않은 경우, AWS 계정 팀 또는 AWS Support에 문의하여 보고서를 이해하고 문제 해결을 진행하는 데 도움을 받으시기 바랍니다.
  5. SATv2에 대해 Prowler가 보고하는 결과는 무엇인가요?
    검사 항목완화 조치
    Lambda 함수가 CloudTrail에 의해 API 작업 호출을 기록하는지 확인합니다.CloudTrail은 AWS 계정 수준 구성입니다. CloudTrail은 SATv2와 별개로 활성화되어야 합니다.
    CloudFormation 스택에 대한 종료 보호 활성화SATv2는 특정 시점에 실행된 후 삭제되도록 설계되었습니다. 스택이 종료되더라도 결과는 S3 버킷에 계속 보존됩니다.
    CloudWatch 로그 그룹이 AWS KMS로 보호되는지 확인합니다.로그 그룹 데이터는 CloudWatch Logs에서 항상 암호화됩니다. 기본적으로 CloudWatch Logs는 저장된 로그 데이터에 대해 서버 측 암호화를 사용합니다. 비용 절감을 위해 고객 관리형 KMS 키는 구성되지 않습니다.
    CloudWatch 로그 그룹에 특정 일수의 보존 정책이 있는지 확인합니다.로그 그룹 보존 기간은 설계상 7일로 설정되어 있습니다. 이 검사는 보존 기간이 1년 미만인 로그 그룹을 찾습니다.
    S3 버킷에 KMS 암호화가 활성화되어 있는지 확인합니다.모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있으며, 객체는 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화로 자동 암호화됩니다. 비용 절감을 위해 고객 관리형 KMS 키는 구성되지 않습니다.
    S3 버킷 MFA 삭제가 활성화되어 있지 않은지 확인합니다.Prowler 평가 결과는 다시 생성할 수 있으므로 MFA 삭제가 필요하지 않습니다.
    S3 버킷에 객체 잠금이 활성화되어 있는지 확인합니다.Prowler 평가 결과는 다시 생성할 수 있으므로 S3 객체 잠금이 필요하지 않습니다.
    S3 버킷에 서버 액세스 로깅이 활성화되어 있는지 확인합니다.Prowler 평가 결과에는 서버 액세스 로깅이 필요하지 않습니다.

정리

솔루션을 실행한 후에는 더 이상 필요하지 않은 리소스를 제거하기 위해 CloudFormation 스택을 삭제해야 합니다. Prowler 스캔 결과가 있는 S3 버킷은 유지됩니다.

계정에서 보안 평가 솔루션을 제거하려면 다음 단계를 따르세요.

  1. 도구를 실행한 계정(ProwlerAccountID)의 AWS CloudFormation 콘솔로 이동합니다.

  2. 탐색 창에서 스택을 선택합니다.

  3. sat2-prowler 스택을 선택합니다.

  4. 삭제를 선택합니다.

여러 계정을 스캔하기 위해 멤버 역할 StackSet을 배포한 경우 다음 단계를 따르세요.

  1. 멤버 역할 StackSet을 생성한 계정의 AWS CloudFormation 콘솔로 이동합니다.

  2. 탐색 창에서 StackSets을 선택합니다.

  3. sat2-member-roles StackSet을 선택합니다.

  4. 작업을 선택한 다음 StackSet에서 스택 삭제를 선택합니다.

  5. StackSet 생성 시 지정한 것과 동일한 AWS OU ID를 지정합니다.

  6. 리전 지정에서 모든 리전 추가를 선택합니다.

  7. 다음을 선택한 다음 제출을 선택합니다.

변경이 완료된 후 StackSet을 삭제할 수 있습니다.

  1. sat2-member-roles StackSet을 선택합니다.

  2. 작업을 선택한 다음 StackSet 삭제를 선택합니다.

스캔 결과가 있는 Amazon S3 버킷을 제거하려면 Amazon S3 사용자 가이드의 단계에 따라 객체와 버킷을 삭제하세요. 솔루션을 다시 실행하면 결과를 위한 새 S3 버킷이 생성됩니다.

보안

자세한 내용은 CONTRIBUTING을 참조하세요.

라이선스

이 프로젝트는 Apache-2.0 라이선스에 따라 라이선스가 부여됩니다.

카테고리