コンテナイメージ CI/CD パイプラインの接続
CI/CD パイプラインを Tenable One Cloud Exposure に接続し、関連するコードリポジトリへのアクセスを許可します。
これは、コンテナイメージ CI/CD パイプラインを Tenable に接続するための統合ガイドです。
- スキャン結果の表示に関するハウツーガイドについては、 コンテナイメージ 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 ドキュメントを参照してください。
パイプラインを追加する方法
- クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
- 統合ライブラリで、 [Azure Pipelines] をクリックします。[Azure Pipelines の追加] ウィザードが開きます。
- API トークンを作成します (ウィザードのステップ 1)。トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
- API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
- TenableをインストールするAzure DevOps 拡張機能 (ウィザードのステップ 3):
- このリンクをクリックして、Visual Studio マーケットプレースから拡張機能にアクセスします。
- [Get it Free] をクリックします。拡張機能の使用に追加料金はかかりません。
- 関連する Azure DevOps 組織を選択し、[インストール] をクリックします。
- これで拡張機能がインストールされたので、 [組織に進む] をクリックして Azure DevOps サイトに移動できます。
-
(推奨) シークレット変数を追加します (ウィザードのステップ 4)。UI を使用してシークレット変数を設定するには、次の手順に従います。
注意: Tenable の API トークンを保護するには、 シークレット変数、または代替シークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。Azure Pipelines 変数は、Tenable のスキャンの利用方法に応じてさまざまな範囲で保存できます。Tenable のトークンは、IaC コードとともにリポジトリにリンクされたワークフローのみに関連付けることが推奨されていますが、必須ではありません。- Azure DevOps にログインし、 [パイプライン] をクリックします。
- 関連するパイプラインを選択し、[編集] をクリックします。
- [変数] をクリックします。
- プラス記号 (+) または [New variable] (新しい変数) をクリックします
-
以下の詳細を入力し、[OK] をクリックします。
- 名前を TENABLE_API_TOKEN に設定します。
- 前のステップで作成したトークンを [値] として貼り付けます。
- [Keep this value secret] にチェックを入れます。
完了したら、 クラウドサイバーエクスポージャー コンソールウィザードの 次へ をクリックして続行します。
- タスクを追加します。クラウドサイバーエクスポージャー コンテナー イメージのスキャン タスクを Azure Pipelines に追加します (ウィザードの手順 5)。
- Azure DevOps にログインし、 [パイプライン] をクリックします。
- 関連するパイプラインの横にある三点リーダーアイコンをクリックし、[編集] をクリックします。
- コードで、Tenable のタスクを追加するステージを選択します。
- タスクアシスタントで、[クラウドサイバーエクスポージャー Container Image Scan] タスクを検索してクリックします。
-
タスクを追加するには、これらの値を入力してから、[追加] をクリックします。
- API トークン: $(TENABLE_API_TOKEN)
- API URL: https://app.tenable.com/
- 名前:(ここに画像名を入力します)
- 必要に応じて 、任意の詳細 設定を使用します (詳細については、「 Azure Pipelines パラメーター を参照してください)。
- 更新されたパイプライン YAML を保存します。アクションがトリガーされたら、[Risks > Container Image CI/CD Scans] (コンテナイメージ CI/CD スキャンのリスク) にスキャン結果が表示されます。
- コンソール クラウドサイバーエクスポージャー ウィザードで、[完了] をクリックします。
GitHub アクションを追加する
アクションを追加した後、 GitHub アクションパラメーター を使用して、スキャン設定を行い、 Tenable が環境をスキャンする方法を微調整できます。
GitHub アクションを追加するには
- クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
- 統合ライブラリで、 GitHub Actions をクリックします。[Add GitHub Actions] ウィザードが開きます。
- API トークンを作成します (ウィザードのステップ 1)。トークンの名前を入力し、「 次へ 」をクリックしてトークンを作成します。
- API トークンを保存します (ウィザードのステップ 2)。生成されたトークンをコピーして安全な場所に保存します。この情報は、ウィザードの次のステップで必要になります。完了したら、[次へ] をクリックします。
-
(推奨) GitHub シークレットを追加します (ウィザードのステップ 3)。API トークンを安全に格納するには、 GitHub Actions シークレット、または他のシークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。
GitHub リポジトリに新しいシークレットを作成するには、以下の手順を実行します。
- GitHub.com から、リポジトリのメインページに移動します。
- リポジトリ名の下にある [Settings] をクリックします。
- サイドバーの「セキュリティ」セクションで、「 シークレット」を選択し、「 アクション」 をクリックします。
- [新しいリポジトリシークレット] をクリックします。
- [名前] 入力ボックスに「TENABLE_API_TOKEN」と入力します。
- 前のステップで作成したトークンの値を入力します。
- [シークレットの追加] をクリックします。
完了したら、クラウドサイバーエクスポージャー コンソールウィザードの [次へ] をクリックします。
-
アクションを追加します (ウィザードのステップ 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 スキャンのリスク) にスキャン結果がクラウドサイバーエクスポージャー表示されます。
- 完了したら、[完了] をクリックします。
GitLab パイプラインの追加
GitLab パイプラインを追加した後、 Docker イメージTenable CLI を使用してスキャン設定を行い、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整できます。
GitLab の CI/CD YAML 設定の設定オプションの詳細については、 GitLab のドキュメントを参照してください。
GitLab パイプラインを追加するには
- クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
- 統合ライブラリで、[GitLab CI/CD] をクリックします。[Add GitLab CI/CD] (GitLab CI/CD の追加) ウィザードが開きます。
- API トークンを作成します (ウィザードのステップ 1)。トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
- API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
-
(推奨) 変数を追加します (ウィザードのステップ 3)。プロジェクトで CI/CD 変数を定義する には、次の手順に従います。
注意: Tenable の API トークンを保護するには、マスクされた変数、または他のシークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。GitLab CI/CD 変数は、Tenable のスキャンの利用方法に応じて複数のレベルで保存できます。Tenable のトークンは、IaC コードとともにリポジトリにリンクされたパイプラインのみに関連付けることが推奨されていますが、必須ではありません。- GitLab にログインします。
- プロジェクトの Settings > CI/CD に移動します。
- [変数] で、[展開] をクリックします。
- [変数の追加] をクリックします。
-
次の詳細を入力します。
- [キー] を TENABLE_API_TOKEN に設定します。
- 前のステップで作成したトークンを [値] として貼り付けます。
- 該当する場合は、[環境範囲] を選択します。
- [フラグ] の下にある [変数をマスク] というボックスにチェックを入れます。
- [変数の追加] をクリックします。
完了したら、クラウドサイバーエクスポージャー コンソールウィザードの [次へ] をクリックします。
-
ステージを追加します (ウィザードのステップ 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 スキャンのリスク] > クラウドサイバーエクスポージャーにスキャン結果が表示されます。
- クラウドサイバーエクスポージャー コンソールウィザードで [完了] をクリックします。
Jenkins パイプラインの追加
Jenkins パイプラインを追加した後、 Docker イメージで CLI を使用してTenable スキャン/同期設定を行い、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整できます。
要件:
- Docker がホストにインストールされていること
- Docker プラグインを Jenkins にインストールする必要があります
- クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
- 統合ライブラリで、[Jenkins Pipeline] をクリックします。[Add Jenkins Pipeline] (パイプラインの追加) ウィザードが開きます。
- API トークンを作成します (ウィザードのステップ 1)。トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
- API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
-
(推奨) Jenkins 認証情報を追加します (ウィザードのステップ 3)。新しいグローバル認証情報を Jenkins に追加するには、以下の手順に従います。
注意: Tenable の API トークンを保護するには、Jenkins 認証情報、または他のシークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。Jenkins 認証情報は、Tenable のスキャンの利用方法に応じて複数のレベルで保存できます。Tenable のトークンは、IaC コードとともにリポジトリにリンクされたパイプラインのみに関連付けることが推奨されていますが、必須ではありません。- Jenkins にログインします ([Credentials] (認証情報) > [Create permission] (権限の作成) を通じてユーザーとして)。
- ホームページで、[Manage Jenkins > Manage Credentials] をクリックします。
- 右側の [ストア スコープを Jenkins] で、[Jenkins] をクリックします。
- [System] (システム) で、[Global credentials (unrestricted)](グローバル認証情報 (無制限)) リンクをクリックして、デフォルトのドメインにアクセスします。
-
左側にある [Add Credentials] (認証情報の追加) をクリックします (認証情報が存在しない場合は、認証情報を追加します)。
- [種類] フィールドから、[シークレット テキスト] を選択します。
- [Scope](範囲) フィールドで、[Global] (グローバル) を選択します。
- ウィザードで以前に作成した API トークン をコピーし、[Secret] (シークレット) フィールドに貼り付けます。
- [ID] フィールドで、[tenable-api-token] を指定します。
- トークンについてオプションの説明を追加します。
- [OK] をクリックして認証情報を保存します。
完了したら、 クラウドサイバーエクスポージャー コンソールウィザードの 次へ をクリックします。
-
ステージを追加します (ウィザードのステップ 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 プラグインを使用していることを前提としています。 - 完了したら、[完了] をクリックします。
非 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 スキャンを実行するときに使用される実際の構文は特定のパイプラインによるため、それに応じて調整する必要があります。
汎用パイプラインを追加する方法
- クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
- 統合ライブラリで、[汎用 (Docker)] をクリックします。[Add Generic (Docker)] (汎用の追加 (Docker)) ウィザードが開きます。
- API トークンを作成します (ウィザードのステップ 1)。トークンの名前を入力し、「 次へ 」をクリックしてトークンを作成します。
- API トークンを保存します (ウィザードのステップ 2)。生成されたトークンをコピーして安全な場所に保存します。この情報は、ウィザードの次のステップで必要になります。完了したら、[次へ] をクリックします。
-
環境変数を追加します (ウィザードのステップ 3)。関連するパイプラインステップに以下の環境変数を追加し、結果を Tenable に報告します。
注意:
- クラウドサイバーエクスポージャー コンソールでスキャン結果を表示する際に、Tenable が関連データをカタログ化して表示するためにこれらの変数を使用するため、すべての変数は必須です。
- ここに挙げる変数に加え、グローバルフラグなど Tenable Docker イメージに含まれる任意のフラグを環境変数として設定し、スキャン設定をさらに微調整することができます。変数として使用するためにフラグを変換する方法など、詳しくは「 フラグを環境変数として使用する 」を参照してください。
コピー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 に置き換えます完了したら、[次へ] をクリックします。
-
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:左側(「:」の前)をコードがあるパスに変更します。右側はそのままにします。
- 完了したら、[完了] をクリックします。
非 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 深刻度。値が定義されていない場合、ワークフローは失敗しない。可能な値は次のとおりです。
|
critical | |
| failOnMinCvssScore | 検出された脆弱性の最小 CVSS スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) | ||
| failOnMinVprスコア | 検出された脆弱性の最小 VPR スコア。0 以外の終了コードを返し、ビルドワークフローを失敗とする。値が定義されていない場合、ワークフローは失敗しない。可能な値: 0.0 から 10.0 までの任意の数字 (小数点を含む) | 7.8 | |
| ログ |
ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報とデバッグ情報が含まれる。可能な値は次のとおりです。
|
true | |
| 分深刻度 |
スキャンに含める最小の CVE 深刻度。可能な値は次のとおりです。
|
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 (出力ファイル・フォーマット) |
エクスポートされるレポート出力ファイルの形式。可能な値は次のとおりです。
|
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 | 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 深刻度。値が定義されていない場合、ワークフローは失敗しない。可能な値は次のとおりです。
|
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 | |
| min-severity |
スキャンに含める最小の CVE 深刻度。可能な値は次のとおりです。
|
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 |
エクスポートされるレポート出力ファイルの形式。可能な値は次のとおりです。
|
json | json,csv |
| 出力ファイル名 | エクスポートされるレポート出力ファイルの名前。複数の形式を選択すると、すべてのファイルに同じ名前が付くようになります。 | results | results |
| output-include-ignored-vulnerabilities | 無視した脆弱性をスキャン結果に含めるかどうかを決定するブーリアン値 (cyclonedx の出力には影響なし)。 | false | |
| 出力パス | レポート出力ファイルのエクスポートパス。 | results/ | |
| registry-password | プライベートコンテナレジストリのパスワード。Tenable にプライベートレジストリの認証を許可するために使用される。 | ||
| registry-username | プライベートコンテナレジストリのユーザー名。Tenable にプライベートレジストリの認証を許可するために使用される。 | ||
| サイレント |
スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。
|
false | false |
| summary |
このパラメーターを使用すると、パイプラインステップ実行の最後にサマリー出力を印刷できます。可能な値は次のとおりです。
|
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 深刻度。値が定義されていない場合、ワークフローは失敗しない。可能な値:
|
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 | medium |
| output-file-formats |
エクスポートされるレポート出力ファイルの形式。可能な値は次のとおりです。
|
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にプライベートレジストリの認証を許可するために使用される。 | ||
| サイレント |
スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。
|
false | true |
Tenable Docker イメージの CLI
Tenable Docker イメージ CLI を使用して以下のコマンドを設定し、 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 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 フラグと環境変数は異なる構文を使用します。次の手順を使用して、特定のフラグを環境変数に変換します。
フラグ構文を環境変数として使用するための変換方法
- フラグ名の前のダッシュを削除します。
- ダッシュをアンダースコアに置き換えます。
- プレフィックスとして「TENABLE_」(アンダースコア付き) を入力します。
- すべて大文字を使用します。
- ブーリアンフラグ (フラグを環境変数として使用するを参照) をアクティブ化するには、TRUE に設定する必要があります。
したがって、たとえば --code-repository-url フラグを環境変数として使用する場合、TENABLE_CODE_REPOSITORY_URL になります。