はじめに
こんにちは。クラウド活用推進担当、新人の安田です。
今回は、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"
スキャンの実行
リージョンやサービスを指定してスキャンを実行します。以下に実行コマンドの例を示します。
例①:全てのリージョンの全てのサービスを確認
例②:東京リージョンのS3のみを対象
screener --regions ap-northeast-1 --service s3
実行が完了すると、レポートが生成されます。
レポートのパスをコピーして、CloudShell のアクションメニューからファイルのダウンロードします。

パスを貼り付けてダウンロードします。

Zipファイルがダウンロードされるので、展開します。
AWS アカウント ID のフォルダ内に複数の HTML ファイルが出力されています。index.htmlをブラウザで開きます。

各サービスごとに推奨設定に準拠しているのかを確認できます。
IAMのページを見てみると、直近90日使用されていないIAMユーザーがあることが確認できたりします。

組織内のアカウント
ここまでの手順を組織で管理しているアカウントそれぞれに対して実行するのは手間がかかります。
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キーでスキャンしたいアカウントにチェックをいれていきます。

ロール名やexternal idを聞かれますが、何も入力せずにエンターを押して問題ないです。
jsonファイルとして出力して良いかを聞かれるので、「y」を入力して実行します。

作成が成功すると、crossAccounts.jsonというファイルができます。
次のコマンドを実行すると、組織内のアカウントに対してスキャンを実行できます。
screener --regions ALL --crossAccounts 1
レポートのダウンロード方法は先ほどと同様です。
定期実行機能
Screenerによるスキャンを定期的に実行することも可能です。
以下のような構成で定期実行を設定できます。

スケジュール設定
定期的にスキャンをする設定を実際に試してみました。
実行対象の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 トピックが作成されます。
設定したメールアドレスにサブスクリプションを確認するメールが送られるので、添付されたリンクから承認してください。
設定したスケジュールにスキャンが実行され、以下のようなメールが送信されます。

スキャンした結果は、zipファイルでS3バケットに保存されます。

アカウントIDのフォルダにはエクセルファイルが保存されます。
スキャン結果が簡単にまとまっています。


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