こんにちは!ニフクラエンジニアの b:id:nifcloud-developers です。
普段はニフクラコントロールパネルなどの開発を担当しています。
今担当しているサービスでは、インフラの構成をTerraform*1を利用してIaC(Infrastructure as Code)で管理するようにしています。
IaCはとても便利ですが、一方で設定ファイルを適用すると、記述されたコードのインフラ情報がそのままクラウド上に構築されてしまうため、設定ファイルのミスの有無やセキュリティの考慮漏れなどを慎重にレビューする必要があります。
昨今、サイバー攻撃によるセキュリティ被害が多発していますが、クラウドの設定ミスに起因するケースも多いようです。
そういった被害に合わないために、あらかじめ脆弱性を検出して対策すること極めて重要ですが、すべてを手作業でチェックするのは大変ですし、レビュー抜けなども発生する可能性があります。
そこで今回はTrivyを使って自動的にニフクラのIaCスキャンをする方法を紹介してみたいと思います。
Trivyとは
Trivyはコンテナイメージやアプリケーションの依存ライブラリの脆弱性等をスキャンできるオープンソースの脆弱性診断ツールです。
それらに加えて、TerraformのIaC設定ファイルについてもスキャンすることができ、クラウドの構成における脆弱性をチェックし設定ミスやセキュリティのベストプラクティスに沿っていない構成などを検知することが可能です。
このIaCスキャンでニフクラもチェックすることができるようになったので、さっそく試してみたいと思います。
TrivyでニフクラのIaCスキャンをしてみる
初めに以下の公式サイトの記述に従って、Trivyをインストールをします。
https://aquasecurity.github.io/trivy/latest/getting-started/installation
IaC設定ファイルをスキャンするには以下のようにコマンドを実行します
trivy config <IaC設定ファイルのパス>
試しに以下のようなTerraform設定ファイルをスキャンしてみます。
- main.tf
terraform { required_providers { nifcloud = { source = "nifcloud/nifcloud" } } } resource "nifcloud_instance" "web" { instance_id = "web001" image_id = "222" key_name = "webkey" network_interface { network_id = "net-COMMON_GLOBAL" } }
スキャンした結果は以下の通りとなります。
$ trivy config main.tf main.tf (terraform) Tests: 2 (SUCCESSES: 1, FAILURES: 1, EXCEPTIONS: 0) Failures: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 1) CRITICAL: Instance does not have a securiy group. ════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ Need to add a security group to your instance. See https://avd.aquasec.com/misconfig/avd-nif-0004
出力結果を確認すると1件の脆弱性があることがわかります。
この例では、サーバーにファイアウォールが設定されていないため指摘されております。
ここで検出された脆弱性の詳細は、Webページでも確認できます。
例えば今回の場合は https://avd.aquasec.com/misconfig/nifcloud/computing/avd-nif-0004/ に記載されています。
もしこのままこのIaC設定ファイルを適用してしまうと、ファイアウォールの無いサーバーがニフクラ上に作成されてしまうので、スキャンして検知しておくことで未然に防ぐことができます。
以下のようにファイアウォールを設定してあげることでこの脆弱性は検知されなくなりました。
resource "nifcloud_instance" "web" { instance_id = "web001" image_id = "222" key_name = "webkey" security_group = "webfw" network_interface { network_id = "net-COMMON_GLOBAL" } }
上記ではサーバーにファイアウォールが設定されていない脆弱性を検知してみましたが、他にもファイアウォールのINルールに0.0.0.0/0が設定されている等様々な脆弱性を検知することができます。
おわりに
Trivyを使ってTerrafomの設定ファイルをスキャンし、ニフクラのインフラ構成に脆弱性が無いかチェックする方法を紹介してみました。
検証できる項目はこちらに一覧があるとおり結構多いので、Trivyでのスキャン結果をインフラ構築時のセキュリティチェックリストの代わりにすることもできるのではないでしょうか。
簡単にインストールできて、コマンド1つで脆弱性スキャンができるのでみなさんも是非試してみてください!