CI/CD の接続

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

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

  • Tenable の CI/CD とコード機能の概要については、「コードを参照してください。
  • コードのスキャンに関するハウツーガイドについては、「 Code CI/CD」を参照してください。

CI/CD スキャンを開始する方法

  1. パイプラインの接続。CI/CD パイプラインを Tenable One Cloud Exposure に接続します。
  2. スキャンの設定。 Tenable が環境をスキャンする方法を微調整します。

パイプラインの接続

CI/CD パイプラインを クラウドサイバーエクスポージャー に接続し、関連するコードリポジトリへのアクセスを許可します。

個別のパイプラインを追加するだけでなく、 コードリポジトリの接続Tenable に接続することもできます。

重要: 各パイプラインでサポートされている IaC 機能を確認するには、 IaC 互換性マトリクス を参照してください。

パイプラインの接続について

必要な クラウドサイバーエクスポージャー ユーザーロール: クラウドサイバーエクスポージャー コンソールを使用してパイプラインを接続するには、クラウドサイバーエクスポージャー の管理者ロールが必要です。

クラウドサイバーエクスポージャー コンソールの関連するウィザードの手順に従って、使用するパイプラインの統合を追加します。パイプラインを接続するために必要なステップはベンダーごとに異なりますが、概略としては、ほとんどのベンダーで次の手順が含まれます。

  1. API トークンを作成し、スキャン結果を Tenable に報告します。
  2. 環境変数を追加し、スキャンをカスタマイズして、基本的なレポート機能を提供します。
  3. パイプラインにステップを追加して、 スキャン 自体を実行したり、クラウドリソースに関連付けられたコードを 同期 して、それらのリソースをオリジンまでトレースしたりします (クラウドからコードまで)。

    スキャン結果にスキャンに関連するコミット情報を含める場合は、リポジトリ (git) ルートのコンテキストからスキャナーを実行する必要があります。この設定の詳細については、「 Configure Scan Settings 」を参照してください。たとえば、GitHub アクションパラメーターでは、これは skip-code-commit-history パラメーターによって制御されます。

パイプラインを Tenable に接続した後、[Settings > Integrations] (統合) ページで関連タイルをクリックすると、統合されたパイプラインを表示できます。各パイプラインについて、API トークンパラメーターの名前、Tenable で作成された日時、前回使用された日時 (API キーの使用状況を監視するため) を確認できます。

範囲指定された CI/CD パイプラインのサポート

Tenable は、ルートの「組織」範囲より下のレベルの CI/CD パイプライン統合をサポートします。この更新により、サブユニットは、より広い組織に影響を与えない明確に定義された範囲を使用して、CI/CD スキャンプロセスを個別に管理できるようになります。

ルートの「組織」範囲より下のレベルで CI/CD パイプラインをスキャンする方法

  1. コンソール内クラウドサイバーエクスポージャー、[Settings > Integrations] に移動します
  2. (オプション)[組織] ドロップダウンで [コード] 範囲を選択します。
  3. 関連する CI/CD 統合を追加します。

注意:

  • クラウドサイバーエクスポージャー コンソールで作成された API トークンを使用して、Git プロバイダー内でスキャンのスコープを設定します。
  • CI/CD 統合は、 コード ルートフォルダーの下の任意の範囲で設定できます。

機能の動作:

  • Git 組織: リポジトリが Git プロバイダーで指定された組織またはサブグループに属している場合にのみ、スキャンが承認されます。
  • 手動フォルダーの範囲: スキャンは、リポジトリが Git プロバイダーで定義されたフォルダーの下にネストされている場合にのみ承認されます。
  • リポジトリの範囲: スキャンは、テナントにすでに接続されている特定のリポジトリに対してのみ承認されます。

この機能を使用すると、チームは、より広い組織環境に影響を与えたり、アクセスする必要とせずに、フォルダーやビジネス単位などの特定の範囲内で CI/CD スキャンを設定して実行できます。

Azure Pipelines の追加

次の目的へのパイプラインの追加

  • インフラのコード化 (IaC) パイプラインをスキャンしてセキュリティ問題を検出します。
  • クラウドリソースに関連付けられたコードを同期して、それらのリソースをオリジンまでトレースします (クラウドからコードまで)。

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

要件:

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

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

Azure Pipelines を使用してパイプラインを追加するには:

  1. クラウドサイバーエクスポージャーコンソールで、[Settings > Integrations] に移動し、[Add Integration] をクリックします。
    統合ライブラリ、[Azure Pipeline の追加] をクリックします。[Add Azure pipeline] (Azure Pipeline の追加) ウィザードが開きます。
  2. API トークンを作成します (ウィザードのステップ 1):
    • スキャン結果を Tenable に報告するために、スキャナーには API トークンパラメーターが必要です。
    • トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  3. API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
  4. TenableをインストールするAzure DevOps 拡張機能 (ウィザードのステップ 3):
    1. このリンクをクリックして、Visual Studio マーケットプレースから拡張機能にアクセスします。
    2. [Get it Free] をクリックします。拡張機能の使用に追加料金はかかりません。
    3. 関連する Azure DevOps 組織を選択し、[インストール] をクリックします。
    4. これで拡張機能がインストールされたので、 [組織に進む] をクリックして Azure DevOps サイトに移動できます。
  5. (推奨) シークレット変数を追加します (ウィザードのステップ 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] にチェックを入れます。

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

  6. タスクを追加します。関連するタスクを Azure Pipelines に追加します (ウィザードの手順 5)。
    • IaC スキャンIaC をスキャンして スキャン結果を分析するには、次のタスクを Azure Pipeline に追加します。
      1. Azure DevOps にログインし、 [パイプライン] をクリックします。
      2. 関連するパイプラインの横にある三点リーダーアイコンをクリックし、[編集] をクリックします。
      3. コードで、Tenable のタスクを追加するステージを選択します。
      4. タスクアシスタントで、[クラウドサイバーエクスポージャー IaC Scan] タスクを検索してクリックします。
      5. タスクを追加するには、これらの値を入力してから、[追加] をクリックします。
        • API トークン: $(TENABLE_API_TOKEN)
        • API URL: https://app.tenable.com/
        • 必要に応じて 、任意の詳細 設定を使用します (詳細については、「 Azure Pipelines パラメーター を参照してください)。
      6. 更新されたパイプライン YAML を保存します。スキャンがトリガーされると、[CI/CD] にスキャン結果が表示されます。
      7. コンソールクラウドサイバーエクスポージャーウィザードで [次へ] をクリックします。
    • IaC 同期。クラウドリソースに関連付けられているコードを同期し、それらのリソースをオリジンまでトレースする (クラウドからコードまで) には、次のタスクを Azure pipeline に追加します。
      1. Azure DevOps にログインし、 [パイプライン] をクリックします。
      2. 関連するパイプラインの横にある三点リーダーアイコンをクリックし、[編集] をクリックします。
      3. コードで、 Tenableタスクを追加するステージを選択します。 このタスクは、「terraform apply」ステージ内の「apply」コマンドの後に追加する必要があります。
      4. タスクアシスタントで、[クラウドサイバーエクスポージャー IaC Terraform の同期] タスクを検索してクリックします。
      5. タスクを追加するには、これらの値を入力してから、[追加] をクリックします。
        • API トークン: $(TENABLE_API_TOKEN)
        • API URL: https://app.tenable.com/
        • 必要に応じて 、任意の詳細 設定を使用します (詳細については、「 Azure Pipelines パラメーター を参照してください)。
      6. 更新されたパイプライン YAML を保存します。同期がトリガーされたら、クラウドサイバーエクスポージャー に IaC ラベルでタグ付けされたリソース/検出結果が表示されます。関連するリソースの [Inventory] (インベントリ) ビューに [IaC] タブがあり、関連するコードスニペットが表示されます。
  7. コンソール クラウドサイバーエクスポージャー ウィザードで、[完了] をクリックします。

