ProwlerによるAWSとAzureのセキュリティ監査:クラウドの構成ドリフトを修正するための実践ガイド

Security tutorial - IT technology blog
Security tutorial - IT technology blog

午前2時のクラウドセキュリティ警告

深夜2時、元同僚からの必死な電話でそれは始まりました。彼らのスタートアップは、前月の10倍ものAWS請求書を受け取ったばかりでした。20分ほど調査した結果、原因が判明しました。公開されたS3バケットと、大規模な暗号資産マイニングに悪用されたEC2インスタンスです。原因は?新人エンジニアが接続のデバッグ中にセキュリティグループを「0.0.0.0/0」に開放し、そのまま閉じるのを忘れていたのです。これは、多くのチームが認めたがらないほど頻繁に起こっています。

AWSやAzureのようなクラウドプラットフォームは驚異的なスケーラビリティを提供しますが、同時に失敗の原因も数多く潜んでいます。私たちはインフラを「一度設定すれば終わり」と考えがちですが、実際には「構成ドリフト(設定の乖離)」が静かな脅威となります。ある日はプライベートだったストレージバケットが、翌日にはポリシーのわずかな変更でインターネット全体に公開されてしまうこともあるのです。

なぜクラウド環境は危険な状態に陥るのか

なぜこのようなことが繰り返されるのでしょうか?根本原因を分析すると、通常3つの要因に行き着きます。膨大な複雑性、「クリック操作による運用(Click-ops)」、および責任共有モデルの誤解です。現代のクラウドコンソールには数千もの切り替えスイッチがあり、誤ったボックスにチェックを入れてしまうのは恐ろしいほど簡単です。

インフラのドリフトは、チームがInfrastructure as Code(IaC)を使用せず、UIを介して手動で操作(Click-ops)しているときに発生しやすくなります。バージョン管理された記録がなければ、「誰が何を変更したか」を追跡することは不可能になります。

また多くの開発者は、大手プロバイダーを利用しているからセキュリティは「任せて安心」だと思い込んでいます。しかし、AWSは「クラウド自体の」セキュリティを確保しますが、クラウドの「中身」については利用者が責任を負います。パスワードなしでデータベースを公開したままにすれば、そのツケを払うのはあなたです。自動スキャンは贅沢品ではなく、安心して眠るための唯一の方法なのです。

監査戦略の比較:手動 vs ネイティブツール vs オープンソース

私がクラウド環境の監査を始めた頃は、すべて手作業でした。MFAの状態、IAMユーザー、VPCフローログなどを1つずつ確認し、50行のスプレッドシートに記録していました。1つのアカウントにつき丸2日かかりました。退屈で疲れる作業であり、ヒューマンエラーも避けられませんでした。

AWS Security HubやMicrosoft Defender for Cloudのようなネイティブツールは、標準機能であるため強力です。しかし、インフラが拡大するにつれてコストが急増する可能性があります。また、「ノイズ」が多くなりがちで、特定のアーキテクチャには当てはまらない低優先度の通知の山に、重要なアラートが埋もれてしまうこともあります。

そこでProwlerの登場です。このオープンソースのコマンドラインツールは、300以上の固有のチェック項目を使用して、セキュリティアセスメント、監査、インシデント対応を実行します。数分で環境をCIS(Center for Internet Security)ベンチマークと照らし合わせます。高速かつ無料で、どこに問題があるかを正確に示す簡潔な「合格/不合格」レポートを提供します。

効率的な運用:Prowlerの実践活用

最も効果的なワークフローは、Prowlerを週次の監査として実行するか、理想的にはCI/CDパイプラインのステップとして組み込むことです。ただし、スキャンを実行する前に、自身のアクセス権限が保護されていることを確認してください。これらのツールに必要なIAMユーザーやサービスプリンシパルを作成する際は、常にエントロピーの高い(複雑な)パスワードを使用するようにしています。

私はサーバー側の資格情報には、toolcraft.app/ja/tools/security/password-generator のパスワードジェネレーターを使用しています。これは完全にブラウザ内で動作するため、機密データがネットワークに流れることはありません。セキュリティを監視するために使用するアカウント自体がブルートフォース攻撃を受けないようにするための、わずか5秒の手順です。

Prowlerのインストール

セットアップは簡単です。ProwlerはPythonベースなので、仮想環境を使用してシステムをクリーンに保位、依存関係の競合を避けましょう。

# 仮想環境を作成して有効化する
python3 -m venv prowler-venv
source prowler-venv/bin/activate

# パッケージをインストールする
pip install prowler
prowler -v

AWSインフラのスキャン

AWSをスキャンする場合、Prowlerは既存のAWS CLIの認証情報を使用します。使用するプロファイルに、少なくとも SecurityAuditViewOnlyAccess の管理ポリシーがアタッチされていることを確認してください。

# デフォルトのプロファイルでフルスキャンを実行する
prowler aws

# S3ストレージなど、特定のサービスを監査する
prowler aws --services s3

# コンプライアンスフレームワーク(例:CIS レベル1)に照らしてチェックする
prowler aws --compliance cis_1.5_aws_level1

出力結果には、失敗したリソースが正確に表示されます。バージョニングが無効なS3バケットや、MFAが有効になっていない5年前のIAMユーザーなどがフラグ立てされるでしょう。

Azureインフラのスキャン

ProwlerのAzureサポートは強力です。まず Azure CLI(az login)経由で認証を行う必要があります。その後、Prowlerはそのセッションを使用してサブスクリプションを検査します。

# Azureで認証する
az login

# スキャンを開始する
prowler azure

Prowlerは、「Blobコンテナのパブリックアクセスレベルがプライベートに設定されていない」といった一般的な見落としや、無効化された監視エージェントを検出します。これらは、攻撃者がネットワークへの足がかりを得ようとする際に狙う具体的なギャップです。

レポートは始まりに過ぎない

スキャンは戦いの10%に過ぎません。本当の価値は、混乱を修正することにあります。ProwlerはCSV、JSON、HTMLファイルを含む output ディレクトリを生成します。私は通常、HTMLレポートから確認し、「Critical(緊急)」および「High(重要)」の検出結果を視覚的なヒートマップで把握します。

すべてを一度にやろうとせず、以下の優先順位に従ってください。

  • ID管理を最優先: MFAの不備を修正し、90日以上経過したキーをローテーションし、過剰な権限を持つロールを削除します。
  • データを次に: S3/Blobストレージをロックダウンし、保存データのデータベースを暗号化します。
  • ネットワークをその次に: 「0.0.0.0/0」のセキュリティグループを閉じ、ファイアウォールを厳格化します。

もしProwlerが脆弱なIAMパスワードポリシーを指摘したら、この機会に基準を引き上げましょう。最低14文字以上を推奨します。toolcraft.app/ja/tools/security/password-generator を使用して、真に「強力な」パスワードがどのようなものかをチームに示し、予測可能なパターンから脱却させることができます。

最終ステップ:監査の自動化

手動コマンドに慣れたら、自動化しましょう。要塞化されたLinuxインスタンス上のシンプルなCronジョブや、GitHub Actionを使用して、Prowlerを毎週実行できます。JSONの結果を、暗号化されたプライベートなバケットにアップロードするように設定します。

これにより、セキュリティの状態に関する履歴が作成されます。万が一侵害が発生しても、推測に頼る必要はありません。特定の誤設定がいつ導入されたかを正確に特定できます。「ブラックボックス」化したクラウドから完全に監査されたインフラへの移行には努力が必要ですが、Prowlerのようなツールはその道のりを管理可能なものにしてくれます。

Share: