Kubernetesにおけるセキュリティスキャン【Kubernetes入門】

セキュリティスキャン

クラスタのPod内部の脆弱性は、たとえあなたが作成したコンテナイメージであっても常に発生しうるものになってます。 例えば、Wordpressフレームワークを使用しているコンテナはWordpressそのものに脆弱性が含まれるため、常に攻撃の危険にさらされるでしょう。

つまり、あなた自身のアプリケーションでもあなたが知らない脆弱性があり、その存在に気づく必要があります。 セキュリティスキャンはアプリケーションの脆弱性を発見するために、とくに本番稼働では必要なものになります。

Clair

Clairはインターネット上の脆弱性情報のデータベースから既知の脆弱性情報を取得して、PostgreSQLに格納するCoreOSのプロジェクトです。

実際に実行される前にコンテナイメージを統計的手法で分析し、安全ではないソフトウェアを検出します。

CICDパイプラインに組み込むことで、すべてのイメージをデプロイ前にテストすることも可能です

サンプルコード

ClairのデータベースとDockerコンテナをセットアップ

docker run -d --name clair-db arminc/clair-db:latest
docker run -p 6060:6060 --link clair-db:postgres -d --name clair arminc/clair-local-scan:v2.0.8

スキャン用のPythonスクリプト

import requests
import json

def scan_image(image_name):
    clair_url = "http://localhost:6060"
    layers_url = f"{clair_url}/v1/layers"
    analyze_url = f"{clair_url}/v1/analyze"

    # Get the layers of the Docker image
    response = requests.get(layers_url, params={"Name": image_name})
    layers = json.loads(response.text)

    # Analyze each layer
    for layer in layers:
        layer_id = layer["Name"]
        requests.post(analyze_url, json={"LayerID": layer_id})

    # Wait for the analysis to complete
    while True:
        analysis_status = requests.get(f"{analyze_url}/{image_name}").json()
        if analysis_status["Status"] == "Finished":
            break

    # Get the vulnerabilities found in the image
    vulnerabilities = requests.get(f"{analyze_url}/{image_name}").json()["Vulnerabilities"]
    return vulnerabilities

if __name__ == "__main__":
    image_name = "your-docker-image:tag"  # ここにスキャンしたいDockerイメージを指定してください
    vulnerabilities = scan_image(image_name)
    print("Vulnerabilities found:")
    for vuln in vulnerabilities:
        print(f"Severity: {vuln['Severity']}, Package: {vuln['Package']}, CVE: {vuln['Name']}")

Aqua security

脆弱性スキャナはClairだけではありません。Aqua security脆弱性スキャナとして機能します。 Clairとの違いはDockerfileに追加するだけで、セットアップが完了する点です。 ただし、無料版でもTOKENが必要になるので、GUIでの手続きは多少必要となります。

ADD https://get.aquasec.com/microscanner /
RUN chmod +x microscanner
RUN microscanner <TOKEN>