サポートされている IaC ツール

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

Tenable One Cloud Exposure では、次のコードフレームワークがサポートされます。

近い将来、追加の IaC フレームワークのサポートが計画されています。使用している特定のフレームワークがあり、サポートされているか確認する場合は、サポートへの問い合わせ。

Terraform

クラウドサイバーエクスポージャー は、Terraform HCL コードと Terraform plan ファイルの両方のスキャンをサポートしています。

  • HCL ファイルには、.tf 拡張子があり、terraform.tfvarsを使用する入力変数、または .tf ファイルと同じディレクトリにある .auto.tfvars 拡張子を持つファイルが必要です。環境変数の評価の詳細については、「 制限を参照してください。
  • Terraform plan ファイルは JSON 形式である必要があります。planned_values が抽出され、Tenable が理解できる形でビルトされた後、通常の terraform ファイルとしてスキャンされます。結果は plan ファイルを指します。

plan ファイルの作成方法については、関連する Terraform のドキュメントを参照してください。

plan ファイルを取得したら、以下のコマンドを実行して terraform plan を JSON 形式で取得します。

コピー

Bash

terraform show -json terraform.tfplan | jq '.' > terraform_plan.json

その後、この JSON plan を paths パラメーターの値として使用して、Tenable によってスキャンされるリポジトリパスを定義できます。詳細については、「 GitHub アクションパラメーター を参照してください。

Terraform モジュール

クラウドサイバーエクスポージャー は、以下のように Terraform モジュールのスキャンをサポートします。

  • Terraform コード:

    注意: CI/CD 内の統合プライベートモジュールにアクセスするには、 git-tokens というパラメーターをアクセストークンとして渡す必要があります。
  • Terraform plan
    • すべてのモジュール。

Terraform コードのモジュールスキャン

Terraform コード用の Terraform モジュールスキャンは、モジュール化されたコードのより広範なコンテキストを考慮することで、セキュリティポスチャーを強化します。Tenable は、Terraform コードファイルによって呼び出されているすべてのモジュール (ローカルまたはリモート) を再帰的に分析し、モジュール内の変数とリソース定義を解決して、コード内の潜在的な設定ミスを検出します。Tenable はモジュールの階層全体をトレースし、すべてのリソースとその中で定義されている設定を特定します。

1 つの IaC 検出結果に複数のコードスニペットが表示されることがありますが、これは設定ミスを含むコードによって参照されるモジュールを表しています。

スキャンされたモジュールを表示するには

  1. コードを接続した方法に応じて、次のいずれかを実行します。
    • コードリポジトリの統合
      1. クラウドサイバーエクスポージャーコンソールで、[リスク> IaC の検出結果] をクリックします。
      2. [リソースタイプ] フィルターを追加し、モジュールという単語を検索して選択することで、モジュールを含むものに結果を絞り込みます。
      3. 検出結果をクリックして、スキャンの詳細を表示します。コードによって参照されるモジュールごとに、追加のコードスニペットが表示されます。モジュール内で強調表示されている部分は、特定されたポリシーの設定ミスを表しており、コードの該当部分と関連付けることができます。

        A CosmosDB finding in a Terraform module, with the misconfigured line highlighted in the module and in the calling code

    • CI/CD 統合
      1. クラウドサイバーエクスポージャーコンソールで、[コードスキャン>リスク] をクリックします。
      2. 関連するスキャンを特定してクリックします (Terraform コード)。
      3. [検出結果] タブをクリックします。
      4. [リソースタイプ] フィルターを追加し、モジュールという単語を検索して選択することで、モジュールを含むものに結果を絞り込みます。

        Scan results filtered by the Resource Type module

      5. 検出結果をクリックして、スキャンの詳細を表示します。コードによって参照されるモジュールごとに、追加のコードスニペットが表示されます。モジュール内で強調表示されている部分は、特定されたポリシーの設定ミスを表しており、コードの該当部分と関連付けることができます。

        A public S3 bucket finding in a Terraform module, with the misconfigured lines highlighted

Terraform の統合リポジトリ内のプライベートモジュールスキャン

Tenable は、CI/CD とリポジトリの両方で、認証されたプライベートリポジトリからプライベートモジュールのスキャンをサポートします。

  • CI/CD スキャン: CI/CD で IaC スキャンを実行する場合は、git-tokens パラメーターを使用して、プライベートリポジトリに必要なアクセストークンを指定します。
  • リポジトリのスキャン: 統合されたリポジトリの場合、Tenable は既存の認証を使用してプライベートモジュールにアクセスします。

以下は、CI/CD スキャンで git-tokens パラメーターを使用する方法の例です。

  • 1 つのトークンを使用する
コピー
code-scanner iac scan --git-tokens "https://github.com/org=ghp_token123"
  • 複数のトークンの使用:

    コピー
    code-scanner iac scan \                              
    --git-tokens "https://github.com/org1=ghp_token1" \ 
    --git-tokens "https://gitlab.com/org2=glpat_token2"  
  • コンマで区切られた複数のトークンの使用
コピー

Bash

code-scanner iac scan \n  --git-tokens "https://github.com/org1=ghp_token1,https://gitlab.com/org2=glpat_token2"

各部の説明

  • git-tokens は、統合プライベートリポジトリ内のプライベートTerraformモジュールにアクセスするために使用されるパラメーターです。
  • URL( <https://github.com/org1=ghp_token1> )値をリポジトリのアクセストークンに置き換えてください。
注意: URL に「=」が含まれている場合は、「%3D」のパーセントエンコーディングに置き換えます。

スキャンされたプライベートモジュールの検出結果は、検出結果のコードセクションにも表示されます。

次の画像は、他のプライベートリポジトリにリンクされたプライベートリポジトリからの検出結果の例を示しています。

An IaC finding in a private repository, with code from a linked private module repository

動的設定スキャン

Tenable では、動的な Terraform 設定のスキャンがサポートされます。 Tenable は、ソースコードまたは変数ファイルのデフォルト値を使用して、カウント、for_each引数、および動的ブロックを分析します。これにより、拡張されたリソースや複雑なインフラ定義を可視化できます。

制限

クラウドサイバーエクスポージャー は変数と補間をサポートしていますが、関数と環境変数はサポートされていません。パイプラインを実行して特定の環境変数を割り当てると、Tenable はコードで見つかった設定を正しいものと見なします。

関数パラメーターとして使用される変数の場合は、以下の関数呼び出しで見られるように、ラップされた式として解析されます。

コピー

HCL

resource "aws_launch_configuration" "example" {
    image_id      = data.aws_ami.ubuntu.id
    instance_type = "${concat(list("${var.name}", "${var.other_name}"), var.node_tags)}"
    spot_price    = var.price
    user_data_base64 = "${var.data}=="
}

var.data = "a123B" と var.price = 1.023 とすると、以下の例のように解析されます。

コピー

HCL

resource "aws_launch_configuration" "example" {
    image_id      = data.aws_ami.ubuntu.id
    instance_type = "${concat(list("${var.name}", "${var.other_name}"), var.node_tags)}"
    spot_price    = 1.023
    user_data_base64 = "a123B=="
}

CloudFormation

クラウドサイバーエクスポージャー では、 .json または .yaml 拡張子を持つ CloudFormation テンプレートのスキャンがサポートされています。

制限

クラウドサイバーエクスポージャー は現在、以下のサポートを提供していません。

ARM

クラウドサイバーエクスポージャー は、IaC セキュリティの一環として Azure テンプレートをスキャンするために Azure Resource Manager (ARM) フレームワークをサポートしています。

制限

クラウドサイバーエクスポージャー は現在、以下の ARM 機能をサポートしていません。

  • コピーループにより作成された複数のリソースインスタンス (クラウドサイバーエクスポージャー は最初のインスタンスのみをスキャンします。
  • 範囲とデプロイメント機能
    • resourceGroup()
    • subscription()
    • tenant()
    • managementGroup()
    • deployment()
    • environment()
  • リソース機能:
    • resourceId()
    • pickZones()
    • リスト関数 (例: listKeys()、 listSecrets())
  • reference() 関数
  • リンクされたテンプレートまたは外部テンプレート
  • ユーザー定義関数
  • パラメーターファイル (parameters.json)

Bicep

クラウドサイバーエクスポージャー は、IaC セキュリティの一環として Azure Bicep のスキャンをサポートしています。

制限

クラウドサイバーエクスポージャー は現在、次の Bicep 関数をサポートしていません。

  • 拡張宣言 (拡張性プロバイダー)
  • インポート宣言 (コンパイル時のインポート)
  • モジュールループ (クラウドサイバーエクスポージャー は最初のインスタンスのみをスキャン)
  • existing キーワードで宣言されたリソース
  • リソースループによって作成された複数のリソースインスタンス (クラウドサイバーエクスポージャー は最初のインスタンスのみをスキャン)
  • パラメーターファイル (.bicepparam)

Helm

制限

クラウドサイバーエクスポージャー は現在、名前にテンプレート値が含まれているリソースや、テンプレート関数 ( lookup など) を呼び出すリソースをサポートしていません。

Kubernetes

制限

クラウドサイバーエクスポージャー は現在、名前に変数が含まれているリソースや動的に ( generateName など) 生成されるリソースをサポートしていません

IaC 互換性マトリクス

以下の表に、各 クラウドサイバーエクスポージャー IaC 機能でサポートされているプラットフォームとツールを示します。

リポジトリ

機能 プラットフォーム リポジトリ
Azure Repos 組織の追加 Bitbucket ワークスペースの追加 GitLab グループの追加 GitHub 組織の追加
Scan (スキャン) Terraform コード ✔ ✔ ✔ ✔
Terraform plan ❌ ❌ ❌ ❌
CloudFormation ✔ ✔ ✔ ✔
ARM ✔ ✔ ✔ ✔
Bicep ✔ ✔ ✔ ✔
問題をコードまでトレース (同期) Terraform コード ✔ ✔ ✔ ✔
検出結果の修正 (プルリクエスト経由) Terraform コード ✔ ✔ ✔ ✔

パイプライン

機能 プラットフォーム パイプライン
GitHub アクションを追加する Jenkins パイプラインの追加 Terraform Cloud Run タスクの追加 GitLab パイプラインの追加 Azure Pipelines の追加 別のパイプラインを追加する
Scan (スキャン) Terraform コード ✔ ✔ ❌ ✔ ✔ ✔
Terraform plan ✔ ✔ ✔ ✔ ✔ ✔
CloudFormation ✔ ✔ ❌ ✔ ✔ ✔
ARM ✔ ✔ ❌ ✔ ✔ ✔
Bicep ✔ ✔ ❌ ✔ ✔ ✔
問題をコードまでトレース (同期) Terraform コード ✔ ✔ ❌ ❌ ✔ ✔
検出結果の修正 (プルリクエスト経由) Terraform コード ❌ ❌ ❌ ❌ ❌ ❌