Azure Pipelines 用の Tenable Step

次の手順は、スキャン結果を クラウドサイバーエクスポージャー に報告するために使用されます。このステップは、 Tenableのタスクをパイプラインに追加すると自動的に追加されます (Azure Pipelines の追加)。

コピー

YAML

jobs:
  - job: ermetic_scan
    pool:
      vmImage: ubuntu-latest
    steps:
        - task: ErmeticIacScan@1
          inputs:
            apiToken: '$(TENABLE_API_TOKEN)'
            apiUrl: 'https://app.tenable.com/'

GitHub アクションを追加する

クラウドサイバーエクスポージャーGitHubアクションを使用して、次のことができます。

  • インフラのコード化 (IaC) パイプラインをスキャンしてセキュリティ問題を検出する
  • クラウドリソースに関連付けられたコードを同期して、それらのリソースをオリジンまでトレースします (クラウドからコードまで)。

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

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

    注意: Tenable の API トークンを保護するには、GitHub アクションシークレット、または他のシークレットストア (現在使用している場合) のいずれかを使用することをお勧めします。GitHub シークレットは、Tenable のスキャンの利用方法に応じて複数のレベルで保存できます。Tenable のトークンは、IaC コードとともにリポジトリにリンクされたワークフローのみに関連付けることが推奨されていますが、必須ではありません。
    1. GitHub.com から、リポジトリのメインページに移動します。
    2. リポジトリ名の下にある [Settings] をクリックします。
    3. サイドバーの「セキュリティ」セクションで、「 シークレット」を選択し、「 アクション」 をクリックします。
    4. [新しいリポジトリシークレット] をクリックします。
    5. [名前] 入力ボックスに「TENABLE_API_TOKEN」と入力します。
    6. 前のステップで作成したトークンの値を入力します。
    7. [シークレットの追加] をクリックします。

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

  6. アクションを追加します (ウィザードのステップ 4)。スキャン結果を生成するには、関連するアクションを GitHub ワークフローに追加します。
    • IaC スキャン IaC をスキャンするには、次のアクションを GitHub ワークフロー に追加します (必要に応じて調整します)。

      コピー

      YAML

      steps:
      - uses: actions/checkout@v3
      - name: Scan IaC with Tenable One Cloud Exposure
        uses: tenable/cloud-security-actions/iac/scan@v1
        with:
          api-token: ${{ secrets.TENABLE_API_TOKEN }}
          api-url: https://app.tenable.com/

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

    • IaC 同期。クラウドリソースに関連付けられたコードを同期し、それらのリソースをオリジンまでトレースする (クラウドからコードまで) には、次のアクションを GitHub ワークフロー (YAML ファイル) に追加します。

      重要: このアクションは、「terraform apply」ステップの実行後に追加する必要があります。
      コピー

      YAML

      steps:
      - uses: actions/checkout@v3
      - name: Pull remote terraform state
        run: terraform state pull > terraform.tfstate
        shell: bash
      - name: Sync IaC with Tenable One Cloud Exposure
        uses: tenable/cloud-security-actions/iac/sync/terraform@v1
        with:
          api-token: ${{ secrets.TENABLE_API_TOKEN }}
          api-url: https://app.tenable.com/

      ワークフローで [Terraform の設定] GitHubアクションを使用している場合、 Tenable では、パイプラインの実行時の問題を防ぐために stdout Terraform ラッパーを無効にすることを強くお勧めします。矢印マークが付いた以下の推奨コードを参照してください。

      コピー

      YAML

      - name: Setup Terraform
      uses: hashicorp/[email protected]
      with:
        terraform_wrapper: false 

      同期がトリガーされたら、 クラウドサイバーエクスポージャーに IaC ラベルでタグ付けされたリソース/検出結果が表示されます。関連するリソースの [Inventory] (インベントリ) ビューに [IaC] タブがあり、関連するコードスニペットが表示されます。

    • コンテナイメージのスキャン詳細については、 コンテナイメージスキャン を参照してください。
  7. 完了したら、[完了] をクリックします。

GitLab パイプラインの追加

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

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

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

  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、[GitLab CI/CD] をクリックします。[Add GitLab CI/CD] (GitLab CI/CD の追加) ウィザードが開きます
  3. API トークンを作成します (ウィザードのステップ 1):
    • スキャン結果を Tenable に報告するために、スキャナーには API トークンパラメーターが必要です。
    • トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  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. [変数の追加] をクリックします。

        コピー

        YAML

        include:
        - component: $CI_SERVER_FQDN/tenb/cloud-security/components/iac-scan@1
          inputs:
            api-token: $TENABLE_API_TOKEN
            api-url: https://app.tenable.com/
            stage: tenable-cloud-security

        stages:
        - tenable-cloud-security

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

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

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

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

