コンテナイメージ CI/CD パイプラインの接続

注意: この機能は、Cloud Vulnerability Management ライセンスでは使用できません。

CI/CD パイプラインを Tenable One Cloud Exposure に接続し、関連するコードリポジトリへのアクセスを許可します。

これは、コンテナイメージ CI/CD パイプラインを Tenable に接続するための統合ガイドです。

Azure Pipelines の追加

Azure Pipelines でパイプラインを追加した後、Azure Pipelines パラメーターを使用して、スキャン/同期設定を構成し、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整できます。

要件:

  • Node.js と npm をビルドエージェントにインストールする必要があります。

    注意: Microsoft がホストするエージェントにはデフォルトで含まれていますが、セルフホストのビルドエージェントを使用している場合は、環境の PATH 変数で明示的にインストールまたはアクティブ化する必要があります。これを行うには、Microsoft の NodeTool タスクを追加します。行わなかった場合、以下のエラーが発生する可能性があります。 Parameter 'toolPath' cannot be null or empty
  • Docker をインストールする必要があります。詳細は関連する Azure ドキュメントを参照してください。

パイプラインを追加する方法

  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、 [Azure Pipelines] をクリックします。[Azure Pipelines の追加] ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1)。トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  4. API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
  5. TenableをインストールするAzure DevOps 拡張機能 (ウィザードのステップ 3):
    1. このリンクをクリックして、Visual Studio マーケットプレースから拡張機能にアクセスします。
    2. [Get it Free] をクリックします。拡張機能の使用に追加料金はかかりません。
    3. 関連する Azure DevOps 組織を選択し、[インストール] をクリックします。
    4. これで拡張機能がインストールされたので、 [組織に進む] をクリックして Azure DevOps サイトに移動できます。
  6. (推奨) シークレット変数を追加します (ウィザードのステップ 4)。UI を使用してシークレット変数を設定するには、次の手順に従います。

    注意: Tenable の API トークンを保護するには、 シークレット変数、または代替シークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。Azure Pipelines 変数は、Tenable のスキャンの利用方法に応じてさまざまな範囲で保存できます。Tenable のトークンは、IaC コードとともにリポジトリにリンクされたワークフローのみに関連付けることが推奨されていますが、必須ではありません。
    1. Azure DevOps にログインし、 [パイプライン] をクリックします。
    2. 関連するパイプラインを選択し、[編集] をクリックします。
    3. [変数] をクリックします。
    4. プラス記号 (+) または [New variable] (新しい変数) をクリックします
    5. 以下の詳細を入力し、[OK] をクリックします。
      • 名前を TENABLE_API_TOKEN に設定します。
      • 前のステップで作成したトークンを [値] として貼り付けます。
      • [Keep this value secret] にチェックを入れます。

    完了したら、 クラウドサイバーエクスポージャー コンソールウィザードの 次へ をクリックして続行します。

  7. タスクを追加します。クラウドサイバーエクスポージャー コンテナー イメージのスキャン タスクを Azure Pipelines に追加します (ウィザードの手順 5)。
    1. Azure DevOps にログインし、 [パイプライン] をクリックします。
    2. 関連するパイプラインの横にある三点リーダーアイコンをクリックし、[編集] をクリックします。
    3. コードで、Tenable のタスクを追加するステージを選択します。
    4. タスクアシスタントで、[クラウドサイバーエクスポージャー Container Image Scan] タスクを検索してクリックします。
    5. タスクを追加するには、これらの値を入力してから、[追加] をクリックします。
      • API トークン: $(TENABLE_API_TOKEN)
      • API URL: https://app.tenable.com/
      • 名前:(ここに画像名を入力します)
      • 必要に応じて 、任意の詳細 設定を使用します (詳細については、「 Azure Pipelines パラメーター を参照してください)。
    6. 更新されたパイプライン YAML を保存します。アクションがトリガーされたら、[Risks > Container Image CI/CD Scans] (コンテナイメージ CI/CD スキャンのリスク) にスキャン結果が表示されます。
  8. コンソール クラウドサイバーエクスポージャー ウィザードで、[完了] をクリックします。

GitHub アクションを追加する

アクションを追加した後、 GitHub アクションパラメーター を使用して、スキャン設定を行い、 Tenable が環境をスキャンする方法を微調整できます。

