レック・テクノロジー・コンサルティング株式会社TECH BLOG

※自動翻訳 / Automated translation

ProwlerCheck を使ってAWS環境のセキュリティチェックを実施してみよう!

皆さん、こんにちは。クラウド基盤技術部のR.Aです。

今回はAWS環境の設定不備を自動でスキャンしてくれるOSSツール「ProwlerCheck」をCloudShell上で動かしてみます。

目次

  • はじめに
  • 環境情報
    • ストレージ容量に関する注意(重要)
  • 事前準備
    • IAM Roleの作成
    • IAMポリシーの作成
  • ProwlerCheckを動かす
    • 初期構築
    • Prowlerの起動
    • 出力結果のダウンロード
    • レポートの確認
  • まとめ

はじめに

ProwlerCheckの特徴は、CIS・NIST・PCI-DSSなどAWS向けだけで47種類のコンプライアンス基準に対応している網羅性の高さと、活発なメンテナンスにあります。

本記事でも、これまでと同様にローカル環境を汚さずブラウザ上から実行できるAWS CloudShellを使います。
初期構築手順から、実際のスキャン実行、出力されたレポートの確認方法まで、詳細にご紹介します。

環境情報

Prowlerを動かすには、Python 3.10以上、3.13以下が必要です。

~ $ python3 --version
Python 3.13.14
~ $ pip3 --version
pip 26.1.2 from /usr/local/python3.13/lib64/python3.13/site-packages/pip (python 3.13)


2026年8月時点のCloudShellのデフォルトのpython3は3.13系で、この要件を満たしています。バージョン切り替えの追加作業は不要でした。

CloudShellのストレージ容量に関する注意(重要)

CloudShellの$HOME(ホームディレクトリ)は、リージョンごとに1GBの永続ストレージに固定されていて、拡張できません。

Prowlerは、AWS/Azure/GCP/Alibaba Cloud/OCI/Kubernetes等のSDKを同梱するマルチクラウド対応ツールです。
そのため、依存パッケージが重く、$HOME配下に仮想環境を作ると1GBをすぐに使い切ります。
実際に検証中も、pip installNo space left on deviceエラーで失敗しました。

CloudShellの保存場所によって容量とデータの残り方が変わるので注意してください。


保存場所 容量 セッション終了後
$HOME 1GB固定(拡張不可) 消えない
/tmp 1GBの枠を消費しない 消える


上記のことから、Prowlerの仮想環境・インストール先は、必ず/tmp配下にしてください。

事前準備

CloudShellからAWS環境をスキャンするために必要なIAM権限を準備します。

本環境ではSSOログインを使用しているため、最小権限のみを指定したIAMロールにスイッチロールしてProwlerを動かします。そのため、以下の作業を実施します。

  • IAMロールの作成
  • IAMポリシーの作成
  • IAMロールにIAMポリシーをアタッチ

IAM Roleの作成

SSOログインにより、特定の権限を与えられたユーザーからスイッチロールできるように信頼関係を設定します。
本記事ではSecurityService_ProwlerCheck_SwitchRoleという名前でロールを作成します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_XXXXXXX_XXXXXXXXXXXXXXXX"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}


IAMポリシーの作成

以下のAWSマネージドポリシーをアタッチします。前半2つはProwler公式ドキュメントで必須とされているものです。

  • SecurityAudit(セキュリティ関連リソースへの読み取り専用アクセス)
  • job-function/ViewOnlyAccess
  • AWSCloudShellFullAccess(CloudShell自体の操作用)

上記の標準ポリシーだけでは一部サービスの読み取り権限が不足するため、Prowler公式が配布している追加ポリシーを取得してアタッチします。

curl -o prowler-additions-policy.json \
  https://raw.githubusercontent.com/prowler-cloud/prowler/master/permissions/prowler-additions-policy.json


ダウンロードしたprowler-additions-policy.jsonの内容をIAMコンソールでカスタマー管理ポリシーとして作成し、先ほど作成したIAMロールにアタッチしてください。

ProwlerCheckを動かす

初期構築

CloudShellからProwlerを動かします。事前にSwitchRoleを実施し、SecurityService_ProwlerCheck_SwitchRoleロールにスイッチロールしておきます。
セットアップ手順は、PyPI/公式ドキュメントに記載のpip install prowlerの手順に従います。
前述の理由により、必ず/tmp配下に仮想環境を作成してください。

cd /tmp
python3 -m venv prowlercheck
source prowlercheck/bin/activate
python3 -m pip install --upgrade pip
pip install prowler
prowler -v


Prowlerの起動

ap-northeast-1リージョンを対象にフルスキャンを実行する場合は以下のコマンドを実行します。