IaC スキャンを設定し、GitLab で SAST 形式の結果を表示する

GitLab マージリクエストで実行するように CI/CD スキャンを設定し、GitLab がネイティブに解析する SAST 形式で結果を表示することができます。

  1. 次のプロパティを .gitlab-ci.yml ファイルに追加します。

    • output-file-formats
    • artifacts
    • rules
    注意: output-file-formats および artifacts は、スキャン結果を SAST 形式で表示するために必要な唯一のプロパティです。GitLab マージリクエストで CI/CD スキャンを設定するには、 rules プロパティを追加します。
    コピー

    YAML

    include:
      - component: $CI_SERVER_FQDN/tenb/cloud-security/components/iac-scan@1
    inputs:
      api-token: $TENABLE_API_TOKEN
      api-url: https://app.dev.t.io/
      stage: tenable-cloud-security
      output-file-formats: GitLabSast

    stages:
      - tenable-cloud-security

    tenable-iac-scan:
      rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      artifacts:
    when: always
    paths:
      - results.json
    reports:
      sast: results.json
  2. GitLab にログインします。
  3. 左側のナビゲーションバーで、[セキュア > セキュリティ設定] に移動します。[セキュリティ設定] ページが表示されます。
  4. [セキュリティ テスト] セクションで、[SAST の有効化] をクリックして静的アプリケーション セキュリティ テスト (SAST) を有効にします。クラウドサイバーエクスポージャー は GitLab マージリクエストをスキャンし、検出された結果を表示します。

GitLab Security configuration, with Static Application Security Testing (SAST) highlighted

Jenkins パイプラインの追加

以下を行う Jenkins パイプラインを追加します。

  • インフラのコード化 (IaC) パイプラインをスキャンしてセキュリティ問題を検出します。
  • クラウドリソースに関連付けられたコードを同期して、それらのリソースをオリジンまでトレースします (クラウドからコードまで)。

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

要件:

  • Docker がホストにインストールされていること
  • Docker プラグインを Jenkins にインストールする必要があります
  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、[Jenkins Pipeline] をクリックします。[Add Jenkins Pipeline] (パイプラインの追加) ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1):
    1. スキャン結果を Tenable に報告するために、スキャナーには API トークンパラメーターが必要です。
    2. トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  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 パイプラインに追加します。

    注意: Git リポジトリ内でスキャンまたは同期を実行することをお勧めします。何らかの理由でこれが不可能な場合は、「 非 Git リポジトリの追加変数」を参照してください。
    • IaC スキャンIaC をスキャンするには、以下のステップをパイプラインに追加します (必要に応じて調整します)。

      コピー

      Groovy

      pipeline {
          agent any
          stages {
              stage('Checkout') {
                  steps {
                      git '<PLACE YOUR REPOSITORY URL HERE>'
                  }
              }
              stage('Scan IaC with Tenable One Cloud Exposure') {
                  environment {
                      TENABLE_API_TOKEN = credentials('ermetic-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='' --pull=always") {
                              sh 'tenable iac scan \
                                  --no-color \
                                  --output-file-formats JUnit \
                                  --output-path .'
                              junit skipPublishingChecks: true, testResults: 'results.junit.xml'
                          }
                      }
                  }
              }
          }
      }

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

    • IaC 同期。リソースと問題をコードのオリジンまでトレースするには、Jenkins パイプラインに以下のステップを追加し、環境の必要性に応じて調整します。

      注意:

      • このステップは、 terraform apply ステップ内の「apply」コマンドの後に追加する必要があります。
      • 同期結果を生成するには、前述のように環境変数が追加されていることを確認してください。
      • TENABLE_API_TOKENフィールドは機密性が高いため、シークレットとして扱う必要があります。
      コピー

      Groovy

      pipeline {
          agent any
          stages {
              stage('Checkout') {
                  steps {
                      git '<PLACE YOUR REPOSITORY URL HERE>'
                  }
              }
              stage('Terraform Apply') {
                  steps {
                      script {
                          // This step is required if your state file is stored remotely.
                          // Add 'state pull' after the 'terraform apply' script.
                          sh 'terraform state pull > terraform.tfstate'
                      }
                  }
              }
              stage('Sync IaC 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='' --pull=always") {
                              sh 'tenable iac sync terraform \
                                  --no-color'
                              junit skipPublishingChecks: true, testResults: 'results.junit.xml'
                          }
                      }
                  }
              }
          }
      }
      注意: 上記の例では、 Docker Pipelines プラグインを使用していることを前提としています。

      同期がトリガーされたら、クラウドサイバーエクスポージャー に IaC ラベルでタグ付けされたリソース/検出結果が表示されます。関連するリソースの [Inventory] (インベントリ) ビューに [IaC] タブがあり、関連するコードスニペットが表示されます。

    • コンテナイメージのスキャン詳細については、 コンテナイメージスキャン を参照してください。
  7. 完了したら、[完了] をクリックします。

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

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

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

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

Terraform Cloud Run タスクの追加

Terraform Cloud Run タスクを使用すると、実行ライフサイクルの特定の段階でサードパーティのツールやサービスを統合できます。 クラウドサイバーエクスポージャー は、計画後段階で Terraform Plan をスキャンします。必要な Terraform Cloud のアクセス許可 (ワークスペースの実行タスクを管理する権限を含む) があることを確認します。これにより、実行タスクをワークスペースに関連付けることができます。