GitHub アクションを追加するには

  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、 GitHub Actions をクリックします。[Add GitHub Actions] ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1)。トークンの名前を入力し、「 次へ 」をクリックしてトークンを作成します。
  4. API トークンを保存します (ウィザードのステップ 2)。生成されたトークンをコピーして安全な場所に保存します。この情報は、ウィザードの次のステップで必要になります。完了したら、[次へ] をクリックします。
  5. (推奨) GitHub シークレットを追加します (ウィザードのステップ 3)。API トークンを安全に格納するには、 GitHub Actions シークレット、または他のシークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。

    GitHub リポジトリに新しいシークレットを作成するには、以下の手順を実行します。

    1. GitHub.com から、リポジトリのメインページに移動します。
    2. リポジトリ名の下にある [Settings] をクリックします。
    3. サイドバーの「セキュリティ」セクションで、「 シークレット」を選択し、「 アクション」 をクリックします。
    4. [新しいリポジトリシークレット] をクリックします。
    5. [名前] 入力ボックスに「TENABLE_API_TOKEN」と入力します。
    6. 前のステップで作成したトークンの値を入力します。
    7. [シークレットの追加] をクリックします。
      完了したら、クラウドサイバーエクスポージャー コンソールウィザードの [次へ] をクリックします。
  6. アクションを追加します (ウィザードのステップ 4)。次のコンテナイメージのスキャンアクションを GitHub ワークフローに追加します。

    コピー

    YAML

    steps:
    - uses: actions/checkout@v3
    - name: Scan container image with Tenable One Cloud Exposure
      uses: tenable/cloud-security-actions/container-image/scan@v1
      with:
        api-token: ${{ secrets.TENABLE_API_TOKEN }}
        api-url: https://app.tenable.com/
        name: <place your image name here>        

    アクションがトリガーされたら、[Risks > Container Image CI/CD Scans] (コンテナイメージ CI/CD スキャンのリスク) にスキャン結果がクラウドサイバーエクスポージャー表示されます。

  7. 完了したら、[完了] をクリックします。

GitLab パイプラインの追加

GitLab パイプラインを追加した後、 Docker イメージTenable CLI を使用してスキャン設定を行い、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整できます。

GitLab の CI/CD YAML 設定の設定オプションの詳細については、 GitLab のドキュメントを参照してください。

GitLab パイプラインを追加するには

  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、[GitLab CI/CD] をクリックします。[Add GitLab CI/CD] (GitLab CI/CD の追加) ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1)。トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  4. API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
  5. (推奨) 変数を追加します (ウィザードのステップ 3)。プロジェクトで CI/CD 変数を定義する には、次の手順に従います。

    注意: Tenable の API トークンを保護するには、マスクされた変数、または他のシークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。GitLab CI/CD 変数は、Tenable のスキャンの利用方法に応じて複数のレベルで保存できます。Tenable のトークンは、IaC コードとともにリポジトリにリンクされたパイプラインのみに関連付けることが推奨されていますが、必須ではありません。
    1. GitLab にログインします。
    2. プロジェクトの Settings > CI/CD に移動します。
    3. [変数] で、[展開] をクリックします。
    4. [変数の追加] をクリックします。
    5. 次の詳細を入力します。
      1. [キー] を TENABLE_API_TOKEN に設定します。
      2. 前のステップで作成したトークンを [値] として貼り付けます。
      3. 該当する場合は、[環境範囲] を選択します。
      4. [フラグ] の下にある [変数をマスク] というボックスにチェックを入れます。
      5. [変数の追加] をクリックします。

    完了したら、クラウドサイバーエクスポージャー コンソールウィザードの [次へ] をクリックします。

  6. ステージを追加します (ウィザードのステップ 4)。次のコンテナイメージスキャンの手順を .gitlab-ci.yml ファイルに追加します。

    コピー

    YAML

    include:
    - component: $CI_SERVER_FQDN/tenb/cloud-security/components/container-image-scan@1
    inputs:
      api-token: $TENABLE_API_TOKEN
      api-url: https://app.tenable.com/
      name: <place your image name here>
      stage: tenable-cloud-security

    stages:
    - tenable-cloud-security

    スキャンがトリガーされたら、[コンテナイメージ CI/CD スキャンのリスク] > クラウドサイバーエクスポージャーにスキャン結果が表示されます。

  7. クラウドサイバーエクスポージャー コンソールウィザードで [完了] をクリックします。

