Ansible-Lockdown でEC2インスタンスをCISベンチマークに準拠させ、Amazon Inspector v2 で評価してみる
1. はじめに
こんにちは。アノテーション株式会社のあのふじたです。
今回は、Ansible-Lockdown を使用して Amazon Linux 2023のEC2インスタンスをCISベンチマークに(なるべく)準拠させつつ
Amazon Inspector v2 で初期状態と適用後の評価結果を比較し、セキュリティ強化の効果を確認していきます。
記事の目的と概要
本記事では、Ansible-Lockdownを活用してAmazon Linux 2023のEC2インスタンスをCISベンチマークに準拠させる方法を解説します。
さらに、Amazon Inspector v2を用いて、適用前後の評価結果を比較し、セキュリティ強化の効果を確認します。
CISベンチマークとは
CIS(Center for Internet Security)ベンチマークは、システムのセキュリティ設定に関する業界標準のベストプラクティスを提供するガイドラインです。
これに準拠することで、システムのセキュリティレベルを向上させることができます。
Ansible-Lockdownの紹介
Ansible-Lockdownは、Ansibleを用いてシステムをCISベンチマークに準拠させるためのプレイブックを提供するプロジェクトです。
これにより、手動での設定作業を自動化し、一貫性のあるセキュリティ設定を適用できます。Amazon Linux 2023向けのプレイブックも提供されています。
また有償サポートも Lockdown Enterpriseにより提供されています。
※現時点で日本語サポートについては確認できませんでした。
2. 前提条件と環境設定
必要なツールと環境
- Ansible:構成管理ツール
- Ansible-Lockdown:CISベンチマーク準拠のためのAnsibleプレイブック
- Amazon Linux 2023 の EC2インスタンス 2台:評価対象のインスタンス と Ansible実行ホスト
- Amazon Inspector v2:CISベンチマーク評価ツール
EC2インスタンスの起動
以下の2台の Amazon Linux 2023 インスタンスを同一の Public Subnet 内で立ち上げます。
※SecurityGroupでの適切なSSH設定とSSM用に設定されたIAM インスタンスプロフィールを選択しておきます。
- 評価対象のインスタンス(target-amzn2023) t4g.nano
- Ansible実行ホスト(ansible-host-amzn2023) t4g.micro
評価対象のEC2インスタンスの要件として以下があります。
- サポート対象のOSであること
- EC2インスタンスがSSMのマネージドノードであること
- InspectorのDeep inspectionが有効であること
- EC2インスタンスにInspector SSMプラグインがインストールされていること
- EC2インスタンスのIAMロールにAmazonSSMManagedInstanceCoreポリシーとAmazonInspector2ManagedCisPolicyポリシーといったSSMがインスタンスを管理するための許可と、Amazon Inspector がそのインスタンスに対して CIS スキャンを実行するための許可されていること
https://dev.classmethod.jp/articles/amazon-inspector-cis-benchmark-assessments-operating-systems-ec2-instances/
Ansibleのインストール
ansible-host-amzn2023 インスタンス起動後、Ansible のインストールを行います。
Ansible は、以下のコマンドでインストールできます。
$ sudo yum install -y ansible
Ansible-Lockdownのセットアップ
Ansible-LockdownのAmazon Linux 2023向けリポジトリをクローンします。
$ git clone https://github.com/ansible-lockdown/AMAZON2023-CIS.git
$ cd AMAZON2023-CIS
3. 初期状態のCISベンチマーク評価
Amazon Inspector v2の概要
Amazon Inspector v2は、AWSリソースの脆弱性やセキュリティ設定を評価するサービスです。CISベンチマーク評価もサポートしています。
EC2インスタンスへのタグ付け
評価対象のEC2インスタンスにタグを付与します。今回はキーをcis-check
、値をtrue
と設定しました。
Amazon Inspector v2の設定とスキャン実行
- Amazon Inspectorコンソールで、[On-demand scans] > [CIS scans] > [Create New scan]を選択します。
- スキャン設定名を入力し、先ほど付与したタグ(キー:
cis-check
、値:true
)を指定します。 - CISベンチマークレベルを選択し、スキャンを実行します。
評価結果の確認
スキャン完了後、結果を確認します。
起動時の評価は 110/179
なので約61%準拠していることになります。
初期値としては悪くはない数値ではないでしょうか。
CIS LEVEL 2 でもスキャンしてみました。
127/243
なので約52%準拠していることになります。
こちらはちょっと微妙な数値ですね。
4. Ansible-Lockdownの適用手順
EC2インスタンスへのAnsible接続設定
対象のEC2インスタンスの情報を書いたAnsibleのインベントリファイルを作成します。
vi inventory.yml
---
all:
hosts:
target-amzn2023:
ansible_host: <target-amzn2023 のプライベートIPV4アドレス>
ansible_user: ec2-user
ansible_ssh_private_key_file: ~/.ssh/ansible.key
ansible_port: 22
Ansibleプレイブックの作成と実行
Ansible-Lockdownのプレイブックを実行して、CISベンチマークに準拠した設定を適用します。
ansible-playbook -vv -i inventory.yml site.yml
中断されました。
TASK [/home/ec2-user/ansible/AMAZON2023-CIS : Ensure root password is set] ****************************************************************************************
task path: /home/ec2-user/ansible/AMAZON2023-CIS/tasks/main.yml:26
fatal: [target-amzn2023]: FAILED! => {"changed": false, "cmd": "passwd -S root | grep \"Password set, SHA512 crypt\"", "delta": "0:00:00.009311", "end": "2025-06-01 01:23:45.796025", "msg": "non-zero return code", "rc": 1, "start": "2025-06-01 01:23:45.796025", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
PLAY RECAP ***********************************************************************************************************************************************
target-amzn2023 : ok=3 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
今回はエラー箇所をSkipし、プレイブックの実行完了までをめざします。
ログに表示されているエラー箇所を確認します。
task path: /home/ec2-user/ansible/AMAZON2023-CIS/tasks/main.yml:26
- name: Ensure root password is set
when:
- amzn2023cis_rule_4_6_6
block:
- name: Ensure root password is set
ansible.builtin.shell: passwd -S root | grep "Password set, SHA512 crypt"
changed_when: false
register: root_passwd_set
- name: Ensure root password is set
ansible.builtin.assert:
that: root_passwd_set.rc == 0
fail_msg: "You have rule 4.6.6 enabled this requires that you have a root password set"
success_msg: "You have a root password set"
tags:
- level1-server
- patch
- accounts
- root
- rule_4.6.6
ここで block されています。
記述例に従い Skip するようにします。
ansible-playbook -vv -i inventory.yml -e '{ "amzn2023cis_rule_4_6_6":false }' site.yml
TASK [/home/ec2-user/ansible/AMAZON2023-CIS : 1.3.1 | PATCH | Ensure AIDE is installed | Install AIDE] ************************************************************
task path: /home/ec2-user/ansible/AMAZON2023-CIS/tasks/section_1/cis_1.3.x.yml:5
fatal: [target-amzn2023]: FAILED! => {"changed": false, "failures": ["No package aide available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []}
PLAY RECAP ***********************************************************************************************************************************************
target-amzn2023 : ok=84 changed=22 unreachable=0 failed=1 skipped=36 rescued=0 ignored=0
またBlockで停止されました。
同様にSkipして進めます。
最終的には以下のようにかなりSkipしました。
また、何度か再実行しているので1回で完了までいかないかもしれません。
ansible-playbook -vv -i inventory.yml -e '{ "amzn2023cis_rule_4_6_6":false, "amzn2023cis_config_aide": false, "amzn2023cis_rule_3_4_1_2": false, "amzn2023cis_rule_3_4_2_1": false, "amzn2023cis_rule_3_4_2_4": false, "amzn2023cis_rule_5_1_1_1": false, "amzn2023cis_rule_5_1_1_2": false,"amzn2023cis_rule_5_1_1_4": false, "amzn2023cis_rule_5_1_1_5": false, "amzn2023cis_rule_5_1_1_7": false, "amzn2023cis_rule_5_3": false }' site.yml
適用結果の確認
TASK [/home/ec2-user/ansible/AMAZON2023-CIS : If Warnings found Output count and control IDs affected] ************************************************************
task path: /home/ec2-user/ansible/AMAZON2023-CIS/tasks/main.yml:207
ok: [target-amzn2023] => {
"msg": "You have 12 Warning(s) that require investigating that are related to the following benchmark ID(s) [1.1.2.1] [1.1.3.1] [1.1.4.1] [1.1.5.1] [1.1.6.1] [1.1.7.1] [1.1.8.1] [1.2.3] [1.6.1.6] [2.4] [6.1.9] [6.1.12]"
}
PLAY RECAP ***********************************************************************************************************************************************
target-amzn2023 : ok=326 changed=2 unreachable=0 failed=0 skipped=211 rescued=0 ignored=0
かなり Skipped が多いのが気になりますがプレイブックの実行が完了しました。
実行結果にはエラーがないことがわかります。
5. Ansible-Lockdown適用後のCISベンチマーク再評価
Amazon Inspector v2による再スキャンの実行
再度、Amazon Inspector v2でCISスキャンを実行します。
スキャン名を以下に変更してlevel1 とlevel2 をそれぞれ1回実行しています。
cis level1 amzn2023 lockdown
cis level2 amzn2023 lockdown
再評価結果の確認とレポートの取得
スキャン完了後、結果を確認します。
cis level1 amzn2023 lockdown
Ansible 実行後の評価は 150/179
なので約84%準拠となりました。
良い数値に改善されたのではないでしょうか。
cis level2 amzn2023 lockdown
Ansible 実行後の評価は 179/243
なので約73%準拠となりました。
初期値約52%準拠から20%以上改善されたので良いとは思いますが、今一つの数字でした。
6. 考慮事項とベストプラクティス
適用時の注意点
- Ansible-Lockdownのプレイブックを適用する前に、必ずバックアップを取得して適用してください。
- 実環境で試す場合はプレイブックの設定を確認し、環境に適したカスタマイズを行ってください。
7. まとめ
本記事では、今回は、Ansible-Lockdown を使用して Amazon Linux 2023のEC2インスタンスをCISベンチマークに(なるべく)準拠させつつAmazon Inspector v2 で初期状態と適用後の評価結果を比較し、セキュリティ強化の効果を確認しました。
尚、Amazon Inspector v2がEC2インスタンスのCISベンチマークの評価でFAILEDとなった項目の修正方法はRemediationから確認できます。
CISベンチマークの運用を自社で行う際は Ansible-Lockdown の検討もありかと感じました。
参考文献
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。