Claude Code × HCP Terraformでセキュアなインフラ自動構築を実現する

Claude Code × HCP Terraformでセキュアなインフラ自動構築を実現する

Clock Icon2025.07.05

Claude Codeのセッション内でTerraformを実行したいときがあります。

この際の課題として、Terraformで操作するクラウドプロバイダー(AWS,Google Cloud)やSaaSの認証情報の渡し方があります。

Claude Code経由でAWSを操作する際は工夫が必要で、DevIO上にもいくつかの記事があります。
Claude Codeで1Password管理のAWS認証情報を用いてAWSの操作をする方法 | DevelopersIO

Claude Codeでスイッチロールができない場合の対応方法 | DevelopersIO

本記事ではTerraformにフォーカスして、HCP Terraformで楽に認証情報を管理してみます。

AIエージェントへの権限付与の課題とHCP Terraformによる解決

AIエージェントにTerraformで利用する強い権限を与えたくない・一時的なクレデンシャルが失効してAIエージェントの処理が止まるといった課題があると思います。

HCP Terraformを使うと、以下のように解決できます。

  • ローカル(AIエージェント)に直接Terraform管理対象(AWS等)への強い権限を割り当てる必要がない
    • HCP Terraform上で認証情報を管理する
  • AWS等の認証情報失効時にローカルで再発行する必要がない
    • Dynamic Credentialであれば、HCP TerraformとTerraform管理対象(AWS等)でCredentialが自動ローテーションされる

認証情報管理以外にも、以下も嬉しいポイントです。

  • HCP Terraformでは、Terraform実行時間による課金が発生しない(リソース数による課金)
    • 「Claude Code Plan・Applyを繰り返す -> Terraform実行時間が長くなる -> 料金が高額に」といったことは発生しない
  • Plan・Apply結果はローカルにストリーミングされるため、AIエージェントが結果確認・修正のサイクルを回しやすい

HCP Terraformによる認証情報管理

HCP Terraformには、Workspaceという概念があります。

これはTerraformの実行環境で以下の機能を提供しています。

  • Statefile管理
  • Variables管理
  • 実行管理(Plan・Apply)

Workspace単位でStatefileやPlan・Applyを管理します。

Workspaceに対して、Variables(Type: Environment)という形で値をセットするとWorkspace内でPlan・Applyする際に環境変数として利用できます。

例えば、AWSにリソースをデプロイするときはAWS認証情報をVariablesにセットする形になります。

Untitled(4).png

ちなみに、主要なクラウドはHCP Terraformの動的クレデンシャル生成機能に対応しています。(AWSだったら、IAMロールを使って認証できます)

静的なクレデンシャルを用意する必要はありません。以下はAWSの動的クレデンシャルになる認証の流れです。

Notification_Center.png

Simplify and Secure Terraform Workflows on AWS with Dynamic Provider Credentials | AWS Partner Network (APN) Blogから引用

やってみた

Claude Codeにコード作成・デプロイをやってもらいます。

今回は、AWS上にEKS Auto Modeをデプロイしてもらいます。

以下は作業済みの前提とします。

  • デプロイ先AWSアカウントにOIDC用のIAMロール作成
  • HCP Terraform Projectの作成
  • HCP Terraform Project(※)にAWS認証用のVariables Set適用
  • terraform cliとHCP Terraformの接続(terraform login)

※ProjectはWorkspaceをグルーピングした単位で、Projectに対してVariables Setを割り当てることで配下のWorkspaceにも自動的にVariables Setが割り当てられます。

CLAUDE.mdの準備

Project指定については、CLAUDE.md無しだとうまく設定してくれなかったので設定します。

ちなみに、以下記載のcloud blockを書くだけで、terraform init時に自動的にProject配下にWorkspaceが作成されます。

CLAUDE.md
# CLAUDE.md

## HCP Terraformとの接続

以下のようにbackend.tfファイルで、Organizations Project Workspaceを指定してください。

```hcl
terraform {
  cloud {
    organization = "<organizations-name>"
    workspaces {
      name = "<workspace-name>"
      project = "<project-name>"
    }
  }
}
```

## Terraformコマンド

作成されるWorkspaceはデフォルトでは、手動承認が必要です。

`-auto-approve`オプションを付けて、承認をスキップしてください。

```bash
terraform apply -auto-approve
terraform destroy -auto-arpprove
```

リソースのデプロイ

claudeを起動して、以下のプロンプトを渡します。

HCP Terraform上にAWS認証情報があるため、ここでclaudeにAWS認証情報を渡す必要はありません。

Terraformを使って、EKS Cluster(Auto Mode有効)をデプロイしてください。
TerraformのバックエンドはHCP Terraformを使ってください。
HCP Terraformは設定は以下を使ってください。
Organization: <HCP Terraform Organizations-Name>
Project: <Project-Name>

以下のようにTerraformコード作成を行ってくれました。

Cursor_と_memo_md_—_terraform-sample.png

途中でPlanのエラーがでました。こちらも、Claude Codeが自動で修正してPlanが通るところまで対応してくれました。

ちなみに、HCP Terraform上でterraform planは行われますが、ローカルにもPlanの内容はストリーミングされます。

Claude CodeはストリーミングされたPlan・Apply結果をみて、コード修正 -> Plan・Applyを繰り返していました。

Cursor_と_memo_md_—_terraform-sample.png

Runs___classmethod-sandbox___HCP_Terraform.png

暫く待つと、以下のEKSクラスターを作成されました。

Notification_Center.png

まとめ

AIエージェントがTerraformを利用することで、Plan・Applyエラー・Policy Checkのエラーに対して自律的にtfファイルを修正することが可能になりました。

しかし、AIエージェントに対してTerraform用のAWS等に対する強い権限を渡すのはリスクもあると思います。

HCP Terraformと組み合わせることで、セキュアでより快適に利用できます。

ぜひ、AIエージェント × HCP Terraform試してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.