Claude Code × HCP Terraformでセキュアなインフラ自動構築を実現する
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にセットする形になります。
ちなみに、主要なクラウドはHCP Terraformの動的クレデンシャル生成機能に対応しています。(AWSだったら、IAMロールを使って認証できます)
静的なクレデンシャルを用意する必要はありません。以下はAWSの動的クレデンシャルになる認証の流れです。
やってみた
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
## 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コード作成を行ってくれました。
途中でPlanのエラーがでました。こちらも、Claude Codeが自動で修正してPlanが通るところまで対応してくれました。
ちなみに、HCP Terraform上でterraform plan
は行われますが、ローカルにもPlanの内容はストリーミングされます。
Claude CodeはストリーミングされたPlan・Apply結果をみて、コード修正 -> Plan・Applyを繰り返していました。
暫く待つと、以下のEKSクラスターを作成されました。
まとめ
AIエージェントがTerraformを利用することで、Plan・Applyエラー・Policy Checkのエラーに対して自律的にtfファイルを修正することが可能になりました。
しかし、AIエージェントに対してTerraform用のAWS等に対する強い権限を渡すのはリスクもあると思います。
HCP Terraformと組み合わせることで、セキュアでより快適に利用できます。
ぜひ、AIエージェント × HCP Terraform試してみてください。