実行タスクの設定中に、 Tenable が環境をスキャンする方法を微調整する追加のパラメーターでエンドポイント URL 値を修正できます (以下のステップ 3、4 を参照してください)。

  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、 Terraform Cloud をクリックします。[Add Terraform Cloud] (Terraform Cloud の追加) ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1):
    • スキャン結果を Tenable に報告するために、スキャナーには API トークンパラメーターが必要です。
    • トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  4. Terraform Cloud で実行タスクを作成します (ウィザードのステップ 2):
    1. 実行タスクを管理する権限を持つユーザーで Terraform Cloud にサインインします。
    2. [設定] メニューを開きます。
    3. [タスクの実行] をクリックします。
    4. [実行タスクの作成] をクリックし、次のように実行タスクを構成します。
      • [有効] チェックボックスを選択します。
      • 実行 タスクの名前を入力します (例: Tenable)
      • Tenableウィザードに表示されるエンドポイント URL 値をコピーして貼り付けます。Tenable が環境をスキャンする方法を微調整するために、追加のパラメーターでこの URL を修正します。詳細は、 Terraform Cloud エンドポイント URL の設定 を参照してください。
      • (オプション) 説明を入力します。
      • Tenableウィザードに表示される HMAC キーの値をコピーして貼り付けます。
      • [実行タスクの作成] をクリックします。
  5. 実行タスクをワークスペースと関連付けます:
    1. [ワークスペース] をクリックし、保護するワークスペースをクリックします。
    2. 左側のメニューで、[Settings] をクリックします。
    3. [Workspace Settings] で、[タスクの実行] をクリックします。
    4. [利用可能な実行タスク] で、Tenable 用に作成した実行タスクの横にあるプラス記号 (+) をクリックして、ワークスペースに追加します。
    5. 次の手順に従って実行タスクを関連付けます。
      1. 実行ステージ で、 計画後 を選択します。
      2. [強制レベル] で、次のいずれかを選択します。
        • アドバイザリタスクが失敗した場合、警告が表示されますが、実行は続行され完了を妨げることはありません。
        • 必須です。 タスクが失敗した場合 (タイムアウトや予期しないリモートエラー状態が発生した場合など)、警告が表示され、実行が停止されます。
      3. [作成] をクリックします。

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

合理化された実行タスクレビューで詳細な結果を表示する

Terraform Cloud 内で、強化され詳細なスキャン結果を表示できます。これらの結果には、検出された問題の完全なリスト (詳細については「 スキャンで使用される Tenable ポリシー 」を参照) と、各問題に関する詳細情報が含まれます。これにより、クラウドサイバーエクスポージャー コンソールにアクセスすることなく、スキャン結果を表示しながら文脈を把握することができます。

注意: 詳細な結果を表示するために、場合によっては、Terraform Cloud 内でこの機能を有効にする必要があります。

Terraform Cloud run task results, with the findings from the scan

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

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

このワークフローを使用して、次のことができます。

  • インフラのコード化 (IaC) パイプラインをスキャンしてセキュリティ問題を検出する
  • クラウドリソースに関連付けられたコードを同期して、それらのリソースをオリジンまでトレースします (クラウドからコードまで)。

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

  1. クラウドサイバーエクスポージャー コンソールで、[設定] > [統合] の順に移動し、[統合を追加] をクリックします。
  2. 統合ライブラリで、[汎用 (Docker)] をクリックします。[Add Generic (Docker)] (汎用の追加 (Docker)) ウィザードが開きます。
  3. API トークンを作成します (ウィザードのステップ 1):
    • スキャン結果を Tenable に報告するために、スキャナーには API トークンパラメーターが必要です。
    • トークンを作成するには、「 トークン名 」を入力し、「 次へ」をクリックします。
  4. API トークンを保存します (ウィザードのステップ 2)。生成された トークン をコピーして安全な場所に保存し、[次へ] をクリックします。この情報は、ウィザードの次のステップで必要になります。生成されたトークンは、Tenable への API アクセスを許可するため、シークレットとして扱う必要があります。
  5. 環境変数を追加します (ウィザードのステップ 3)。以下のコードで environment.variables という名前のファイルを作成します (必要に応じて調整)。

    注意: 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 に置き換えます

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

  6. Docker コマンドを実行します (ウィザードのステップ 4)。環境に応じて調整しながら、関連するコマンドを CI/CD パイプラインに追加します。

    注意: Git リポジトリ内でスキャンまたは同期を実行することをお勧めします。何らかの理由でこれが不可能な場合は、「 非 Git リポジトリの追加変数を参照してください。
    • IaC スキャンIaC をスキャンするには、次のステップをパイプラインに追加します (必要に応じて調整します)。

      コピー
      docker run --workdir /tmp/tenable --volume /home/user/code:/tmp/tenable --env-file environment.variables --pull=always tenable/cloud-security-scanner:latest iac scan
      重要: 上記の手順で、スキャンしているコードの実際の場所に /home/user/code を置き換える必要があります。

      各部の説明

      • --env-file は、 environment.variables 前のステップで作成したファイルが見つかります。
      • --volume 左側 (「:」の前) を、コードがあるパスに変更します。右側はそのままにします。

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

      • コンテナで Tenable のスキャナーを実行するために docker run を使用している
      • スキャンしているコードは /home/user/code にあります。
      • environment.variables という名前の Docker env ファイルを作成した
      • デフォルトのフラグでスキャンを実行している

      スキャンがトリガーされると、[CI/CD] にスキャン結果が表示されます。

    • IaC 同期。クラウドリソースに関連付けられたコードを同期して、それらのリソースをオリジンまでトレースする (クラウドからコードまで) には、次のステップをパイプラインに追加します (必要に応じて調整します)。

      コピー

      Dockerfile

      terraform state pull > terraform.tfstate
      docker run --workdir /tmp/tenable --volume /home/user/code:/tmp/tenable --env-file environment.variables --pull=always tenable/cloud-security-scanner:latest iac sync terraform
      重要: 上記の手順で、スキャンしているコードの実際の場所に /home/user/code を置き換える必要があります。

      ここで:

      • --env-file は、前の手順で作成した environment.variables ファイルが存在するパスです。
      • --volume 左側 (「:」の前) をコードがあるパスに変更します。右側はそのままにします。

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

      • コンテナで Tenable のスキャナーを実行するために docker run を使用している
      • 同期しているコードが /home/user/code
        にある - environment.variables という名前の Docker env ファイルを作成した。
      • デフォルトのフラグでスキャンを実行している

      同期がトリガーされたら、 クラウドサイバーエクスポージャーに IaC ラベルでタグ付けされたリソース/検出結果が表示されます。関連するリソースの [Inventory] (インベントリ) ビューに [IaC] タブがあり、関連するコードスニペットが表示されます。

    • コンテナイメージのスキャン詳細については、 コンテナイメージスキャン を参照してください。
  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 に置き換える

スキャンの設定

スキャンの設定を行い、クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整します。たとえば、以下の設定が可能です。

  • スキャンで使用される Tenable ポリシー。
  • スキャン結果に基づくビルドワークフローを失敗させるかどうか、および失敗をトリガーするポリシーの最小深刻度を指定します。
  • Tenableによってスキャンされるパス。

