AWS環境チェックツール:
Service Screenerを使ってみた

はじめに

こんにちは。クラウド活用推進担当、新人の安田です。
今回は、Service Screener v2というツールを紹介します。
Service Screener v2は、AWS環境で自動チェックを実行し、推奨事項を提供するオープンソースツールです。
簡単にスキャンを実行することができ、セキュリティ、信頼性、オペレーショナルエクセレンス、パフォーマンス効率、およびサービスレベルでのコスト最適化を改善できます。

目次

Service Screener v2とは?

Service Screener v2は、AWS環境を自動でチェックし、推奨事項を提供してくれるツールです。
以下に、GithubのREADMEのOverviewを翻訳したものを記載します。

Service Screener は、AWS 環境で自動チェックを実行し、AWS とコミュニティのベストプラクティスに基づいて推奨事項を提供するツールです。
AWSのお客様は、このツールを自社の環境で使用し、推奨事項を使用して、セキュリティ、信頼性、オペレーショナルエクセレンス、パフォーマンス効率、およびサービスレベルでのコスト最適化を改善できます。
このツールは、AWS Well Architected Tool を補完することを目的としています。

aws-samples/service-screener-v2 - GitHub

導入手順

Service ScreenerをAWS環境にインストールをして動かしてみます。
まず、スキャン対象のAWSアカウントにサインインし、CloudShellから以下のコードを実行します。

    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"

スキャンの実行

リージョンやサービスを指定してスキャンを実行します。以下に実行コマンドの例を示します。
例①:全てのリージョンの全てのサービスを確認

    screener --regions ALL

例②:東京リージョンのS3のみを対象

    screener --regions ap-northeast-1 --service s3

実行が完了すると、レポートが生成されます。
レポートのパスをコピーして、CloudShell のアクションメニューからファイルのダウンロードします。
スクリーンショット 2025-03-13 102255.png
パスを貼り付けてダウンロードします。
スクリーンショット 2025-03-11 134041.png
Zipファイルがダウンロードされるので、展開します。
AWS アカウント ID のフォルダ内に複数の HTML ファイルが出力されています。index.htmlをブラウザで開きます。
スクリーンショット 2025-03-13 102313.png
各サービスごとに推奨設定に準拠しているのかを確認できます。
IAMのページを見てみると、直近90日使用されていないIAMユーザーがあることが確認できたりします。
スクリーンショット 2025-03-13 102322.png

組織内のアカウント

ここまでの手順を組織で管理しているアカウントそれぞれに対して実行するのは手間がかかります。
AWS Organizationsでアカウントを管理している場合、管理アカウントから子アカウントに対して一括スキャンをすることが可能です。

Organizationsを管理しているAWSアカウントにサインインし、CloudShellからまずScreenerコマンドを使えるようにします。

    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"

その後、以下のコマンドを実行してスキャン対象の子アカウントのリストを作成します。

    python3 organizationAccountsInit.py

矢印キーとtabキーでスキャンしたいアカウントにチェックをいれていきます。
スクリーンショット 2025-03-25 180653.png
ロール名やexternal idを聞かれますが、何も入力せずにエンターを押して問題ないです。
jsonファイルとして出力して良いかを聞かれるので、「y」を入力して実行します。
スクリーンショット 2025-03-13 102340.png
作成が成功すると、crossAccounts.jsonというファイルができます。
次のコマンドを実行すると、組織内のアカウントに対してスキャンを実行できます。

    screener --regions ALL --crossAccounts 1

レポートのダウンロード方法は先ほどと同様です。

定期実行機能

Screenerによるスキャンを定期的に実行することも可能です。
以下のような構成で定期実行を設定できます。
screener-architecture.png

スケジュール設定

定期的にスキャンをする設定を実際に試してみました。
実行対象のAWSアカウント上で、CloudShellから以下のコードを実行します。

    ## Perform normal Screener setup
    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


    ## Set up your environment variables to deploy the infrastructure
    export NAME=""
    export EMAIL_LIST=""
    export SERVICES=""
    export REGIONS=""
    export FREQUENCY=""
    export CROSSACCOUNTS=""
    export BUCKET_NAME=""
    ### Example
    export NAME="scheduler-sample"
    export EMAIL_LIST="scheduler@amazon.com"
    export SERVICES="ec2,rds"
    export REGIONS="ap-southeast-1, us-east-1"
    export FREQUENCY="cron(1 9 * * ? *)"
    export CROSSACCOUNTS='{"general": {"IncludeThisAccount": true,"RoleName": "OrganizationAccountAccessRole","ExternalId": ""},"accountLists": {"123456789": {}}}'
    export BUCKET_NAME="example-scheduler"

FREQUENCY形式の例を次に示します。(これは実行するコードではありません)

    # Run weekly on every Sunday at 0030 UTC
    cron(30 0 ? * SUN *)
    # Run monthly on every 28th of the month at 0500 UTC
    cron(0 5 28 * ? *)
    # Run daily at 2315 UTC
    cron(15 23 * * ? *)


    ## Prepare the architecture
    export AWS_DEFAULT_REGION=
    cd usecases/scheduler/src/infra
    pip install -r requirements.txt
    cd ../lambda/ssv2_resultProcesser
    pip install -r requirements.txt -t .
    cd ../../infra
    cdk synth

続けて以下のコードを実行します。

    ## If there is a CDK CLI incompatibility error, update your CDK
    sudo npm install -g aws-cdk@latest


    ## Deploy the architecture
    cdk bootstrap
    cdk deploy
    ## cdk deploy will ask if you wish to deploy the changes, type "y" and press "enter"


    ## After CDK deploy finish, run the following commands to insert the first configuration to dynamodb
    chmod +x ./deploy.sh
    ./deploy.sh

設定した環境変数がDynamoDBに保存され、EventBridge スケジューラと SNS トピックが作成されます。
設定したメールアドレスにサブスクリプションを確認するメールが送られるので、添付されたリンクから承認してください。

設定したスケジュールにスキャンが実行され、以下のようなメールが送信されます。
スクリーンショット 2025-03-25 180700.png

スキャンした結果は、zipファイルでS3バケットに保存されます。
スクリーンショット 2025-03-25 091813.png

アカウントIDのフォルダにはエクセルファイルが保存されます。
スキャン結果が簡単にまとまっています。
スクリーンショット 2025-03-25 091833.png
スクリーンショット 2025-03-13 103417.png

最後に

今回はAWS環境チェックツール「Service Screener v2」を紹介しました。
クロスアカウント機能やスケジュール機能を活用することで定期的な環境チェックを簡単に行えそうだと感じました。
この記事が参考になれば幸いです。ここまで読んでいただきありがとうございました。

参考

aws-samples/service-screener-v2 - GitHub

カテゴリー

クラウド基盤ソリューション