プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

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>