お使いの CI/CD パイプラインに該当する方法を使用します。

スキャン設定とポリシー設定の違い

この記事で概説するさまざまなスキャン設定 (パラメーター) に加えて、コンソールの [Policies] (ポリシー) ページから IaC ポリシーを管理できます。コンソールでは、特定の IaC 範囲に対して次の基本アクティビティを実行できます。

  • ポリシーの有効化 / 無効化
  • IaC スキャンで除外を設定する

詳細は、 ポリシーの表示と管理を参照してください 。

ポリシーは、スキャン設定パラメーターと [ポリシー] ページの両方から無効化または除外できます。以下のように、設定した除外は常にすべての包含を上書きすることに注意してください。

  • スキャン設定パラメーターを使用してポリシーを除外したが、[Policies] (ポリシー) ページでポリシーが有効になっている場合、ポリシーはスキャンから 除外されます 。
  • [ポリシー] ページでポリシーを無効にした (または 関連する除外を定義した) が、スキャン設定でポリシーが (明示的または暗黙的に) 含まれている場合、そのポリシーはスキャンから 除外 されます。

Azure Pipelines パラメーター

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

注意: 従来のリリースパイプラインを使用している場合は、スキャンタスクと同期タスクの両方に追加のパラメーターが必要になることに注意してください。詳細については、 従来のリリースパイプラインを使用している場合に必要な追加のパラメーター を参照してください。

Azure Pipelines スキャンパラメーター

Azure Pipelines の関連するパイプラインの YAML スキーマで次の task 入力パラメーターを構成して、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整します。

パラメーター 説明 デフォルト 例
apiToken (必須)Tenable との通信に使用される API トークン。Azure Pipelines の初期セットアップ中に、クラウドサイバーエクスポージャー コンソールで生成されます。
apiUrl (必須)Tenable API の URL。 https://app.tenable.com/
excludePaths スキャンから特定のパスを除外します。 dev/
excludePolicies スキャンから除外する Tenable ポリシーの ID。このパラメーターは `policies` と相互に排他的であるため、入力できるのは 2 つのうち 1 つの値のみです。glob パターンをワイルドカードとして使用して、ポリシーの範囲を定義できます。たとえば、以下のようになります。 excludePolicies aws-s3-* は、AWS S3 バケットに関連するすべてのポリシーをスキャンから除外します。 aws-iam-role-public-access-exists
failOnMinSeverity

0 以外の終了コードを返し、ビルドワークフローを失敗とするポリシーの最小深刻度。可能な値:

  • none
  • information
  • low
  • medium
  • high
  • critical
none critical
gitトークン スキャン中に クラウドサイバーエクスポージャー が必要とするプライベートコードリポジトリのアクセストークン。たとえば、プライベート Terraform モジュールにアクセスするには、これらのトークンが必要になる場合があります。複数のトークンがある場合は、コンマで区切ります。形式: ORGANIZATION_URL=YOUR_TOKEN https://dev.azure.com/org=YOUR_TOKEN
ログ ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報や、スキャンされたファイル数や行数などのデバッグ情報が含まれる。可能な値は次のとおりです。 true false false true
分深刻度

スキャンに含める Tenable ポリシーの最小深刻度です。可能な値:

  • information
  • low
  • medium
  • high
  • critical
information medium
outputFileFormats (出力ファイル・フォーマット)

エクスポートされるレポート出力ファイルの形式。複数の形式の値を入力して、複数の形式でレポートを出力できます。可能な値:

  • csv
  • json
  • junit
  • sarif
  • md
json json,csv
outputFileName (出力ファイル名) エクスポートされるレポート出力ファイルの名前。複数の形式を選択すると、すべてのファイルに同じ名前が付くようになります。 results results
outputJunitTestNamePrefix JUnit テスト出力名のプレフィックス。テスト結果に第 1 レベルの階層を作成するために使用される。junitが出力ファイル形式として定義されている場合に使用できます。 Scan1
出力パス レポート出力ファイルのエクスポートパス。 results/
パス Tenableによってスキャンされるリポジトリパス。空白のままにすると、リポジトリ全体 Tenable スキャンされます。 prod/,stg/
ポリシー コンマ区切りリストとして入力された、リポジトリのスキャンに使用される Tenable ポリシーの ID。値を入力しない場合、すべてのポリシーがスキャンされます。このパラメーターは `excludePolicies` と相互に排他的であるため、入力できるのは 2 つのうち 1 つの値のみです。glob パターンをワイルドカードとして使用して、含めるポリシーの範囲を定義できます。たとえば、以下のようになります。 policies aws-s3-* は、AWS S3 バケットに関連するすべてのポリシーをスキャンに含めます。 glob パターンをワイルドカードとして使用して、含めるポリシーの範囲を定義できます。たとえば policies aws-s3-* の場合、AWS S3 バケットに関連するすべてのポリシーがスキャンに含まれます。 aws-iam-role-public-access-exists-terraform,aws-sqs-queue-encryption-disabled
サイレント スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。 true false false false
types スキャンを Tenable する IaC フレームワークです。値を入力しない場合、Tenable はすべてのフレームワークをスキャンします。可能な値は次のとおりです。 terraform terraform-plan cloudformation terraform

Azure Pipelines 同期パラメーター

パラメーター 説明 デフォルト 例
apiToken (必須) Tenable との通信に使用される API トークン。Azure Pipelines の初期セットアップ中に、クラウドサイバーエクスポージャー コンソールで生成されます。 - -
apiUrl (必須) クラウドサイバーエクスポージャー API の URL。 - https://app.tenable.com/
gitトークン 同期時に クラウドサイバーエクスポージャー が必要とするプライベートコードリポジトリのアクセストークン。たとえば、プライベート Terraform モジュールにアクセスするには、これらのトークンが必要になる場合があります。複数のトークンがある場合は、コンマで区切ります。形式: ORGANIZATION_URL=YOUR_TOKEN - https://dev.azure.com/org=YOUR_TOKEN
パス コンマ区切りリストとして入力された、 Tenableによって同期される Terraform ルートモジュールのパス。空白のままにすると、Tenable は作業ディレクトリを同期します。 - prod/、stg/
stateFilePath Terraform の状態ファイルのパス。 terraform.tfstate terraform.tfstate
ログ ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、実行プロセスに関する情報とデバッグ情報が含まれます。可能な値: true、false true true
サイレント 同期結果の内容を標準ワークフロー出力に出力するかどうか。同期結果の出力には、オリジンまでトレースされたファイルに関する情報が含まれます。ログから独立している。可能な値: true、false false false