Jenkins パイプラインの追加

Jenkins パイプラインを追加した後、 Docker イメージで CLI を使用してTenable スキャン/同期設定を行い、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整できます。

要件:

  • Docker がホストにインストールされていること
  • Docker プラグインを Jenkins にインストールする必要があります
  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、[Jenkins Pipeline] をクリックします。[Add Jenkins Pipeline] (パイプラインの追加) ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1)。トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  4. API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
  5. (推奨) Jenkins 認証情報を追加します (ウィザードのステップ 3)。新しいグローバル認証情報を Jenkins に追加するには、以下の手順に従います。

    注意: Tenable の API トークンを保護するには、Jenkins 認証情報、または他のシークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。Jenkins 認証情報は、Tenable のスキャンの利用方法に応じて複数のレベルで保存できます。Tenable のトークンは、IaC コードとともにリポジトリにリンクされたパイプラインのみに関連付けることが推奨されていますが、必須ではありません。
    1. Jenkins にログインします ([Credentials] (認証情報) > [Create permission] (権限の作成) を通じてユーザーとして)。
    2. ホームページで、[Manage Jenkins > Manage Credentials] をクリックします。
    3. 右側の [ストア スコープを Jenkins] で、[Jenkins] をクリックします。
    4. [System] (システム) で、[Global credentials (unrestricted)](グローバル認証情報 (無制限)) リンクをクリックして、デフォルトのドメインにアクセスします。
    5. 左側にある [Add Credentials] (認証情報の追加) をクリックします (認証情報が存在しない場合は、認証情報を追加します)。
      1. [種類] フィールドから、[シークレット テキスト] を選択します。
      2. [Scope](範囲) フィールドで、[Global] (グローバル) を選択します。
      3. ウィザードで以前に作成した API トークン をコピーし、[Secret] (シークレット) フィールドに貼り付けます。
      4. [ID] フィールドで、[tenable-api-token] を指定します。
      5. トークンについてオプションの説明を追加します。
      6. [OK] をクリックして認証情報を保存します。

    完了したら、 クラウドサイバーエクスポージャー コンソールウィザードの 次へ をクリックします。

  6. ステージを追加します (ウィザードのステップ 4)。スキャン結果を生成するには、次のコンテナイメージスキャンの手順を Jenkins パイプラインに追加し、必要に応じて環境に合わせて調整します。

    注意:

    • スキャン結果を生成するには、環境変数が含まれていることを確認してください。
    • TENABLE_API_TOKENフィールドは機密性が高いため、シークレットとして扱う必要があります。
    • Git リポジトリ内でスキャンを実行することをお勧めします。何らかの理由でこれが不可能な場合は、「 非 Git リポジトリの追加変数」を参照してください。
    コピー

    Groovy

    pipeline {
       agent any
        stages {
            stage('Checkout') {
                steps {
                    git '<PLACE YOUR REPOSITORY URL HERE>'
                }
            }
            stage('Scan container image with Tenable One Cloud Exposure') {
                environment {
                    TENABLE_API_TOKEN = credentials('tenable-api-token')
                    TENABLE_API_URL = 'https://app.tenable.com/'
                    TENABLE_CODE_BRANCH = "${env.CHANGE_BRANCH ?: env.GIT_BRANCH}"
                    TENABLE_CODE_COMMIT_HASH = "${env.GIT_COMMIT}"
                    TENABLE_CODE_COMMIT_USER = "${env.CHANGE_AUTHOR}"
                    TENABLE_PIPELINE_RUN_ID = "${env.BUILD_ID}"
                    TENABLE_PIPELINE_RUN_TRIGGER = "${currentBuild.getBuildCauses()[0].shortDescription}"
                    TENABLE_PIPELINE_RUN_URL = "${env.BUILD_URL}"
                }
                steps {
                    script {
                            docker.image('tenable/cloud-security-scanner:latest').inside("--entrypoint='' -u 0 --pull=always") {
                                sh 'tenable container-image scan \
                                    --name <place you image name here> \
                                    --no-color \
                                    --output-file-formats JUnit \
                                    --output-path .'
                                junit skipPublishingChecks: true, testResults: 'results.junit.xml'
                               }
                        }
                    }
                }
            }
        }

    アクションがトリガーされたら、[コンテナイメージ CI/CD スキャンのリスク] > }クラウドサイバーエクスポージャー にスキャン結果が表示されます。

    注意: 上記の例では、 Docker Pipelines プラグインを使用していることを前提としています。
  7. 完了したら、[完了] をクリックします。