prowler aws --region ap-northeast-1 \
  --output-formats html json-ocsf csv \
  --output-directory ./prowler-output-full


実行するとProwlerのバナーが表示され、対象サービスを1つずつスキャンしていきます。
今回の環境では630個のチェックを実行し、完了まで約7分かかりました。

20260822_prowler-cli-scan-start.jpg

スキャンが完了すると、CLIの画面上にも結果のサマリが表示されます。
HTMLレポートを開かなくても、まずはここで全体像を掴めます。

  • サービスごとのFAIL/PASS件数と重要度(Critical/High/Medium/Low)の内訳

20260822_prowler-cli-summary-services.jpg

  • 対応しているコンプライアンスフレームワークごとのFAIL/PASS率

20260822_prowler-cli-summary-frameworks.jpg

CIS AWS Foundations Benchmark v3.0.0など、特定の基準のみに絞ってスキャンすることも可能です。


prowler aws --region ap-northeast-1 \
  --compliance cis_3.0_aws \
  --output-formats html json-ocsf csv \
  --output-directory ./prowler-output-cis


Prowlerが利用可能なコンプライアンス基準の一覧は以下で確認できます。

prowler aws --list-compliance


--regionはリージョンスコープのチェック対象を絞る指定です。IAM等グローバルサービスのチェックは、リージョン指定によらず実行されます。

出力結果のダウンロード

スキャン完了後、指定した--output-directoryのフォルダに結果が出力されます。
lsで中身を確認すると、csv/html/ocsf.jsonの3ファイルが生成されているのが分かります。

20260822_prowler-cli-output-files.jpg

ダウンロードしやすいようにzip化します。


zip -r prowler-output.zip prowler-output-full prowler-output-cis


CloudShellの「アクション」から「ファイルのダウンロード」を選択し、/tmp/prowler-output.zip(実際のパスはpwdで確認してください)を指定してダウンロードします。

レポートの確認

ダウンロードしたzipを解凍します。


ファイル/フォルダ 内容
prowler-output-<アカウントID>-<タイムスタンプ>.html 1ページ完結のダッシュボード兼一覧表
prowler-output-<アカウントID>-<タイムスタンプ>.csv 全チェック結果のCSV(セミコロン区切り)
prowler-output-<アカウントID>-<タイムスタンプ>.ocsf.json OCSF(Open Cybersecurity Schema Framework)準拠の構造化JSON
compliance/ 基準ごとのCSVファイル一式


.htmlファイルをブラウザで開くと、レポートを確認できます。

1枚のHTMLに「サマリカード4枚」と「全チェック結果の1つの巨大な表」が並ぶ構成です。
表側のFilters機能で絞り込みながら読んでいくのが基本の使い方になります。

20260822_prowler-summary-overview.jpg

サマリカードには以下の情報が表示されます。

  • Report Information: Prowlerのバージョン、実行時のコマンドライン引数、実行日時
  • AWS Assessment Summary: 対象AWSアカウントID、監査対象リージョン
  • AWS Credentials: 実行に使用したIAMプリンシパルの情報
  • Assessment Overview: Total Findings(全チェック結果件数)、PassedFailedTotal Resources

20260822_prowler-findings-table.jpg

結果表には、Status(FAIL/PASS/MANUAL)、Severity(critical〜informational)、Service Name、Resource ID(完全なARN)、Risk、Recommendation、対応するコンプライアンス基準など、豊富な列が含まれています。

Resource IDが完全なARN形式である点はSteampipeのレポートと共通です。Service Screener V2の短縮ID形式とは異なる点なので、他ツールと突合する際は注意してください。

20260822_prowler-filters-panel.jpg

Filtersボタンを押すと、Status/Severity/Service Name/Region/Check ID等の項目ごとに絞り込みパネルが展開し、複数項目を組み合わせたAND絞込が可能です。

二次集計や他ツールとの突合には、あらかじめ生成されている.csv/.ocsf.jsonファイルを直接使うのが便利です。

まとめ

本検証では、CloudShellを活用することでローカル環境を汚すことなく、ProwlerCheckをスムーズにセットアップして実行できることを確認しました。

50種類以上のコンプライアンス基準に対応し、頻繁にアップデートされている点はProwlerCheckの大きな特徴です。
出力されたレポートからは、優先的に対応すべき設定不備をFAIL/PASSの色分けと重要度(Severity)で素早く把握できます。

セキュリティの強化は、運用開始後も継続して行うことが重要です。
ぜひ本記事を参考に、皆さんのAWS環境でもProwlerCheckを動かして「セキュリティチェック」を実施してみてください!

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る