GitHub Actions パラメーター

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

GitHub Actions スキャンパラメーター

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

パラメーター 説明 デフォルト 例
api-token (必須) クラウドサイバーエクスポージャー との通信に使用される API トークン。GitHubアクションの初期セットアップ中に、 クラウドサイバーエクスポージャー コンソールで生成されます。
api-url (必須) クラウドサイバーエクスポージャー API の URL。 https://app.tenable.com/
exclude-paths スキャンから特定のパスを除外します。 dev/
exclude-policies スキャンから除外する Tenable ポリシーの ID。このパラメーターは `policies` と相互に排他的であるため、入力できるのは 2 つのうち 1 つの値のみです。glob パターンをワイルドカードとして使用して、ポリシーの範囲を定義できます。たとえば、以下のようになります。 exclude-policies aws-s3-* は、AWS S3 バケットに関連するすべてのポリシーをスキャンから除外します。 aws-iam-role-public-access-exists
fail-on-min-severity

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

  • information
  • low
  • medium
  • high
  • critical
critical
gitトークン スキャン中に クラウドサイバーエクスポージャー が必要とするプライベートコードリポジトリのアクセストークン。たとえば、プライベート Terraform モジュールにアクセスするには、これらのトークンが必要になる場合があります。複数のトークンがある場合は、コンマで区切ります。形式: ORGANIZATION_URL=YOUR_TOKEN https://github.com/org=YOUR_TOKEN
ログ ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報や、スキャンされたファイル数や行数などのデバッグ情報が含まれる。可能な値は次のとおりです。 true false false true
min-severity

スキャンに含める Tenable ポリシーの最小深刻度です。可能な値:

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

エクスポートされるレポート出力ファイルの形式。複数の形式の値を入力して、複数の形式でレポートを出力できます。可能な値:

  • csv
  • json
  • junit
  • sarif
  • md
json json,csv
出力ファイル名 エクスポートされるレポート出力ファイルの名前。複数の形式を選択すると、すべてのファイルに同じ名前が付くようになります。 results results
output-junit-test-name-prefix JUnit テスト出力名のプレフィックス。テスト結果に第 1 レベルの階層を作成するために使用される。junitが出力ファイル形式として定義されている場合に使用できます。 Scan1
出力パス レポート出力ファイルのエクスポートパス。 results/
パス Tenableによってスキャンされるリポジトリパス。空白のままにすると、リポジトリ全体 Tenable スキャンされます。 prod/
ポリシー コンマ区切りリストとして入力された、リポジトリのスキャンに使用される Tenable ポリシーの ID。値を入力しない場合、すべてのポリシーがスキャンされます。このパラメーターは `exclude-policies` と相互に排他的であるため、入力できるのは 2 つのうち 1 つの値のみです。glob パターンをワイルドカードとして使用して、含めるポリシーの範囲を定義できます。たとえば、以下のようになります。 policies aws-s3-* は、AWS S3 バケットに関連するすべてのポリシーをスキャンに含めます。CLI からポリシー ID 情報を取得する方法については、クラウドサイバーエクスポージャー のドキュメントを参照してください。 aws-iam-role-public-access-exists,aws-sqs-queue-encryption-disabled
サイレント スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。 true false false false
types

スキャンを Tenable する IaC フレームワークです。値を入力しない場合、Tenable はすべてのフレームワークをスキャンします。可能な値は次のとおりです。

  • terraform
  • terraform-plan
  • cloudformation
terraform
注意: output-file-name パラメーターを使用して結果を junit 形式に出力する場合、Tenable は生成されたファイル名に junit プレフィックスを追加します。たとえば、名前を results に設定した場合、生成されるファイル名は junit-results.xml になります。
注意: output file formats パラメーターを使用して IaC およびコンテナイメージスキャンのsarif出力を生成すると、クラウドサイバーエクスポージャー の検出結果が GitHub の [コードスキャン] セクションに直接表示されます。検出結果には、深刻度分類、相対ファイルパス、リッチテキストの説明、関連するタグが含まれます。 スキャン結果には、次のタグが含まれます。
  • security
  • tenable iac
  • カテゴリタグ (例: tenable iac iam や tenable iac compute)

GitHub Actions 同期パラメーター

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

パラメーター 説明 デフォルト 例
api-token (必須) Tenable との通信に使用される API トークン。GitHubアクションの初期セットアップ中に、 クラウドサイバーエクスポージャー コンソールで生成されます。 -
api-url (必須) クラウドサイバーエクスポージャー API の URL。 - https://app.tenable.com/
gitトークン 同期時に クラウドサイバーエクスポージャー が必要とするプライベートコードリポジトリのアクセストークン。たとえば、プライベート Terraform モジュールにアクセスするには、これらのトークンが必要になる場合があります。複数のトークンがある場合は、コンマで区切ります。形式: ORGANIZATION_URL=YOUR_TOKEN - https://github.com/org=YOUR_TOKEN
ログ ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報や、スキャンされたファイル数や行数などのデバッグ情報が含まれる。可能な値は次のとおりです。 true false - true
パス コンマ区切りリストとして入力された、 Tenableによって同期される Terraform ルートモジュールのパス。空白のままにすると、Tenable は作業ディレクトリを同期します。 - prod/
サイレント 同期結果の内容を標準ワークフロー出力に出力するかどうか。同期結果の出力には、オリジンまでトレースされたファイルに関する情報が含まれます。ログから独立している。可能な値は次のとおりです。 true false false false
状態ファイルパス Terraform の状態ファイルのパス。 terraform.tfstate terraform.tfstate

GitLab CI/CD パラメーター

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

GitLab CI/CD スキャンパラメーター

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