非 Git リポジトリの追加変数

Git リポジトリ内でスキャンまたは同期を実行することをお勧めします。何らかの理由でこれが不可能な場合は、[Add Jenkins Pipeline] (Jenkins パイプラインの追加) ウィザードで一覧表示される変数に加えて、次の変数を追加する必要があります (「 Jenkins パイプラインの追加」を参照)。

コピー
TENABLE_CODE_REPOSITORY_URL=https://github.com/acme/repo1 

上記のサンプル値を以下のように置き換えます。
TENABLE_CODE_REPOSITORY_URL:コードリポジトリのURLに置き換えます

別のパイプラインを追加する

上記にリストされているパイプラインに加えて、 クラウドサイバーエクスポージャー は汎用ワークフローを介した他の CI/CD パイプラインの接続をサポートしています。以下の手順は、docker ベースのパイプラインを接続するための一般的な手順を示していますが、環境変数を追加して Docker スキャンを実行するときに使用される実際の構文は特定のパイプラインによるため、それに応じて調整する必要があります。

汎用パイプラインを追加する方法

  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、[汎用 (Docker)] をクリックします。[Add Generic (Docker)] (汎用の追加 (Docker)) ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1)。トークンの名前を入力し、「 次へ 」をクリックしてトークンを作成します。
  4. API トークンを保存します (ウィザードのステップ 2)。生成されたトークンをコピーして安全な場所に保存します。この情報は、ウィザードの次のステップで必要になります。完了したら、[次へ] をクリックします。
  5. 環境変数を追加します (ウィザードのステップ 3)。関連するパイプラインステップに以下の環境変数を追加し、結果を Tenable に報告します。

    注意:

    コピー
    TENABLE_API_TOKEN=<api-token here>
    TENABLE_API_URL=https://app.tenable.com/
    TENABLE_PIPELINE_RUN_ID=134235
    TENABLE_PIPELINE_RUN_TRIGGER=pull_request 
    TENABLE_PIPELINE_RUN_URL=https://github.com/acme/repo1/actions/runs/134235 
    注意: 上記のサンプル値を以下のように置き換えます。 TENABLE_API_TOKEN: add-pipeline ウィザードに表示される値に置き換えます TENABLE_PIPELINE_RUN_ID: パイプラインの実行 ID に置き換えます TENABLE_PIPELINE_RUN_TRIGGER: ワークフローの実行をトリガーしたイベントの名前に置き換えます TENABLE_PIPELINE_RUN_URL: この実行の結果がある URL に置き換えます

    完了したら、[次へ] をクリックします。

  6. Docker コマンドを実行します (ウィザードのステップ 4)。コンテナイメージをスキャンするには、次のステップをパイプラインに追加し、環境に応じて調整します。スキャン結果を Tenable に報告するには、このウィザードで前述のように環境変数が追加されていることを確認してください。[TENABLE_API_TOKEN] フィールドは機密であるため、シークレットとして扱う必要があります。

    注意: Git リポジトリ内でスキャンを実行することをお勧めします。何らかの理由でこれが不可能な場合は、「 非 Git リポジトリの追加変数を参照してください。
    コピー

    Dockerfile

    docker run --workdir /tmp/tenable --volume /home/user/code:/tmp/tenable --env-file environment.variables --pull=always tenable/cloud-security-scanner:latest container-image scan --name <your image name>

    上記のステップ例は、以下を前提としています。

    • docker run を使用して、コンテナで Tenable のスキャナーを実行しています。
    • environment.variables という名前の Docker env ファイルを作成した
    • デフォルトのフラグでスキャンを実行しています。
    • --env-file: 前の手順で作成した environment.variables ファイルが存在するパス。
    • --name: イメージ名。
    • --volume:左側(「:」の前)をコードがあるパスに変更します。右側はそのままにします。
  7. 完了したら、[完了] をクリックします。

