
aws-security-assessment-solution v3.0.0
Prowlerを使用してAWSアカウントの特定時点のアセスメントを作成するためのAWSツール。
セルフサービス型セキュリティ評価ソリューション (v2.0)
サイバーセキュリティは、多くのCIO、CISO、およびその顧客にとって非常に重要なトピックであり、懸念事項であり続けています。これらの重要な懸念に対応するため、AWSは顧客がアカウントを保護するために使用すべき主要なサービス群を開発しました。Amazon GuardDuty、AWS Security Hub、AWS Config、およびAWS Well-Architected のレビューは、顧客がAWSアカウント上で強固なセキュリティ態勢を維持するのに役立ちます。より多くの組織がクラウドにデプロイするにつれて、特に迅速にデプロイしている場合や、推奨されるAWSサービスをまだ実装していない場合には、クラウド環境の迅速なセキュリティ評価が必要になることがあります。
当社は、顧客にセキュリティ評価レポートを提供するための、低コストで、デプロイが容易で、安全かつ高速なソリューションを開発しました。これらのレポートは、オープンソースプロジェクトProwlerを使用して生成されます。Prowlerは、AWSのベストプラクティスに基づいた時点評価のセキュリティ評価を実行し、顧客のデプロイ環境における潜在的なリスク領域を迅速に特定するのに役立ちます。これらの評価を継続的に実施することに関心がある場合は、Security HubのFoundational Security Best Practices standardを有効にすることをAWSは推奨します。Prowlerの評価結果をSecurity Hubと統合することに関心がある場合は、Prowler Documentationの手順に従うことができます。
注: ProwlerはAWS所有のソリューションではありません。顧客はこのソリューションを実行する前に、Prowlerを独自にレビューする必要があります。Prowlerに関連する依存関係は最新の状態に保つ必要があります。このソリューションは、pipパッケージインストーラーから固定バージョンのProwler(現在は5.41.0)をインストールするため、Prowlerの出力形式が変更されても、警告なしにスキャンが壊れることはありません。新しいリリースに移行するには、
2-sat2-codebuild-prowler.yaml内のpip3 install prowler==の行を編集してください。
📕 より詳細なステップバイステップの手順については、SHIP Workshopのモジュール2を参照してください。
目次
概要
このソリューションはAWS CloudFormationでデプロイされます。デプロイされると、AWS CodeBuildプロジェクトと、Prowlerが生成したレポートを保存するためのAmazon S3バケットが作成されます。その後、AWS Lambda関数を使用してAWS CodeBuildプロジェクトを開始します。
パラメータ(ユーザー入力)のデフォルトでは、単一アカウントで基本スキャンが実行されます。ただし、より広範囲なスキャンを実行したり、複数のアカウントをスキャンしたりするために、異なるパラメータを選択できます。デプロイプロセスは5分未満で完了します。このソリューションのAWS CloudFormationテンプレートは、このGithubリポジトリでレビュー用に提供されています。
テンプレートがデプロイされると、CodeBuildプロジェクトが実行されます。デフォルトの評価は約5分で完了します。セキュリティ評価の完了時間は、リソースの数と選択したスキャンオプションによって異なります。評価の最後に、レポートは作成されたS3バケットに配信されます。