パラメーター 説明 デフォルト 例
api-token (必須) クラウドサイバーエクスポージャー との通信に使用される API トークン。GitLab CI/CD の初期セットアップ中に、 クラウドサイバーエクスポージャー コンソールで生成されます。
api-url (必須) クラウドサイバーエクスポージャー API の URL。 https://app.tenable.com/
ステージ (必須) ジョブを実行するための GitLab CI/CD パイプラインステージ。 tenable-cloud-security
exclude-paths スキャンから特定のパスを除外します。 dev/
exclude-policies スキャンから除外する Tenable ポリシーの ID。このパラメーターは「policies」と相互に排他的であるため、入力できるのは 2 つのうち 1 つの値のみです。glob パターンをワイルドカードとして使用して、ポリシーの範囲を定義できます。たとえば、 exclude-policies aws-s3-* AWS S3 バケットに関連するすべてのポリシーがスキャンから除外されます。 aws-iam-role-public-access-exists
fail-on-min-severity

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

  • information
  • low
  • medium
  • high
  • critical
critical
gitトークン スキャン中に クラウドサイバーエクスポージャー が必要とするプライベートコードリポジトリのアクセストークン。たとえば、プライベート Terraform モジュールにアクセスするには、これらのトークンが必要になる場合があります。複数のトークンがある場合は、コンマで区切ります。形式: ORGANIZATION_URL=YOUR_TOKEN https://gitlab.com/org=YOUR_TOKEN
ログ ログメッセージを標準ワークフロー出力に出力するかどうか。ログメッセージには、スキャナーの実行プロセスに関する情報や、スキャンされたファイル数や行数などのデバッグ情報が含まれる。可能な値は次のとおりです。 true false false true
min-severity

スキャンに含める Tenable ポリシーの最小深刻度です。可能な値:

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

エクスポートされるレポート出力ファイルの形式。複数の形式の値を入力して、複数の形式でレポートを出力できます。可能な値:

  • csv
  • json
  • junit
  • sarif[^1]
  • md
json json,csv
出力ファイル名 エクスポートされるレポート出力ファイルの名前。複数の形式を選択すると、すべてのファイルに同じ名前が付くようになります。 results results
output-junit-test-name-prefix JUnit テスト出力名のプレフィックス。テスト結果に第 1 レベルの階層を作成するために使用される。junitが出力ファイル形式として定義されている場合に使用できます。 Scan1
出力パス レポート出力ファイルのエクスポートパス。 results/
パス Tenableによってスキャンされるリポジトリパス。空白のままにすると、リポジトリ全体 Tenable スキャンされます。 prod/
ポリシー コンマ区切りリストとして入力された、リポジトリのスキャンに使用される クラウドサイバーエクスポージャー ポリシーの ID。値を入力しない場合、すべてのポリシーがスキャンされます。このパラメーターは「exclude-policies」と相互に排他的であるため、入力できるのは 2 つのうち 1 つの値のみです。glob パターンをワイルドカードとして使用して、含めるポリシーの範囲を定義できます。たとえば policies aws-s3-* の場合、AWS S3 バケットに関連するすべてのポリシーがスキャンに含まれます。CLI からポリシー ID 情報を取得する方法については、クラウドサイバーエクスポージャー のドキュメントを参照してください。 aws-iam-role-public-access-exists-terraform,aws-sqs-queue-encryption-disabled
サイレント スキャン結果の内容を標準ワークフロー出力に出力するかどうか。スキャン結果の出力には、スキャン中に見つかった問題に関する詳細情報が含まれる。ログから独立している。可能な値は次のとおりです。 true false false true
types

スキャンを Tenable する IaC フレームワークです。値を入力しない場合、Tenable はすべてのフレームワークをスキャンします。可能な値は次のとおりです。

  • terraform
  • terraform-plan
  • cloudformation
terraform
注意: output-file-name パラメーターを使用して結果を junit 形式に出力する場合、Tenable は生成されたファイル名に junit プレフィックスを追加します。たとえば、名前を results に設定した場合、生成されるファイル名は junit-results.xml になります。
注意: output-file-formats パラメーターを使用して IaC およびコンテナイメージスキャンのsarif出力を生成すると、GitLab の [パイプラインセキュリティ] タブとセキュリティダッシュボードに検出結果が表示されます。詳細は、 GitLab のドキュメントを参照してください。 検出結果には、深刻度分類、相対ファイルパス、リッチテキストの説明、関連するタグが含まれます。 スキャン結果には次のタグが含まれます。
  • security
  • tenable iac
  • スキャンカテゴリタグ (例: tenable iac iam や tenable iac compute)

Tenable Docker イメージの CLI

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

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

コマンドのリスト

次のコマンドを使用して、スキャンを実行し、 Tenable IaC ポリシーを一覧表示し、CLI バージョンを出力します。各コマンドで一覧表示されているフラグ (または グローバルフラグ) を使用して、コマンドの実行方法を微調整します。

IaC スキャン

Tenable IaC スキャンを実行します。

使用

コピー
tenable iac scan [flags]

フラグ

コピー
    --api-token string
    --api-url string
    --code-branch string                     (auto detected)
    --code-commit-hash string                (auto detected)
    --code-commit-user string                (auto detected)
    --code-repository-url string             (auto detected)
    --exclude-paths strings
    --exclude-policies strings
    --fail-on-min-severity string            minimum severity that should return an exit code different from 0
    --git-tokens stringToString               (default [])
-h, --help                                   help for scan
    --min-severity string                    Information,Low,Medium,High,Critical (default "information")
    --output-file-formats strings            Csv,Json,JUnit,Md,Sarif (default [json])
    --output-file-name string                 (default "results")
    --output-junit-test-name-prefix string
    --output-path string
    --path string                             (default ".")
    --pipeline-run-id string
    --pipeline-run-trigger string
    --pipeline-run-url string
    --policies strings
    --types strings                          Arm,Bicep,CloudFormation,Helm,Kubernetes,Terraform,TerraformPlan
注意: 結果を junit 形式に出力するために output-file-name フラグを使用する場合、Tenable は生成されたファイル名に junit プレフィックスを追加します。たとえば、名前を results に設定した場合、生成されるファイル名は junit-results.xml になります。

IaC Terraform 同期

使用

コピー
tenable iac sync terraform [flags]

フラグ

コピー
--api-token string              
--api-url string                
--code-branch string            (auto detected)
--code-commit-hash string       (auto detected)
--code-commit-user string       (auto detected)
--code-repository-url string    (auto detected)
--git-tokens stringToString     (default [])
--help, -h                      help for terraform
--path string                   terraform root module path (default ".")
--pipeline-run-id string        
--pipeline-run-trigger string   
--pipeline-run-url string            
--state-file-path string        (default "terraform.tfstate")