非 Git リポジトリの追加変数

Git リポジトリ内でスキャンまたは同期を実行することをお勧めします。何らかの理由でこれが不可能な場合は、[汎用 (Docker) の追加] ウィザードで一覧表示される変数に加えて、次の変数を追加する必要があります ( 別のパイプラインを追加するを参照)。

コピー
TENABLE_CODE_BRANCH=main 
TENABLE_CODE_COMMIT_HASH=fa4e0ef3e25b89e1f6c348afd51b073f2bbcf1bb
TENABLE_CODE_COMMIT_USER=john-doe 
TENABLE_CODE_REPOSITORY_URL=https://github.com/acme/repo1 

上記のサンプル値を以下のように置き換えます。

  • TENABLE_CODE_BRANCH:ブランチ名に置き換える
  • TENABLE_CODE_COMMIT_HASH:コードのコミットハッシュに置き換えます
  • TENABLE_CODE_COMMIT_USER: 最初のワークフローの実行をトリガーしたユーザーのユーザー名に置き換える
  • TENABLE_CODE_REPOSITORY_URL: コードリポジトリの URL に置き換える

スキャンの設定

入力パラメーターを設定して、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整します。お使いのパイプラインに該当する方法を使用します。

Azure Pipelines パラメーター

Azure Pipelines の関連するパイプラインの YAML スキーマで次の task 入力パラメーターを構成して、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整します。YAML スキーマの設定について詳しくは、 関連する Microsoft ドキュメント を参照してください。

パラメーター 説明 デフォルト 例
apiToken (必須) クラウドサイバーエクスポージャー との通信に使用される API トークン。GitHub Actions の初期セットアップ中に、クラウドサイバーエクスポージャー コンソールで生成されます。
apiUrl (必須) クラウドサイバーエクスポージャー API の URL。 https://app.tenable.com/
excludeVulnerabilities スキャンから除外する脆弱性 ID 。コンマ区切りリストとして入力されます。 CVE-2021-44228
failOnMinSeverity

0 以外の終了コードを返し、ビルドワークフローを失敗とする、最小 CVE 深刻度。値が定義されていない場合、ワークフローは失敗しない。可能な値は次のとおりです。

  • information
  • low medium
  • high
  • critical
critical
failOnMinCvssScore 検出された脆弱性の最小 CVSS スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む)
failOnMinVprスコア 検出された脆弱性の最小 VPR スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
ログ

ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報とデバッグ情報が含まれる。可能な値は次のとおりです。

  • true
  • false
true
分深刻度

スキャンに含める最小の CVE 深刻度。可能な値は次のとおりです。

  • information
  • low
  • medium
  • high
  • critical
information medium
minCvssスコア スキャンに含める検出された脆弱性の最小 CVSS スコア。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
minVprスコア スキャンに含める検出された脆弱性の最小 VPR スコア。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
name コンテナ名 (alpine:latest / alpine / alpine@sha256:51b67269f354137895d43f3b3d810bfacd3945438e94dc5ac55fdac340352f48 / f8c20f8bbcb6) alpine:latest alpine:latest
outputFileFormats (出力ファイル・フォーマット)

エクスポートされるレポート出力ファイルの形式。可能な値は次のとおりです。

  • cyclonedx
  • json
  • junit
  • md
json json,csv
outputFileName (出力ファイル名) エクスポートされるレポート出力ファイルの名前。複数の形式を選択すると、すべてのファイルに同じ名前が付くようになります。 results results
outputIncludeIgnored脆弱性 無視した脆弱性をスキャン結果に含めるかどうかを決定するブーリアン値 (cyclonedx の出力には影響なし)。 false
outputJunitTestNamePrefix JUnit テスト出力名のプレフィックス。テスト結果に第 1 レベルの階層を作成するために使用される。junitが出力ファイル形式として定義されている場合に使用できます。 Scan1
出力パス レポート出力ファイルのエクスポートパス。 results/
registryPassword プライベートコンテナレジストリのパスワード。Tenable にプライベートレジストリの認証を許可するために使用される。
registryUsername プライベートコンテナレジストリのユーザー名。Tenable にプライベートレジストリの認証を許可するために使用される。
serverCertificateValidationEnabled