パラメータ
SATv2は、CloudFormationパラメータを更新することでカスタマイズできます。このセクションでは、利用可能なオプションを要約し、詳細情報があるセクションへのリンクを提供します。
| パラメータ | 説明 | 詳細情報 |
|---|---|---|
| ProwlerScanType | 実行するスキャンのタイプを指定します。異なるProwlerOptionsを指定せずにfullを選択すると、フルスキャンが実行されます。特定のチェックを実行するには、Fullを選択し、ProwlerOptionsに-c <check>を追加します。 | スキャンタイプ |
| MultiAccountScan | 組織内のすべてのアカウントをスキャンする場合は、これをtrueに設定します。ロールをプロビジョニングするための前提条件テンプレートをデプロイしているか、適切な権限を持つ別のProwlerRoleを指定している必要があります。 | 複数アカウントのスキャン |
| Reporting | Prowlerレポートを単一のcsvに要約する場合は、これをtrueに設定します。これは複数のアカウントをスキャンする場合に役立ちます。 | レポートの要約 |
| EmailAddress | 評価が完了したときにメールを受信したい場合は、アドレスを指定します。 | 通知 |
| 詳細パラメータ | ||
| ConcurrentAccountScans | 複数アカウントのスキャンの場合、同時にスキャンするアカウント数を指定します。これは多数のアカウントを持つ大規模な組織に役立ちます。3つ以上を選択するとCodeBuildインスタンスのサイズが変更され、追加コストが発生する可能性があります。 | |
| CodeBuildTimeout | CodeBuildジョブのタイムアウトを設定します。デフォルトは300分(5時間)です。 | |
| MultiAccountListOverride | スキャンするアカウントのスペース区切りのリストを指定します。これを空白のままにすると、組織内のすべてのアカウントがスキャンされます。特定のアカウントをスキャンする場合は、上記のMultiAccountScanパラメータをtrueに設定していることを確認してください。委任されたListAccountアクセスを提供できない場合は、MultiAccountListOverrideパラメータを指定できます。 | 複数アカウントのスキャン |
| ProwlerOptions | Prowlerのパラメータを指定します。--roleとARNは、指定したパラメータの末尾に自動的に追加されます。これは単一のチェックを指定するためにも使用できます。 | フルスキャン |
| ProwlerRole | Prowlerがスキャンを実行するために引き受けるロール。異なる権限を持つ独自のロールを指定する場合は、これを変更します。 |
デプロイ
このプロジェクトを使用して、AWS Organizations内の複数のアカウント、または単一のアカウントでProwlerを実行できます。AWS CloudShellまたはAWSコンソールを使用するための手順を提供します。開始するにはオプションを選択してください。
単一アカウントのスキャン
セルフサービス型セキュリティ評価ソリューション(SATv2)を単一のアカウントに対して実行するには、以下の手順に従ってください。AWS CLIまたはAWSコンソールのいずれかを選択できます。
AWS CloudShell
手順を表示
ソリューションのデプロイ
-
AWSアカウントにログインします。
-
ナビゲーションバーで、AWS CloudShellを選択します。
-
CloudFormationテンプレートをダウンロードするには、次のコマンドを入力します。
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml -
テンプレートをステージングするための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 -
CloudFormationテンプレートをデプロイするには、次のコマンドを入力します。
--s3-bucketオプションは、スタックを作成する前にテンプレートをバケットにアップロードします。aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \ --stack-name sat2 \ --capabilities CAPABILITY_NAMED_IAM \ --s3-bucket $TEMPLATE_BUCKET -
スタックが作成されたら、ステージングバケットを削除できます。これはテンプレートをCloudFormationに渡すためだけに使用されます。
aws s3 rb s3://$TEMPLATE_BUCKET --force
AWSコンソール
手順を表示
ソリューションのデプロイ
- 2-sat2-codebuild-prowler.yaml CloudFormationテンプレートをダウンロードします。
- AWS CloudFormationコンソールに移動します。
- ナビゲーションペインで、スタックを選択します。
- スタックの作成を選択します。
- [テンプレートの指定]で、テンプレートファイルのアップロードを選択します。
- ステップ1でダウンロードした2-sat2-codebuild-prowler.yamlを選択します。
- 次へを選択します。
- [スタック名]に、sat2と入力します。
- 次へを選択します。
- [スタックオプションの設定]ページで、次へを選択します。
- [SASのレビュー]ページで、**AWS CloudFormationがIAMリソースを作成する場合があることを承認します。**チェックボックスを選択し、送信を選択します。
複数アカウントのスキャン
セルフサービス型セキュリティ評価ソリューション(SAT)は、複数アカウントのスキャンもサポートしています。スキャンを実行する各アカウントに前提条件ロールをデプロイする必要があります。複数のアカウントでSATv2を実行するには、以下の手順に従ってください。AWS CLIまたはAWSコンソールのいずれかを選択できます。
これらの手順では、スタックセット操作の前提条件がすでに整っていることを前提としています。詳細については、AWS CloudFormationユーザーガイドを参照してください。
注: StackSetsは管理アカウントには適用されません。管理アカウントを評価するには、1-sat2-member-roleをCloudFormationスタックとしてデプロイします。
AWS CloudShell
手順を表示
ステップ1: 前提条件ロールのデプロイ
-
AWS管理アカウントにログインします。
-
ナビゲーションバーで、AWS CloudShellを選択します。
-
Prowlerスキャンを実行するアカウントを特定します。顧客は通常、セキュリティツールアカウントまたは監査アカウントを使用します。ProwlerAccountIDパラメータのアカウントIDをメモします。
-
CloudFormationテンプレートをダウンロードするには、次のコマンドを入力します。
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/1-sat2-member-roles.yaml -
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> -
次のコマンドを使用して、組織内の各アカウントのスタックインスタンスを作成します。特定の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> -
Prowlerアカウントに委任管理者またはリソースポリシーがすでに存在するかどうかを確認します。必要なのは1つのオプションのみで、より詳細な制御が可能なためリソースポリシーが推奨されます。
注: リソースポリシーはGovCloudでは利用できないため、委任管理者を使用する必要があります。
7a. Prowlerアカウントにはすでに委任が存在する場合があります。次のコマンドを使用して確認できます。
aws organizations list-delegated-administrators7b. Prowlerアカウントにはすでにリソースポリシーが存在する場合があります。次のコマンドを使用して確認できます。
aws organizations describe-resource-policy -
委任管理者またはリソースポリシーがない場合は、次のコマンドを使用して適切なアクセスを追加できます。
注: 委任された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": "*" } ] }'
注:
ListParentsとDescribeOrganizationalUnitは、検出結果のaccount_ou_uid列とaccount_ou_name列に入力されるものです。これらを省略してもスキャンの残りは機能しますが、これらの2つの列は空になります。 -
ステップ2: SATv2ソリューションのデプロイ
注: Prowlerを実行すると指定したアカウントに切り替えたことを確認してください。
-
テンプレートをダウンロードするには、ProwlerアカウントでAWS CloudShellを開き、次のコマンドを入力します。
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml -
テンプレートをステージングするための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 -
Prowlerアカウントでテンプレートをデプロイします。組織内のすべてのアカウントをスキャンするには、MultiAccountScanをtrueに設定します。
--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 -
スタックが作成されたら、ステージングバケットを削除できます。これはテンプレートをCloudFormationに渡すためだけに使用されます。
aws s3 rb s3://$TEMPLATE_BUCKET --force
AWSコンソール
手順を表示
ステップ1: 前提条件ロールのデプロイ
-
1-sat2-member-roles.yamlおよび2-sat2-codebuild-prowler.yamlファイルをダウンロードします。
-
CloudFormation StackSetsを介してCloudFormationテンプレートをデプロイします。次のパラメータを更新します。
- <aws-account-id> を、Prowlerを実行するアカウントIDに置き換えます。
- <region> を、テンプレートをデプロイするリージョンに置き換えます。3. AWS CloudFormationコンソールに移動します。
-
ナビゲーションペインで、StackSets を選択します。
-
Create StackSet を選択します。
-
Permissionsで、Service-managed permissions が選択されたままにします。
-
Specify templateで、Upload a template file を選択します。
-
手順1-1でダウンロードした 1-sat2-member-roles.yaml を選択します。
-
Next を選択します。
-
Stack nameに、sat2-member-role と入力します。
-
Parametersに、以下を入力します:
- ProwlerAccountID - Prowlerを実行するアカウントID。
-
Next を選択します。
-
Configure StackSet optionsページで、Next を選択します。
-
Set deployment optionsで、以下を入力します:
- Deployment targets で、Deploy to organization が選択されたままにします。
- Specify regions で、us-east-1 を選択します。
- Region Concurrency で、Parallel を選択します。
-
Next を選択します。
-
Review ページで、I acknowledge that AWS CloudFormation might create IAM resources. のチェックボックスを選択し、Submit を選択します。
ステップ2: AWS Organizationsの委任管理者を有効にする
Prowlerをデプロイするアカウントに、委任管理者またはリソースポリシーがすでに存在するかどうかを確認します。セキュリティツール(Audit)アカウントからProwlerを実行することをお勧めします。AuditアカウントにListAccountsの権限があることを更新または確認するには、次の手順に従います。
-
AWS Organizationコンソールに移動します。
-
ナビゲーションペインで、Settings を選択します。
-
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": "*" } ] }注:
ListParentsとDescribeOrganizationalUnitは、検出結果のaccount_ou_uid列とaccount_ou_name列を埋めるために使用されます。これらを省略してもスキャンの残りの部分は機能しますが、これらの2つの列は空になります。
ステップ3: SATv2ソリューションをデプロイする
-
ツールを実行するアカウント(ProwlerAccountID)でAWS CloudFormationコンソールに移動します。
-
ナビゲーションペインで、Stacks を選択します。
-
Create stack を選択します。
-
Specify templateで、Upload a template file を選択します。
-
手順1-1でダウンロードした 2-sat2-codebuild-prowler.yaml を選択します。
-
Next を選択します。
-
Stack nameに、sat2-prowler と入力します。
-
Parametersセクションで、MultiAccountScan に true を選択します。
-
オプションで、レポートを有効にして、すべてのアカウントのサマリーを単一のcsvファイルで取得できます。Reporting に true を選択します。
-
Next を選択します。
-
Configure stack optionsページで、Next を選択します。
-
Review SASページで、I acknowledge that AWS CloudFormation might create IAM resources. のチェックボックスを選択し、Submit を選択します。
結果の確認
ソリューションのデプロイ後、Lambda関数がCodeBuildプロジェクトを開始します。CodeBuildプロジェクトのビルドが完了すると、Prowlerの結果が作成されたAmazon S3バケットにアップロードされます。通知を設定した場合は、Prowlerスキャンが完了するとメールが届きます。レポートを設定した場合は、/reportsフォルダに統合されたcsvファイルが作成されます。
メールアラートを設定していない場合は、CodeBuildコンソールから進行状況を監視できます。
結果を確認するには、次の手順に従います。
-
ProwlerをデプロイしたアカウントでAmazon S3コンソールに移動します。
-
sat2-prowler-prowlerfindingsbucket- で始まるバケットを選択します。
-
確認したい出力形式のフォルダを選択し、次に確認したい実行の
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とダッシュボード実行ごとに独自のフォルダが作成されるため、ソリューションを再度実行しても、新しい検出結果が古い検出結果と混ざることはありません。同じ日に複数回実行した場合も同様です。以前の実行結果は比較できるように保持されます。
-
各アカウントについて、
prowler-output-<aws-account-id>-<datetime>形式の4種類のファイルタイプ(csv、html、json、json-ocsf)があります。 -
htmlオブジェクトの1つを選択します。
-
Open を選択します。

