コード CI/CD
これは、 Tenable One Cloud Exposure でのスキャン結果の表示と分析に関するハウツーガイドです。
- Tenable への CI/CD パイプラインの接続/設定に関する統合ガイドについては、CI/CD の接続を参照してください。
- Tenable の CI/CD とコード機能の概要については、「コードを参照してください。
クラウドサイバーエクスポージャー コンソールを使用してコードをスキャンし、スキャン結果を分析して、潜在的な問題を特定します。(スキャンが実行された時間とリポジトリでソートされた) 各スキャンについて、深刻度に基づいて検出された問題数の内訳を確認できます。
はじめに
コードをスキャンして、設定ファイルの問題を検出して修正します。
前提条件
- Terraform 環境または CloudFormation テンプレートが設定されていることを確認します。
- IaC 互換性マトリクスを確認し、各 IaC 機能でサポートされているプラットフォームとツールを確認します。
開始方法
- IaC を クラウドサイバーエクスポージャー に接続して、code:
- スキャンで使用されるポリシーなど、Tenableが環境をスキャンする方法を微調整するようにスキャンSettingsを設定します。
- Tenableに結果を送信せずにローカルでスキャンを実行する場合は、「ローカルでスキャンを実行するを参照してください。
- スキャンが完了したら、 クラウドサイバーエクスポージャー コンソールを使用して IaC 検出結果。
ローカルでスキャンを実行する
( クラウドサイバーエクスポージャーに結果を送信せずに) ローカルでスキャンを実行する場合は、関連するパイプラインステップで一覧表示される環境変数のサブセットのみを含める必要があります。[ 別のパイプラインを追加する ] ウィザードのステップ 3 にリストされている残りの変数は、 クラウドサイバーエクスポージャー コンソールで関連データをカタログ化して表示するために使用されるため、ローカルでスキャンを実行する場合は必要ありません。
ローカルでスキャンを実行する方法
- クラウドサイバーエクスポージャーコンソールで、[Settings > Integrations] に移動し、[Generic (Docker)] をクリックします。
-
[開始] をクリックします。
注意: パイプラインをすでに設定している場合は、[Add pipeline (Docker)] をクリックします。 -
API トークンを作成します (ウィザードのステップ 1)。トークンの名前を入力し、「 次へ 」をクリックしてトークンを作成します。
注意: 複数のマシンに同じ API トークンを使用できます。 - API トークンを保存します (ウィザードのステップ 2)。生成されたトークンをコピーして安全な場所に保存します。この情報は、ウィザードの次のステップで必要になります。完了したら、[次へ] をクリックします。
-
環境変数を追加します (ウィザードのステップ 3)。関連するパイプラインステップに以下の環境変数を追加し、結果を Tenable に報告します。
- ウィザードに一覧表示される変数は、 クラウドサイバーエクスポージャー コンソールで関連データをカタログ化して表示するために使用されるため、ローカルでスキャンを実行する場合は必要ありません。
- スキャンの詳細情報を共有し、関連するデータを クラウドサイバーエクスポージャー コンソールで表示する場合、グローバルフラグなど、 Tenable Docker イメージに含まれる任意のフラグを環境変数として設定して、スキャン設定をさらに微調整できます。変数として使用するためにフラグを変換する方法など、詳しくは「 フラグを環境変数として使用する 」を参照してください。
コピーTENABLE_API_TOKEN='--api-token here--' # Replace with the value displayed in the add-pipeline wizard
TENABLE_API_URL='https://{region}.app.ermetic.com'region に入力する値は、Tenable One Cloud Exposure コンソールにログインする際に使用する URL の値に依存します。リージョン別の Tenable コンソール URL を参照してください。
完了したら、[次へ] をクリックします。
-
Docker コマンドを実行します (ウィザードのステップ 4)。コンテナイメージをスキャンするには、次のステップをパイプラインに追加し、環境に応じて調整します。[TENABLE_API_TOKEN] フィールドは機密であるため、シークレットとして扱う必要があります。
コピーdocker run --workdir /tmp/tenable --volume </home/user/code>:/tmp/tenable --env-file environment.variables --pull=always tenable/cloud-security-scanner:latest iac scan重要: 上記のステップ例は、次のことを前提としています。- docker run を使用して、コンテナで Tenable のスキャナーを実行しています。
- スキャンしているコードは /home/user/code にあります。
- environment.variables という名前の Docker env ファイルを作成した
- デフォルトのフラグでスキャンを実行しています。
- 完了したら、[完了] をクリックします。
組織階層
クラウドサイバーエクスポージャーコードのスキャン結果では、コードが管理されている IaC 組織の階層と、そこに含まれるリポジトリを確認できます。そのような組織は、GitHub、GitLab、Bitbucket、Azure DevOps が基になっている可能性があります。Tenable は関連する organization と repository のデータを抽出し、それに応じてマッピングします。何らかの理由で Tenable が組織データを抽出できない場合、リポジトリは階層の最下部にある [Other] (その他) フォルダーにマッピングされます。階層のマッピングとその結果は、 Tenable によって自動的に実行され、手動で構成または調整することはできません。
Tenable は、IaC リソースを持つリポジトリのみをスキャンするため、ユーザーは実際に IaC リソースを持つ IaC テナントに集中しやすくなります。IaC リソースのないリポジトリは、ここの IaC 階層には表示されませんが、 Settings > アカウント > IaC には引き続き表示されます (リソースがないことを示すステータス付き)。
スキャン結果を表示する
スキャン結果を表示するには:
-
クラウドサイバーエクスポージャーコンソールで、[Risk > Code Scans] をクリックします。[Code CI/CD Scans] (コード CI/CD スキャン) ページには、 パイプライン/リポジトリ全体でTenableによって実行されたすべてのスキャンが表示されます。
- テーブルをフィルタリングして、表示するデータの範囲を絞り込みます。詳細については、 IaC スキャンの列データ を参照してください。
-
エントリをクリックすると、特定のスキャンに関する詳細情報が表示されます。[IaC Scans] (IaC スキャン) スライドアウトが表示されます。[検出結果] タブをクリックして、スキャンで特定されたすべての検出結果のリストを表示します。
-
検出結果の表をフィルタリングして、表示するデータの範囲を絞り込みます。
- テーブルの上部にある [新規検出結果のみ] をクリックして、前回のスキャン以降に見つかった IaC 検出結果でテーブルをフィルタリングします。
-
検出結果をクリックして、特定の問題をドリルダウンします。ここから、影響を受けるリソース全体について、検出結果の概要と説明、および検出結果が見つかった特定のコード部分を確認できます。
検出結果のタイプにもよりますが、 Tenable 次のようにコードがハイライト表示されます。
- 問題: グローバル設定がありません。たとえば、アカウントレベルで設定する必要がある VPC フローログや CloudTrail。ハイライト:メインファイルの最初の行。
- 問題: リソースにフラグがありません。たとえば、暗号化を有効にするフラグがない。ハイライト: リソースが定義されている行、またはフラグが欠落しているオブジェクトの最初の行。
- 問題:フラグ値の設定ミス。たとえば、インバウンドアドレス範囲のハイ 0.0.0.0/0 ライト: リソースの設定ミスがある特定の行。
コードスキャンの列データ
以下の列は、[Risk > Code Scans] (リスク [コードスキャン)] ページのテーブルに表示され、そのほとんどがテーブルのデータのフィルターにも使用できます。
| フィルター | 説明 | デフォルト |
|---|---|---|
| 時刻 | スキャンが実行された日時 | 〇 |
| リポジトリ | Tenableによってスキャンされるリポジトリの名前です。 | 〇 |
| ブランチ | スキャンされたブランチの名前。 | 〇 |
| コミット | コミットの数。 | 〇 |
| 作者 |
|
〇 |
| 検出結果 | 検出された IaC 検出結果数の深刻 リスク深刻度の色分け別の内訳。 | 〇 |
| 結果 | スキャンワークフローの合格または失敗のどちらか。ビルドが失敗となる最小ポリシー深刻度のスキャン設定に基づく。 | |
| フレームワーク | 解析され、 Tenable 結果を返したファイルのタイプ。可能な値は CloudFormation、Terraform Code、Terraform Plan です。詳細については、「 サポートされているプラットフォーム」 を参照してください。 | いいえ |
| 統合 |
スキャンされた code:
|
いいえ |
| パス | Tenableによってスキャンされたリポジトリのパス。Terraform Cloud の場合、この値は NULL です。これはユーザーの環境内ではなく、実行タスクのコンテキスト内で Tenable がスキャンを実行するためです。 | いいえ |
| IaC スキャン済みリソース | クラウドサイバーエクスポージャーによってスキャンされた IaC リソースの数。 | いいえ |
| トリガー | スキャンをトリガーしたアクション。 | いいえ |
スキャン結果の列データ
次の列は、[Scan Results] (スキャン結果) ページのテーブルに表示される列です (特定のスキャンの結果をドリルダウンした後)。そのほとんどが、テーブルのデータのフィルターにも使用できます。
| フィルター | 説明 |
|---|---|
| クラウド | クラウドサービスプロバイダー (CSP): AWS、Azure、GCP |
| カテゴリ | ポリシーの ポリシーカテゴリ 。 |
| ポリシー | IaC 検出結果にマッピングされ、検出結果をトリガーした Tenable ポリシーの名前。IaC セキュリティスキャンで使用されるすべてのポリシーのリストについては、 IaC ポリシー 。 |
| ファイル | Tenableによってスキャンされた Terraform コードまたはプランファイルへのリンク。Terraform Cloud の場合、この値は NULL です。これはユーザーの環境内ではなく、実行タスクのコンテキスト内で Tenable がスキャンを実行するためです。 注意: 作業ディレクトリがリポジトリの root ディレクトリでない場合、ファイルへのリンクが機能しない可能性があります。* |
| リソース | IaC 検出結果の影響を受けるクラウドリソース。 |
| リソースタイプ | IaC 検出結果の影響を受けるクラウドリソースのタイプ。 |
| 標準 | ポリシーのベンチマークにマッピングされるコンプライアンスとセキュリティのベストプラクティス。 |
| 新規 |
この IaC 検出結果が新しいかどうか (以前のスキャンでは検出されなかったかどうか) を示します。これにより、スキャン間の差異を素早く特定し、未解決の可能性がある IaC 検出結果に対処しやすくなります。
|
IaC CI/CD スキャン結果のエクスポート
IaC CI/CD スキャン結果を CSV ファイルにエクスポートします。データは、テーブルに適用されている現在のフィルターに従ってエクスポートされ、すべてのテーブル列 (表示または非表示) が含まれます。
IaC CI/CD スキャン結果をエクスポートする方法
- [コード CI/CD >リスク] に移動します。
- (オプション)[Organization] (組織) ドロップダウンでコードテナントを選択し、クラウドアカウントの特定のサブセットに関連するポリシーを表示します。デフォルトでは、組織全体 (すべての組織/リポジトリ) が選択されています。
- テーブルをフィルタリングして、表示するデータの範囲を絞り込みます。
- テーブルの右上隅にある [Export
] ボタンをクリックします。
1 つの CI/CD スキャン結果をエクスポートすることもできます。
- [コード CI/CD >リスク] に移動します。
- (オプション)[Organization] (組織) ドロップダウンでコードテナントを選択し、クラウドアカウントの特定のサブセットに関連するポリシーを表示します。デフォルトでは、組織全体 (すべての組織/リポジトリ) が選択されています。
- テーブル内の特定のスキャンをクリックして、スキャン結果を開きます。
- 左側のペインで [検出結果] をクリックします。
- テーブルの右上隅にある [Export
] ボタンをクリックします。