リモート サーバーに接続するときに、Azure Pipeline エージェントまたはタスクが完全な SSL/TLS 証明書検証を実行する必要があるかどうかを指定します。
可能な値は次のとおりです。

  • true
  • false
true
サイレント

スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。

  • true
  • false
false false

従来のリリースパイプラインを使用している場合に必要な追加のパラメーター

パラメーター 説明 デフォルト 例
codeCommitUser コミットを実行した作成者のユーザー名。
codeRepositoryUrl リポジトリ URL。 https://github.com/orgName/repoName
pipelineRunTrigger パイプライン実行をトリガーしたアクティビティ。 Manual, PullRequest, BuildCompletion

例: プロキシサーバー経由でスキャン結果を送信する

プロキシサーバー経由でスキャン結果を クラウドサイバーエクスポージャー に送信するには、 HTTP_PROXY 環境変数と HTTPS_PROXY 環境変数を使用します。以下は、これらの変数を含む Azure Pipelines タスクの例です。

コピー

YAML

trigger:
- main
pool:
  vmImage: ubuntu-latest
  steps:
  - task: ErmeticContainerImageScan@1
    env:
      HTTP_PROXY: http://localhost:80
      HTTPS_PROXY: https://localhost:443
    inputs:
      apiToken: '$(TENABLE_API_TOKEN)'
      apiUrl: 'https://app.tenable.com/'
      name: 'mongo:7.0.4'
      excludePaths: '/Dev'
      excludeVulnerabilities: 'CVE-2023-22946'
      failOnMinCvssScore: '9.0'
      failOnMinSeverity: 'high'
      logs: true
      minCvssScore: '7.0'
      minSeverity: 'medium'
      outputFileFormats: 'json'
      outputFileName: 'output'
      outputJunitTestNamePrefix: 'jprefix'
      outputPath: '/Dev'
      registryPassword: 'Password1234'
      registryUsername: 'Username1234'

GitHub アクションパラメーター

GitHubアクションで以下の入力パラメーターを設定し、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整します。

パラメーター 説明 デフォルト 例
api-token (必須) クラウドサイバーエクスポージャー との通信に使用される API トークン。GitHubアクションの初期セットアップ中に、 クラウドサイバーエクスポージャー コンソールで生成されます。
api-url (必須) クラウドサイバーエクスポージャー API の URL。 https://app.tenable.com/
exclude-paths 特定のファイルまたはディレクトリをスキャンから除外する機能
exclude-unresolvable ベンダー提供の修正プログラムまたはパッチのない、スキャンから除外する脆弱性 ID のコンマ区切りリスト。 false
exclude-vulnerabilities スキャンから除外する脆弱性 ID のコンマ区切りリスト CVE-2021-44228
fail-on-min-severity

0 以外の終了コードを返し、ビルドワークフローを失敗とする、最小 CVE 深刻度。値が定義されていない場合、ワークフローは失敗しない。可能な値は次のとおりです。

  • information
  • low
  • medium
  • high
  • critical
critical
fail-on-min-cvss-score 検出された脆弱性の最小 CVSS スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
fail-on-min-vpr-score 検出された脆弱性の最小 VPR スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
ログ

ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報や、スキャンされたファイル数や行数などのデバッグ情報が含まれる。可能な値は次のとおりです。

  • true
  • false
true
min-severity

スキャンに含める最小の CVE 深刻度。可能な値は次のとおりです。

  • information
  • low
  • medium
  • high
  • critical
information medium
min-cvss-score スキャンに含める検出された脆弱性の最小 CVSS スコア。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
min-vpr-score スキャンに含める検出された脆弱性の最小 VPR スコア。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
name コンテナ名 alpine:latest / alpine / alpine@sha256:51b67269f354137895d43f3b3d810bfacd3945438e94dc5ac55fdac340352f48 / f8c20f8bbcb6
output-file-formats

エクスポートされるレポート出力ファイルの形式。可能な値は次のとおりです。

  • cyclonedx
  • json
  • md