-
レポートが新しいウィンドウで開きます。フィルタを使用して、検出結果を特定し、優先順位を付けることができます。

SATv2ダッシュボード(推奨)
レポートを有効にした場合、静的HTMLダッシュボードがレポートフォルダに配置されます。
- satv2-dashboard.html オブジェクトを選択し、Open を選択します。
- 統合csvを選択し、Actions、Share with a presigned URL の順に選択します。
注: 署名付きURLを他の人と共有しないでください。署名付きURLは、セキュリティ資格情報を使用してオブジェクトをダウンロードするための時間制限付き権限を付与します。URLはブラウザに入力するか、プログラムでオブジェクトをダウンロードするために使用できます。署名付きURLで使用される資格情報は、URLを生成したAWSユーザーのものです。詳細については、署名付きURLを使用したオブジェクトの共有を参照してください。
- number of minutes に 1 と入力します。
- URLをsatv2-dashboard.htmlページに貼り付けます。
- img/satv2-dashboard.pngでダッシュボード出力の例を確認します。
Prowlerダッシュボード
Prowlerには、結果を確認するための組み込みダッシュボードがあります。Prowlerダッシュボードを使用するには、Prowlerをローカルにインストールし、Prowlerの結果をローカルにダウンロードする必要があります。
AWS Command Line Interface(CLI)と有効な資格情報が必要です。詳細については、AWS Command Line interfaceユーザーガイドを参照してください。
-
Prowlerをインストールします。詳細については、Prowlerインストール手順を参照してください。
pip install prowler -
Amazon S3バケットの名前を取得します。バケット名はCloudFormationコンソールのProwlerFindingsBucketリソースにあります。または、S3コンソールに移動して、
{stack_name}-prowlerfindingsbucket-{ID}形式のバケットを探します。 -
S3からCSVとコンプライアンスデータをダウンロードします。フルスキャンを実行していない場合は、コンプライアンスデータがない場合があります。
{bucket_name}をバケットの名前に、{scan_date}と{scan_time}をロードする実行に置き換えます(例:2026-09-01と204955)。利用可能な実行を一覧表示するには、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/注: 一度に1つの実行を同期してください。Prowlerダッシュボードは
output/*.csvを読み取り、サブフォルダを検索しないため、scan_date=フォルダ自体をoutput/にコピーすると、空のダッシュボードが生成されます。2つの実行を同時にロードすると、各検出結果が2回表示されます。 -
ダッシュボードを実行します。次のコマンドを使用してダッシュボードを実行します。デフォルトでは、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
>注: `--s3-bucket` オプションは必須です。テンプレートが51,200バイトを超えるため、CloudFormationがインラインで受け付ける上限を超えているからです。`$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パスワードポリシーが少なくとも1つの小文字を要求することを確認する。
- IAMパスワードポリシーが少なくとも1つの数字を要求することを確認する。
- IAMパスワードポリシーが少なくとも1つの記号を要求することを確認する。
- IAMパスワードポリシーが少なくとも1つの大文字を要求することを確認する。
- ルートアカウントでMFAが有効になっていることを確認する。
- アクセスキーが90日以内にローテーションされていることを確認する。
- EveryoneまたはAny AWS userに公開されている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コンソールで進捗状況を確認できます。
-
CodeBuildコンソールに移動します。
-
ナビゲーションペインで、ビルドの下にあるビルドプロジェクトを選択します。
-
ProwlerCodeBuild- で始まるビルドプロジェクトを選択します。
-
[ビルド履歴]で、最後の実行が表示されます。

-
必要に応じて、ビルドを開始を選択して、ソリューションのデプロイ時に選択したオプションで別のスキャンを実行できます。
レポートの要約
オプションで、複数のProwlerスキャン結果を1つのファイルに要約するレポートを有効にできます。これは、AWS Organizations内の複数のアカウントにわたってProwlerを実行する場合に役立ちます。レポート要約機能はデフォルトでオフになっています。レポートを有効にするには、CloudFormationテンプレートのデプロイ時にReportingパラメータをtrueに設定します。これにより、Athena WorkGroup、Glueテーブルが作成され、結果を統合するクエリが自動的に実行されます。要約されたcsvファイルは、Prowlerの結果と同じS3バケットの/reportsフォルダに配置されます。
レポートが有効な状態でメールアドレスを指定すると、Athenaクエリが完了したときに2通目のメールが届きます。
Athenaテーブルの構築方法
Athenaは、ProwlerのCSVではなく、parquet/コピーの検出結果をクエリします。CodeBuildプロジェクトは、各CSVをアップロード前にParquetに変換し、Glueテーブルprowlerはparquet/を指します。
この変換が存在する理由は、Prowler 5.17.0以降ではチェックメタデータに複数行のMarkdownが含まれており、DESCRIPTION、RISK、REMEDIATION_*フィールドに改行が含まれるためです。Prowlerはこれらのフィールドを正しく引用符で囲みますが、AthenaはHiveのTextInputFormatを通じてCSVを読み取るため、SerDeが実行される前にレコードが改行で分割されます。したがって、CSVバックアップのテーブルは、検出結果ごとに1行ではなく物理的な行ごとに1行を返し、最初の複数行フィールドに続く列を静かにドロップします。Parquetは改行をレコード境界として使用しないため、テキストはそのまま保持されます。Parquetは繰り返される修復テキストも大幅に圧縮するため、クエリのコストが低くなります。116 MBのCSVセットは、約3 MBのParquetになります。
csv/フォルダはProwlerが書き込んだままの状態で残されるため、Prowlerダッシュボードと既存のCSVツールは引き続き機能します。
スキャン履歴と重複
テーブルはscan_dateとscan_timeでパーティション分割されているため、ソリューションの実行ごとに独自のパーティションが作成されます。これにより、次の2つのことが導き出されます。
/reports内の統合CSVは最新の実行のみを対象とするため、ソリューションを再実行しても検出結果が二重にカウントされることはなく、存在しなくなった検出結果がレポートに残ることもありません。- 以前の実行はクエリ可能なままです。
scan_dateとscan_timeは通常の列であるため、実行間で結果を比較できます。Prowlerスキャントレンド保存済みクエリはこれを実行し、実行ごとに1行を返します。
日付のみでのパーティション分割では不十分です。同じ日に2回目のスキャンを実行すると同じパーティションに書き込まれ、その検出結果は以前の実行のものと置き換わるのではなくマージされます。リソースが削除された、アカウントが組織から離脱した、メンバーロールが機能しなくなった、スキャンタイプが絞り込まれたなどの理由で、新しいスキャンが報告しなくなった検出結果は、レポートに残り、最新であるかのように見えます。
新しいパーティションは自動的に登録されます。レポート用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
1日の全実行をまたいでクエリを実行するには、`scan_date`のみでフィルタリングします。
>注: 以前の`scan_date`のみのレイアウトを使用していたデプロイメントをアップグレードする場合、アップグレード前の結果は新しいテーブルには表示されません。そのS3パスに`scan_time=`レベルがないためです。データはS3上では変更されていません。次のスキャンでテーブルを再構築するか、古いファイルを`scan_time=`フォルダに移動してください。例: `aws s3 mv s3://{bucket_name}/parquet/scan_date={scan_date}/ s3://{bucket_name}/parquet/scan_date={scan_date}/scan_time=000000/ --recursive`、その後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]

例として、2つの保存済みクエリが作成されます:
| 保存済みクエリ | 表示内容 |
|---|---|
| Prowler organization summary | 直近のスキャンで、評価対象の全アカウントにおける失敗したチェック。 |
| Prowler scan trend | スキャン日と深刻度別の失敗したチェック。経時的な実行結果の比較用。 |
クエリを確認して実行するには、次の手順に従います:
-
Amazon Athena コンソールに移動します。
-
sat2-prowler-* で始まるワークグループを選択します。
-
保存済みクエリ タブを選択します。
-
ID を選択して、実行するクエリを選択します。

-
実行 を選択してクエリを実行します。

よくある質問 (FAQ)
- 費用はかかりますか?
- このソリューションは AWS 無料利用枠 内で実行されるように設計されています。
- Amazon CodeBuild の場合、お客様は月に100ビルド分が無料で利用できます。
- CodeBuild、S3、Lambda で既に無料利用枠を超えているお客様の場合、このソリューションの実行コストは1ドル未満です。
- これは継続的なモニタリングおよびレポートツールですか?
- いいえ。これは1回限りの評価です。継続的な評価には AWS Security Hub の使用をお勧めします。
- GuardDuty、Security Hub、CloudWatch などと統合されますか?
- いいえ。このブログ の手順に従って、Prowler と Security Hub を統合できます。
- レポートの問題をどのように修復すればよいですか?
- 一般的に、問題はレポートに明確に識別可能な修正方法とともに記載されているはずです。各ツール (Prowler) の公開ドキュメントも併せてご確認ください。不十分な場合は、AWS アカウントチームまたは AWS サポート にお問い合わせいただき、レポートの理解と問題の修復に向けた支援を受けてください。
- SATv2 について Prowler はどのような検出結果を報告しますか?
チェック 緩和策 Lambda 関数が API 操作を呼び出していることが CloudTrail によって記録されているか確認します。 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 Delete が有効になっていないか確認します。 Prowler の評価結果は再生成できるため、MFA Delete は必要ありません。 S3 バケットでオブジェクトロックが有効になっているか確認します Prowler の評価結果は再生成できるため、S3 オブジェクトロックは必要ありません。 S3 バケットでサーバーアクセスログが有効になっているか確認します Prowler の評価結果にはサーバーアクセスログは必要ありません。
クリーンアップ
ソリューションを実行した後、不要になったリソースを削除するために CloudFormation スタックを削除する必要があります。Prowler スキャン結果が保存されている S3 バケットは残ります。
アカウントからセキュリティ評価ソリューションを削除するには、次の手順に従います。
-
ツールを実行したアカウント (ProwlerAccountID) の AWS CloudFormation コンソール に移動します。
-
ナビゲーションペインで スタック を選択します。
-
sat2-prowler スタックを選択します。
-
削除 を選択します。
複数のアカウントをスキャンするためにメンバーロールの StackSet をデプロイした場合は、次の手順に従います。
-
メンバーロールの StackSet を作成したアカウントの AWS CloudFormation コンソール に移動します。
-
ナビゲーションペインで StackSets を選択します。
-
sat2-member-roles StackSet を選択します。
-
アクション を選択し、スタックセットからスタックを削除 を選択します。
-
StackSet を作成したときと同じ AWS OU ID を指定します。
-
リージョンの指定 で、すべてのリージョンを追加 を選択します。
-
次へ を選択し、送信 を選択します。
変更が完了したら、StackSet を削除できます。
-
sat2-member-roles StackSet を選択します。
-
アクション を選択し、StackSet の削除 を選択します。
スキャン結果が保存されている Amazon S3 バケットを削除する場合は、Amazon S3 ユーザーガイド の手順に従ってオブジェクトとバケットを削除します。ソリューションを再度実行すると、結果用の新しい S3 バケットが作成されます。
セキュリティ
詳細については、CONTRIBUTING を参照してください。
ライセンス
このプロジェクトは Apache-2.0 ライセンスの下でライセンスされています。