0. はじめに
Re:Q Techブログをご覧いただきありがとうございます。クラウド&ネットワーク技術統括部のN.Tです。
皆さんは、自社のAWS環境がセキュリティのベストプラクティスやWell-Architected Frameworkに沿って適切に設定されているか、定期的に確認できているでしょうか?
今回は、AWS環境の潜在的なリスクや設定不備を自動でスキャンし、視覚的なレポートを出力してくれる強力なツール 「AWS Service Screener V2」 を実際に動かしてみたいと思います。
本記事では、ローカル環境を汚さずにブラウザ上から手軽に実行できる AWS CloudShell を用いた初期構築手順から、実際のスキャン実行、そして出力されたレポートの確認方法までをステップバイステップでご紹介します。
1. 環境情報
CloudShellの初期状態を確認し、必要なソフトウェアがインストールされていることを確認します。
gitバージョン
~ $ git -v
git version 2.50.1
- pythonバージョン
~ $ python --version
Python 3.9.25
- pipバージョン
~ $ pip -V
pip 21.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)
2. 事前準備
- CloudShellからAWS環境をスキャンするために必要なIAM権限を準備します。
- 本環境ではSSOログインを使用しているため、最小権限のみを指定したIAMロールにスイッチロールしてAWS Service Screener V2を動かします。
- そのため、以下の作業を実施します。
- IAMロールの作成
- IAMポリシーの作成
- IAMロールにIAMポリシーをアタッチ
2-1. IAM Roleの作成
SSOログインにより、特定の権限を与えられたユーザーからスイッチロールできるように信頼関係を設定します。
本記事では
SecurityService_Test_SwitchRole-20260311という名前でロールを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXX:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_XXXXXXX_XXXXXXXXX"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
2-2. IAMポリシーの作成
以下のAWSマネージドポリシーをアタッチします。
- ReadOnlyAccess
- AWSCloudShellFullAccess
以下のカスタムポリシーを作成し、2-1.で作成したIAMロールにアタッチします。
- SecurityServiceTestCloudFormation_20260311
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:DeleteStack",
"iam:SetSecurityTokenServicePreferences"
],
"Resource": "*"
}
]
}
3. AWS Service Screener V2を動かす
3-1. 初期構築
CloudShellからAWS Service Screener V2を動かします。
事前にSwitchRoleを実施して、SecurityServiceTestSwitchRole-20260311ロールにスイッチロールします。
CloudShellでのセットアップ手順を実施します。
- 手順については、GithubのREADMEに記載のある
Installing service-screener V2の手順に従います。
AWS Service Screener V2 README
cd /tmp
python3 -m venv .
source bin/activate
python3 -m pip install --upgrade pip
rm -rf service-screener-v2
git clone https://github.com/aws-samples/service-screener-v2.git
cd service-screener-v2
pip install -r requirements.txt
python3 unzip_botocore_lambda_runtime.py
alias screener='python3 $(pwd)/main.py'
- ↓初学者向け説明
| コマンド | 意味 |
|---|---|
| `cd /tmp` | 一時ディレクトリ(`/tmp`)に移動します。 |
| `python3 -m venv .` | 現在のディレクトリにPython仮想環境を作成します。 |
| `source bin/activate` | 作成した仮想環境を有効化します。 |
| `python3 -m pip install --upgrade pip` | `pip` 自体を最新バージョンにアップグレードします。 |
| `rm -rf service-screener-v2` | 既存の同名ディレクトリを削除し、クリーンな状態にします。 |
| `git clone ...` | 本体プログラムをGitHubからダウンロードします。 |
| `cd service-screener-v2` | ダウンロードしたディレクトリの中に移動します。 |
| `pip install -r requirements.txt` | 実行に必要なライブラリをまとめてインストールします。 |
| `python3 unzip_botocore_lambda_runtime.py` | ツール独自のセットアップスクリプトを実行します。 |
| `alias screener=...` | `screener` というコマンド名でツールを実行できるようにエイリアスを設定します。 |
3-2. Screenerの起動
- ap-northeast-1リージョンのみを対象に起動する場合は以下のコマンドを実行します。
$ screener --regions ap-northeast-1
- 実行後、スキャンが開始されます。
(tmp) service-screener-v2 $ screener --regions ap-northeast-1
-- Acquiring identify info...
=================================================
Processing the following account id: XXXXXXXXXXX
=================================================
[info] Empty CF stacked created successfully, name:ssv2-XXXXXXXXXXXX
PREPARING -- IAM::us-east-1
PREPARING -- CLOUDFRONT::us-east-1
PREPARING -- LAMBDA::ap-northeast-1
PREPARING -- EC2::ap-northeast-1
... (Lambda) - GenerativeAiUseCasesStack-APIDeleteChatXXXXXXXX-XXXXXXXXXXX
... (CloudFront::Distribution) - XXXXXXXXXXXXXX
Generating IAM Credential Report...
COMPLETED -- CLOUDFRONT::us-east-1 (0.923s)
PREPARING -- CLOUDTRAIL::ap-northeast-1
... (Cloudtrail) - Evaluation-XXXXXXX_awslog
... (CloudTrail:Common)
COMPLETED -- CLOUDTRAIL::ap-northeast-1 (0.305s)
PREPARING -- ELASTICACHE::ap-northeast-1
COMPLETED -- ELASTICACHE::ap-northeast-1 (0.132s)
PREPARING -- EKS::ap-northeast-1
... (Compute Optimizer Recommendations)
... (Cost Explorer Recommendations)
COMPLETED -- EKS::ap-northeast-1 (0.209s)
PREPARING -- DYNAMODB::ap-northeast-1
... (Dynamodb::Generic)
... (Lambda) - GenerativeAiUseCasesStack-APIFindChatbyIdXXXXXXXX-XXXXXXXXXXX
- スキャンが終了すると、以下のように
output.zipが作成されます。
Generating Framework - RBI
... Running CP - TA, it can takes up to 60 seconds
Error: TA unable to generate. Access denied due to support level
Pages generated, download output.zip to view
CloudShell user, you may use this path: =====> /tmp/service-screener-v2/output.zip <=====
@ Thank you for using Service Screener, script spent 173.734s to complete @
3-3. 出力結果のダウンロード
- CloudShellの
アクションからファイルのダウンロードを選択します。 - ポップアップ画面が表示されるため、
/tmp/service-screener-v2/output.zipを指定してダウンロードします。
ファイルURLの指定は、スキャン処理完了後に表示される"CloudShell user, you may use this path: =====> /tmp/service-screener-v2/output.zip <====="より、"=====>" と "<=====" に囲まれているパスを指定してください。
3-4. レポートの確認
- ダウンロードした
output.zipを解凍します。 解凍後、
outputディレクトリ直下にあるindex.htmlをブラウザで開きます。index.htmlを開くと、以下のようなページが表示されます。
各項目についての説明
重要度別(Criticality)の見出し
- スキャンで見つかったすべての指摘事項を、そのリスクの高さに応じて集計しています。
- High (赤): 最優先で対応すべき重大なリスク
- Medium (黄): 対応が推奨される中程度のリスク
- Low (青) / Informational (紺): 軽微な設定不備や、現状の情報の提示
Well-Architected Frameworkの「柱」別ステータス
- AWSのベストプラクティスである5つのカテゴリごとに、状況を色分けして表示しています。
※それぞれのボックスをクリックすると、詳細な分析ページへ移動できます。 - Security (セキュリティ)
- Reliability (信頼性)
- Cost Optimization (コスト最適化)
- Performance Efficiency (パフォーマンス効率)
- Operational Excellence (運用上の優秀性)
- AWSのベストプラクティスである5つのカテゴリごとに、状況を色分けして表示しています。
リスクの分布グラフ(High Risk Charts)
- 「どこにリスクが集中しているか」を視覚的に把握できます。
- Group by Region: リージョンごとのリスク分布(東京リージョンにどれくらいあるか等)
- Group by Service: サービスごとのリスク分布(IAMに多いのか、EC2に多いのか等)
詳細ページへのナビゲーション(左サイドバー)
- Compliances: FTR、CIS、WAFSなどの特定のフレームワーク基準での結果
- References: EC2、S3、Lambdaなど、各サービスごとの具体的なリソース一覧と設定状況
まずはこのHome画面で、「High」がどのサービス(例えばIAMやS3など)に集中しているかを確認し、そこからサイドバーで個別のサービス詳細へ掘り下げていくのが一般的な調査の流れになります。
4. まとめ
本検証では、CloudShellを活用することでローカル環境を一切汚すことなく、AWS Service Screener V2をスムーズにセットアップして実行できることを確認しました。
出力されたHTMLのレポートは非常に視覚的で分かりやすく、「High Risk」なリソースやWell-Architected Frameworkに沿っていない箇所をグラフィカルに提示してくれます。
これを使うことで、膨大なAWSリソースの中から優先的に対応すべき課題を短時間で特定することができます。
セキュリティの強化やコストの最適化は、運用開始後も継続して行うことが重要です。
ぜひ本記事を参考に、皆さんのAWS環境でもService Screener V2を動かして「セキュリティチェック」を実施してみてください!