json json,csv
出力ファイル名 エクスポートされるレポート出力ファイルの名前。複数の形式を選択すると、すべてのファイルに同じ名前が付くようになります。 results results
output-include-ignored-vulnerabilities 無視した脆弱性をスキャン結果に含めるかどうかを決定するブーリアン値 (cyclonedx の出力には影響なし)。 false
出力パス レポート出力ファイルのエクスポートパス。 results/
registry-password プライベートコンテナレジストリのパスワード。Tenable にプライベートレジストリの認証を許可するために使用される。
registry-username プライベートコンテナレジストリのユーザー名。Tenable にプライベートレジストリの認証を許可するために使用される。
サイレント

スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。

  • true
  • false
false false
summary

このパラメーターを使用すると、パイプラインステップ実行の最後にサマリー出力を印刷できます。可能な値は次のとおりです。

  • true
  • false
true false

例: プロキシサーバー経由でスキャン結果を送信する

プロキシサーバー経由でスキャン結果を クラウドサイバーエクスポージャー に送信するには、 HTTP_PROXY 環境変数と HTTPS_PROXY 環境変数を使用します。以下は、これらの変数を含む GitHub アクションの例です。

コピー

YAML

steps:
  - uses: actions/checkout@v3
  - name: Set PROXY environment variables
    run: echo "HTTP_PROXY=http://localhost:80" >> $GITHUB_ENV && echo "HTTPS_PROXY=https://localhost:443" >> $GITHUB_ENV
  - name: Scan IaC with Tenable One Cloud Exposure
    uses: ermetic/actions/iac/scan@v1
    with:
      api-token: ${{ secrets.TENABLE_API_TOKEN }}
      api-url: https://app.tenable.com/

GitLab CI/CD パラメーター

GitLab CI/CD で以下の入力パラメーターを設定し、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整します。

パラメーター 説明 デフォルト 例
api-token (必須) クラウドサイバーエクスポージャー との通信に使用される API トークン。GitLab CI/CD の初期セットアップ中に、 クラウドサイバーエクスポージャー コンソールで生成されます。
api-url (必須) クラウドサイバーエクスポージャー API の URL。 https://app.tenable.com/
name (必須) コンテナ名 (alpine:latest / alpine / alpine@sha256:51b67269f354137895d43f3b3d810bfacd3945438e94dc5ac55fdac340352f48 / f8c20f8bbcb6) alpine:latest
ステージ (必須) ジョブを実行するための GitLab CI/CD パイプラインステージ。 tenable-cloud-security
exclude-paths 特定のファイルまたはディレクトリをスキャンから除外する機能
exclude-unresolvable ベンダー提供の修正プログラムまたはパッチのない、スキャンから除外する脆弱性 ID のコンマ区切りリスト。 false
exclude-vulnerabilities スキャンから除外する脆弱性 ID のコンマ区切りリスト CVE-2021-44228
fail-on-min-cvss-score 検出された脆弱性の最小 CVSS スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
fail-on-min-vpr-score 検出された脆弱性の最小 VPR スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
fail-on-min-severity

0 以外の終了コードを返し、ビルドワークフローを失敗とする、最小 CVE 深刻度。値が定義されていない場合、ワークフローは失敗しない。可能な値:

  • information
  • low
  • medium
  • high
  • critical
critical
ログ ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報や、スキャンされたファイル数や行数などのデバッグ情報が含まれる。可能な値は次のとおりです。 true false false true
min-cvss-score スキャンに含める検出された脆弱性の最小 CVSS スコア。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
min-vpr-score スキャンに含める検出された脆弱性の最小 VPR スコア。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) 7.8
min-severity

スキャンに含める最小の CVE 深刻度。可能な値:

  • information
  • low
  • medium
  • high
  • critical
information medium
output-file-formats

エクスポートされるレポート出力ファイルの形式。可能な値は次のとおりです。

  • cyclonedx
  • json
  • junit
  • md
json json,csv
出力ファイル名 エクスポートされるレポート出力ファイルの名前。複数の形式を選択すると、すべてのファイルに同じ名前が付くようになります。 results results
output-include-ignored-vulnerabilities 無視した脆弱性をスキャン結果に含めるかどうかを決定するブーリアン値 (cyclonedx の出力には影響なし)。 false
output-junit-test-name-prefix JUnit テスト出力名のプレフィックス。テスト結果に第 1 レベルの階層を作成するために使用される。junitが出力ファイル形式として定義されている場合に使用できます。 Scan1
出力パス レポート出力ファイルのエクスポートパス。 results/
registry-password プライベートコンテナレジストリのパスワード。Tenableにプライベートレジストリの認証を許可するために使用される。
registry-username プライベートコンテナレジストリのユーザー名。Tenableにプライベートレジストリの認証を許可するために使用される。
サイレント

スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。

  • true
  • false
false true

Tenable Docker イメージの CLI

Tenable Docker イメージ CLI を使用して以下のコマンドを設定し、 Tenable が環境をスキャンする方法を微調整します。

注意: CI/CD パイプラインを Tenable に接続する際にイメージが抽出されます。

使用

コピー
tenable container-image scan [flags]

フラグ

コピー
--api-token string                        It is required to provide these parameters in order to send the scan results to Tenable for CVE detection 
--api-url string                          It is required to provide these parameters in order to send the scan results to Tenable for CVE detection
--archive-path string                     path to image tar archive
--code-branch string                      (auto detected)
--code-commit-hash string                 (auto detected)
--code-commit-user string                 (auto detected)
--code-repository-url string              (auto detected)
--exclude-unresolvable strings            exclude vulnerability IDs that do not have a fix or patch (default "false")
--exclude-vulnerabilities strings         exclude vulnerability IDs
--fail-on-min-cvss-score float            minimum cvss score that should return an exit code different from 0
--fail-on-min-vpr-score float             minimum vpr score that should return an exit code different from 0
--fail-on-min-severity string             minimum severity that should return an exit code different from 0
--help, -h                                help for scan
--json-version-legacy                     
--min-cvss-score float                    The minimum CVSS score of detected vulnerabilities that you want included in the scan
--min-vpr-score float                     The minimum VPR score of detected vulnerabilities that you want included in the scan             
--min-severity string                     information ,low, medium, high, critical (default "information")
--name string                             image name alpine:latest / alpine / alpine@sha256:51b67269f354137895d43f3b3d810bfacd3945438e94dc5ac55fdac340352f48 / f8c20f8bbcb6
--output-file-formats strings             cyclone-dx,json,j-unit,md (default [json])
--output-file-name string                 (default "results")
--output-include-ignored-vulnerabilities  A boolean value determining whether to include ignored vulnerabilities in the scan results
--output-junit-test-name-prefix string    
--output-path string                      
--pipeline-run-id string                  
--pipeline-run-trigger string             
--pipeline-run-url string                 
--registry-password string                
--registry-username string                
--server-certificate-validation-enabled    (default "true")
重要: docker コマンドをローカルで実行しているときに --output-path フラグを使用して出力ファイルにアクセスする場合は、コマンドで -v 引数を使用して、docker フォルダーとローカルフォルダー間のマッピングを作成します。 以下の例では、 local-output はローカルでファイルを保存する場所を表し、 docker-output は対応する docker ディレクトリを表します。
コピー
docker run -v ./local-output:/docker-output--env-file environment.variables --pull=always tenable/cloud-security-scanner:latest container-image scan --name storm:latest --output-file-formats json --output-path /docker-output

グローバルフラグ

コピー
--logs       print log messages to standard output
--no-color   print output without color
--silent     do not print output to standard output

フラグを環境変数として使用する

汎用 Docker パイプラインを クラウドサイバーエクスポージャー に追加する場合は、一連の環境変数を設定します。 Tenable は、これらの変数を使用して、Tenable コンソールでスキャン結果を表示するときに関連データをカタログ化し表示します。より高度な構成要件に準拠したり、スキャン設定をさらに微調整したりするために、グローバルフラグなど、 Tenable Docker イメージに含まれるすべてのフラグを環境変数として構成することもできます。

フラグと環境変数の構文

CLI フラグと環境変数は異なる構文を使用します。次の手順を使用して、特定のフラグを環境変数に変換します。

フラグ構文を環境変数として使用するための変換方法

  1. フラグ名の前のダッシュを削除します。
  2. ダッシュをアンダースコアに置き換えます。
  3. プレフィックスとして「TENABLE_」(アンダースコア付き) を入力します。
  4. すべて大文字を使用します。
  5. ブーリアンフラグ (フラグを環境変数として使用するを参照) をアクティブ化するには、TRUE に設定する必要があります。

したがって、たとえば --code-repository-url フラグを環境変数として使用する場合、TENABLE_CODE_REPOSITORY_URL になります。