WarpgateとTerraformでセキュアなインフラストラクチャ管理を実現する方法
このガイドでは、WarpGateリソースをTerraformで管理する方法を解説します。Warpgateは、インフラストラクチャへの安全なアクセスを提供するスマートなSSHおよびHTTPS bastionです。Terraformと組み合わせることで、インフラストラクチャの構築、管理、保護をコードとして定義し自動化できます。
前提条件
始める前に、以下のものがインストールされていることを確認してください。
- Terraform (バージョン 0.13.x 以降)
- Go (バージョン 1.18 以降、プロバイダをビルドする場合)
- Warpgate (バージョン 0.13.2 以降)
プロバイダーの構築
Terraform Warpgateプロバイダーを構築する手順は以下の通りです。
-
リポジトリをクローンします。
-
プロバイダーをビルドします。
-
ローカル開発用にプロバイダーをインストールします。
これにより、プロバイダーが
~/.terraform.d/plugins
ディレクトリ(またはWindows/macOSの場合は同等のディレクトリ)にビルドおよびインストールされます。
プロバイダーの使用
Terraform構成でプロバイダーを定義して使用します。
terraform {
required_providers {
warpgate = {
source = "registry.terraform.io/warp-tech/warpgate"
version = "~> 1.0.0"
}
}
}
provider "warpgate" {
host = "https://warpgate.example.com"
token = var.warpgate_token
}
環境変数での設定:
以下の環境変数を使用してプロバイダーを構成することもできます。
リソースとデータソース
リソース
warpgate_role
: Warpgateロールの管理warpgate_user
: Warpgateユーザーの管理warpgate_target
: Warpgateターゲットの管理(SSH、HTTP、MySQL、PostgreSQL)warpgate_user_role
: ユーザーへのロール割り当ての管理warpgate_target_role
: ターゲットへのロール割り当ての管理warpgate_password_credential
: ユーザーのパスワード資格情報の管理warpgate_public_key_credential
: ユーザーのSSH公開鍵資格情報の管理
データソース
warpgate_role
: Warpgateロールに関する情報の取得warpgate_user
: Warpgateユーザーに関する情報の取得warpgate_target
: Warpgateターゲットに関する情報の取得
使用例
以下に、WarpgateリソースをTerraformで管理する例を示します。
ユーザーの作成
resource "warpgate_user" "example" {
username = "eugene"
description = "Eugene - WarpGate Developer"
credential_policy {
http = ["Password", "Totp"]
ssh = ["PublicKey"]
mysql = ["Password"]
postgres = ["Password"]
}
}
ユーザーへの資格情報の追加
# パスワード資格情報の追加
resource "warpgate_password_credential" "eugene_password" {
user_id = warpgate_user.example.id
password = var.user_password
}
# SSH公開鍵資格情報の追加
resource "warpgate_public_key_credential" "eugene_ssh_key" {
user_id = warpgate_user.example.id
label = "Work Laptop"
public_key = "ssh-rsa AAAAB3NzaC1yc2E... [email protected]"
}
ロールの作成
resource "warpgate_role" "developers" {
name = "developers"
description = "Role for development team"
}
ユーザーへのロールの割り当て
resource "warpgate_user_role" "developer_role" {
user_id = warpgate_user.example.id
role_id = warpgate_role.developers.id
}
SSHターゲットの作成
resource "warpgate_target" "app_server" {
name = "app-server"
description = "Application Server"
ssh_options {
host = "10.0.0.10"
port = 22
username = "admin"
# password_auth または public_key_auth のいずれかを使用
password_auth {
password = var.ssh_password
}
# OR
# public_key_auth {}
}
}
HTTPターゲットの作成
resource "warpgate_target" "web_app" {
name = "internal-web-app"
description = "Internal Web Application"
http_options {
url = "https://internal.example.com"
tls {
mode = "Required"
verify = true
}
headers = {
"X-Custom-Header" = "value"
}
}
}
MySQLターゲットの作成
resource "warpgate_target" "database" {
name = "mysql-db"
description = "Production MySQL Database"
mysql_options {
host = "db.example.com"
port = 3306
username = "admin"
password = var.db_password
tls {
mode = "Required"
verify = true
}
}
}
PostgreSQLターゲットの作成
resource "warpgate_target" "postgres_db" {
name = "postgres-db"
description = "Production PostgreSQL Database"
postgres_options {
host = "postgres.example.com"
port = 5432
username = "admin"
password = var.postgres_password
tls {
mode = "Required"
verify = true
}
}
}
ターゲットへのロールの割り当て
resource "warpgate_target_role" "app_server_access" {
target_id = warpgate_target.app_server.id
role_id = warpgate_role.developers.id
}
データソースの使用
data "warpgate_user" "existing_user" {
id = "existing-user-id"
}
data "warpgate_role" "existing_role" {
id = "existing-role-id"
}
data "warpgate_target" "existing_target" {
id = "existing-target-id"
}
既存のリソースのインポート
既存のWarpgateリソースをTerraform stateにインポートできます。
認証
プロバイダーは、APIトークンを使用した認証をサポートしています。トークンは、Warpgate管理インターフェースから生成できます。
開発
プロバイダーの開発に関する情報は、元のドキュメントを参照してください。
まとめ
Terraform Warpgateプロバイダーを使用すると、インフラストラクチャのセキュリティを強化しながら、Warpgateリソースを効率的に管理できます。このガイドが、TerraformとWarpgateの統合に役立つことを願っています。