Terraform CloudのRun Tasks — サードパーティスキャン連携

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
InfracostTerraformのコスト見積もり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の違い

比較軸SentinelRun Tasks
ポリシー記述Sentinelポリシー言語外部ツールのロジック
カスタマイズ高(コードで定義)外部サービスの設定に依存
プランPlus以上Plus以上(一部Free)
用途ガバナンスポリシーセキュリティ・コスト・コンプライアンス

8. 関連記事


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