Terraform × Boundary × Vault:ゼロトラストを「コード」で実装する極限のアクセス管理術
「VPNを廃止し、アイデンティティベースのアクセス制御へ移行する」。これは現代のクラウドインフラにおいて避けて通れない命題だ。しかし、多くの現場では境界防御の残滓に囚われ、複雑なルールセットで運用を疲弊させている。
本稿では、HashiCorpの三種の神器――Terraform, Vault, Boundary――を組み合わせ、動的シークレットとJust-In-Timeなネットワークアクセスを完全自動化する「ゼロトラスト基盤」の構築手法を伝授する。
—
1. アーキテクチャの真髄:動的アクセス管理のフロー
静的な踏み台サーバーや永続的なアクセスキーは、もはや負債だ。我々が目指すのは以下のサイクルである。
1. Terraform: BoundaryとVaultのポリシーを定義し、リソースとの接続性をコードとして確定させる。
2. Vault: ターゲットリソース(DBやAPI)への短命な認証情報を動的に生成する。
3. Boundary: ユーザーIDを検証し、Vault経由で取得した認証情報を使用してターゲットへのトンネルを確立する。
この構成により、「誰が」「いつ」「どのリソースに」アクセスしたかの監査ログがVaultとBoundaryに完璧に刻まれる。
—
2. 実践:Terraformによるプロビジョニングの勘所
Terraformでこれらの基盤を構築する際、最も重要なのは「依存関係の明確化」だ。
神設定:providerの定義とモジュール構造
複数のproviderを扱う際、`alias`を使いこなせ。特にBoundaryはリソース作成時に認証が必要なため、ライフサイクル管理を厳密に行う必要がある。
provider.tf – 認証情報の注入は必ず環境変数経由で行い、コードには書かない
provider “vault” {
address = var.vault_addr
}
provider “boundary” {
addr = var.boundary_addr
auth_method_id = var.auth_method_id
password_auth_method_login_name = var.admin_user
password_auth_method_password = var.admin_pass
}
Boundaryホストカタログの動的登録(コード例)
ターゲットのIPが変わっても手動更新は不要。Terraformでデータソースから取得し、Boundaryのカタログへ流し込むのがプロの流儀だ。
resource “boundary_host_catalog_static” “db_catalog” {
name = “production-db-catalog”
description = “DBサーバー群の動的カタログ”
scope_id = boundary_scope.project.id
}
resource “boundary_host_static” “db_node” {
name = “db-node-01”
address = “10.0.1.5” # 実際にはデータソースから取得
host_catalog_id = boundary_host_catalog_static.db_catalog.id
}
—
3. 開発スピードを加速させる「現場の極意」
① 必須VSCodeプラグインと設定
Terraform開発において、脳のメモリを使わないために以下のプラグインは必須だ。
- HashiCorp Terraform: 構文ハイライトと補完。
- Terraform Graph Visualizer: 依存関係が複雑化した際に、リソースのつながりを可視化する。
- Better TOML/YAML: 設定ファイルの型定義ミスを即座に検知。
`.vscode/settings.json` のベストプラクティス:
{
“terraform.languageServer”: {
“args”: [“serve”],
“external”: true
},
“editor.formatOnSave”: true,
“editor.codeActionsOnSave”: {
“source.fixAll”: “explicit”
}
}
② チーム開発における「冪等性」のルール
Terraformのステートファイルを汚さないために、以下のルールを徹底せよ。
1. `terragrunt`の導入: モジュールをDRYに保つための必須ツール。環境ごとの設定をディレクトリ階層で管理し、コードの重複を排除する。
2. `checkov` または `tflint` のCI組み込み: ゼロトラスト基盤に脆弱な設定(例:`ingress`で`0.0.0.0/0`許可)が含まれていないかを、CIパイプラインのテスト段階で弾く。
—
4. 運用エンジニアへの提言:自動化の先にあるもの
このアーキテクチャの最大の利点は、「アクセス権の棚卸しが不要になること」だ。
Vaultの動的シークレットはTTL(生存期間)が過ぎれば自動的に無効化され、Boundaryのセッションはユーザーがログアウトした瞬間に遮断される。
「開発者がDBに接続したい」と言われたとき、君たちはもうIAMユーザーを払い出す必要はない。Boundaryのロールを割り当てるだけでいい。それが、クラウドネイティブ時代のインフラエンジニアの仕事だ。
最後に:キーボードショートカットの活用
`terraform plan` や `apply` を毎回打つのは時間の無駄だ。`Makefile` に定型コマンドをまとめ、シェルでエイリアスを貼れ。
Makefileの一例
plan:
terraform fmt -recursive && terraform validate && terraform plan
apply:
terraform apply -auto-approve
この基盤を一度構築すれば、君たちのインフラは「強固」かつ「柔軟」な要塞へと進化する。境界防御の時代は終わった。今こそ、コードでセキュリティを定義せよ。