IaC list-policies

スキャンで使用される Tenable ポリシーを一覧表示します。

使用

コピー
tenable iac list-policies [flags]

フラグ

コピー
--clouds strings   list policies for specific clouds aws,azure,gcp
--help, -h         help for list-policies
--types strings    list policies for specific code types cloud-formation,kubernetes,terraform,terraform-plan

version

Tenable CLI のバージョンを出力します。

使用

コピー
tenable version [flags]

フラグ

コピー
--help, -h   help for version

グローバルフラグ

上記のコマンドのいずれかで、次のグローバルフラグを使用します。

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

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

Jenkins パイプラインの追加または汎用 Docker パイプラインを クラウドサイバーエクスポージャー に追加するときは、一連の環境変数を設定します。コンソールウィザードとパラレルドキュメントの両方に一覧表示される変数は、クラウドサイバーエクスポージャー コンソール内で基本的なレポート機能を提供するように設計されています。より高度な構成要件に準拠したり、スキャン設定をさらに微調整したりするために、グローバルフラグなど、Tenable Docker イメージに含まれるすべてのフラグを環境変数として構成することもできます。

フラグと環境変数の構文

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

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

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

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

Terraform Cloud エンドポイント URL の設定

Terraform Cloud パイプラインでは、実行タスクのエンドポイント URL を設定して、 クラウドサイバーエクスポージャー が環境をスキャンする方法を微調整できます。これを行うには、以下のパラメーターを 1 つ以上使用してエンドポイント URL を修正します。これらのパラメーターを URL に変更する方法の例については サンプル URL を参照してください。

エンドポイント URL の設定を含む、完全な実行タスク設定については、 Terraform Cloud Run タスクの追加 を参照してください。

  • failOnMinSeverityで共有されます。実行ワークフローを失敗とするポリシーの最小深刻度。可能な値
    • information
    • low
    • medium
    • high
    • critical
  • excludePolicies。スキャンから除外する](/docs/ja/iac-policies)[Tenableポリシーの ID。このパラメーターは相互に排他的です。 policies 入力できるのは 2 つのうち 1 つの値のみです。
  • policies. コンマ区切りリストとして入力された、リポジトリのスキャンに使用される Tenableポリシー の ID。値を入力しない場合、すべてのポリシーがスキャンされます。このパラメーターは相互に排他的です。 excludePolicies 入力できるのは 2 つのうち 1 つの値のみです。

サンプル URL

  • https://app.tenable.com/api/terraformcloud/runtasks/scan?apiToken={API token}&excludePolicies=52ffcfa6-6c70-4ea6-8376-d828d3961669&failOnMinSeverity=Critical
  • https://app.tenable.com/api/terraformcloud/runtasks/scan?apiToken={API token}&policies=52ffcfa6-6c70-4ea6-8376-d828d3961669,586f29d7-e60e-4211-858c-b1c06d339fa2,5d9e3164-9265-470c-9a10-57ae454ac0c7&failOnMinSeverity=High

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

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

構成例

Azure Pipelines の次のサンプル構成では、terraform スキャンの ./terraform_resources パスをスキャンし、深刻度が high 以上のポリシーのビルド ワークフローを失敗させるようにTenableに指示します。

コピー

YAML

-task: ErmeticIacScan@1
 inputs:
    apiToken: '$(TENABLE_API_TOKEN)`
    apiURL: `https://app.tenable.com`
    failOnMinSeverity: `high`
    path: `./terraform_resources`
    types: `terraform`

出力例

JSON

コピー

JSON

{
  "end_time": "2024-07-07T13:35:07.940626+03:00",
  "file_count": 22,
  "iac_findings": [
    {
      "cloud": "AWS",
      "description": "At least one stage of your API Gateway API should be associated with AWS WAF web ACL.\nDoing so protects web applications and APIs from threats, and enables you to control how traffic reaches your applications.\nThis policy is only applicable to REST APIs.",
      "name": "API Gateway API is not associated with WAF web ACL",
      "policy_category": "Network",
      "policy_id": "aws-api-gateway-api-web-acl-not-exists",
      "resources": [
        {
          "file_path": "1.json", 
          "file_url": "https://example.com/foo/bar/blob/afasdfasdfasdfasdfasdf/api_web_acl_not_exists/1.json",
          "line": 5,
          "name": "positive1",
          "reference_url": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html",
          "type": "AWS::ApiGateway::RestApi"
        }
      ],
      "severity": "Low"
    }
  ],
  "iac_findings_by_severity": {
    "Critical": 0,
    "High": 0,
    "Information": 0,
    "Low": 1,
    "Medium": 0
  },
  "iac_findings_count": 8,
  "parsed_file_count": 14,
  "path": "api_web_acl_not_exists",
  "policies": [
    {
      "category": "Network",
      "codeTypes": [
        "TerraformPlan",
        "Terraform",
        "CloudFormation"
      ],
      "description": "At least one stage of your API Gateway API should be associated with AWS WAF web ACL.\nDoing so protects web applications and APIs from threats, and enables you to control how traffic reaches your applications.\nThis policy is only applicable to REST APIs.",
      "id": "aws-api-gateway-api-web-acl-not-exists",
      "infrastructureTenantType": "Aws",
      "name": "API Gateway API is not associated with WAF web ACL",
      "severity": "Low"
    }
  ],
  "resource_count": 58,
  "start_time": "2024-07-07T13:35:07.5278667+03:00",
  "success": true,
  "version": "1.124.1"
}

CSV

Sample CI/CD scan results in CSV format

クラウドからコードまで同期

問題をコードのオリジンまでさかのぼってトレースするには、CI/CD パイプラインを クラウドサイバーエクスポージャー

注意: コードまで問題をトレースするのにサポートされているプラットフォーム/パイプラインを確認するには、 IaC 互換性マトリクス を参照してください。

CI/CD パイプラインを Tenable に接続する際に同期ステップ/タスクを追加することで、クラウドリソースに関連付けられたコードを同期します (Cloud to Code)。現在、AWS、Azure/Microsoft Entra ID、GCP、Google Workspace リソースがサポートされています。