1. 概要
- Run Tasksとは何か(Terraform Cloudのサードパーティ連携機能)
- Run Tasksのライフサイクルとフェーズ
- 代表的なRun Tasks連携ツール(tfsec・Checkov・Snyk等)
- Run Tasksの設定方法
Run Tasksは、Terraform CloudのRunサイクル(plan/apply)の特定フェーズでサードパーティツールを呼び出す機能です。セキュリティスキャン・コスト見積もり・コンプライアンスチェックを自動化できます。
2. Run Tasksのフェーズ
terraform plan
└─ Pre-plan Task(plan実行前)
terraform plan 実行
└─ Post-plan Task(planの後、apply前)★最も一般的
terraform apply
└─ Post-apply Task(apply後の検証)
Post-planフェーズが最も使われます。planの結果を分析してセキュリティ問題があればapplyをブロックできます。
3. Run Tasksの動作モード
| モード | 動作 |
|---|---|
| Advisory | 問題を検出しても警告のみ(applyはブロックしない) |
| Mandatory | 問題を検出するとapplyをブロックする |
4. 代表的な連携ツール
| ツール | 用途 | 提供元 |
|---|---|---|
| Snyk | セキュリティ脆弱性スキャン | Snyk |
| Bridgecrew(Prisma Cloud) | コンプライアンス・セキュリティ | Palo Alto |
| Infracost | Terraformのコスト見積もり | Infracost |
| Wiz | クラウドセキュリティ | Wiz |
| Terrascan | ポリシースキャン(OPA) | Tenable |
5. Terraform設定(Run Tasksを使う側)
Run Tasks自体はTerraform CloudのUI/APIで設定します。Terraform側のコードに変更は不要ですが、Run Tasksが評価する対象のコードは品質を保つ必要があります。
# Run Tasksがスキャンする対象コード例
terraform {
required_version = ">= 1.9"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
cloud {
organization = "my-org"
workspaces {
name = "production"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
variable "environment" {
description = "環境名"
type = string
default = "dev"
}
data "aws_ami" "amazon_linux_2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
}
# Run Tasksがチェックするポイント:
# - EBSのencryptedがtrueか
# - セキュリティグループが0.0.0.0/0を許可していないか
# - タグが適切に設定されているか
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux_2023.id
instance_type = "t3.micro"
root_block_device {
volume_size = 20
volume_type = "gp3"
encrypted = true # ← Run Tasksがここを確認する
}
tags = {
Name = "${var.environment}-web"
Environment = var.environment
ManagedBy = "terraform"
}
}
6. Run TasksのWebhook設定
Run Tasksは外部サービスのWebhookエンドポイントを登録する形で設定します。
Terraform Cloud → POST https://your-run-task-server/webhook
├─ payload: plan結果のJSONやAPIキー
└─ レスポンス: passed/failed を返す
Terraform CloudのUI: Settings → Integrations → Run Tasks → Add Run Task
設定後、Workspace → Settings → Run Tasks でWorkspaceに紐付けます。
7. SentinelとRun Tasksの違い
| 比較軸 | Sentinel | Run Tasks |
|---|---|---|
| ポリシー記述 | Sentinelポリシー言語 | 外部ツールのロジック |
| カスタマイズ | 高(コードで定義) | 外部サービスの設定に依存 |
| プラン | Plus以上 | Plus以上(一部Free) |
| 用途 | ガバナンスポリシー | セキュリティ・コスト・コンプライアンス |
8. 関連記事
- Terraform CloudのSentinelポリシー入門 — ポリシーコード
- Terraform Cloudは無料でどこまで使える? — 料金プラン
- tfsec — TerraformコードのIaCセキュリティスキャン — ローカルでのスキャン
- Checkov — Terraformコードの静的解析 — 静的解析
- OPA/Conftestによるポリシー管理 — OSS版ポリシー
- Terraform CloudのVCS連携設定ガイド — VCS連携
9. まとめ
- Run Tasksはplan/applyのフェーズでサードパーティツールを呼び出す機能
- Post-planフェーズでセキュリティスキャン結果によりapplyをブロックできる
- MandatoryとAdvisoryの2モードがあり、段階的に導入できる
- SentinelはHashiCorp独自言語でポリシーを書くのに対し、Run Tasksは外部サービスを連携させる
対象バージョン: Terraform Cloud (2024) 公式ドキュメント: https://developer.hashicorp.com/terraform/cloud-docs/workspaces/settings/run-tasks