サポートされている IaC ツール
Tenable One Cloud Exposure では、次のコードフレームワークがサポートされます。
- Terraform (スキャン/同期)
- CloudFormation (スキャン)
- Azure Resource Manager (ARM)
- Bicep
- Helm
- Kubernetes
近い将来、追加の 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 形式で取得します。
その後、この JSON plan を paths パラメーターの値として使用して、Tenable によってスキャンされるリポジトリパスを定義できます。詳細については、「 GitHub アクションパラメーター を参照してください。
Terraform モジュール
クラウドサイバーエクスポージャー は、以下のように Terraform モジュールのスキャンをサポートします。
-
Terraform コード:
- 同じリポジトリ内のすべてのプライベートモジュール。
- Terraform レジストリからのすべてのパブリックモジュール。
- 統合された外部プライベートリポジトリ内のすべてのプライベートモジュール。詳細については、Terraform の統合リポジトリ内のプライベートモジュールスキャンを参照してください
注意: CI/CD 内の統合プライベートモジュールにアクセスするには、 git-tokens というパラメーターをアクセストークンとして渡す必要があります。 - Terraform plan
- すべてのモジュール。
Terraform コードのモジュールスキャン
Terraform コード用の Terraform モジュールスキャンは、モジュール化されたコードのより広範なコンテキストを考慮することで、セキュリティポスチャーを強化します。Tenable は、Terraform コードファイルによって呼び出されているすべてのモジュール (ローカルまたはリモート) を再帰的に分析し、モジュール内の変数とリソース定義を解決して、コード内の潜在的な設定ミスを検出します。Tenable はモジュールの階層全体をトレースし、すべてのリソースとその中で定義されている設定を特定します。
1 つの IaC 検出結果に複数のコードスニペットが表示されることがありますが、これは設定ミスを含むコードによって参照されるモジュールを表しています。
スキャンされたモジュールを表示するには
-
コードを接続した方法に応じて、次のいずれかを実行します。
- コードリポジトリの統合
- CI/CD 統合
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> )値をリポジトリのアクセストークンに置き換えてください。
スキャンされたプライベートモジュールの検出結果は、検出結果のコードセクションにも表示されます。
次の画像は、他のプライベートリポジトリにリンクされたプライベートリポジトリからの検出結果の例を示しています。
動的設定スキャン
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 コード | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |



