Terraformを使用してAWSにWallarmをデプロイする¶
WallarmはTerraform互換環境からAWSへノードをデプロイするためのTerraformモジュールを提供しています。これらの手順を使用してモジュールを確認し、提供されているデプロイ例をお試しください。
Wallarm Terraformモジュールを実装することで、Wallarmノードのin-line(このデプロイ方法ではプロキシ)デプロイが可能になります。デプロイ方式はWallarmモジュールの変数preset
で容易に制御できます。
ユースケース¶
サポートされているWallarmのデプロイオプションの中でも、次のユースケースではTerraformモジュールによるWallarmのデプロイを推奨します。
-
既存のインフラストラクチャがAWS上にある場合。
-
Infrastructure as Code(IaC)を実践している場合。WallarmのTerraformモジュールにより、AWS上のWallarmノードを自動で管理・プロビジョニングでき、効率と一貫性が向上します。
要件¶
-
Terraform 1.0.5以上がローカルにインストール済み
-
US Wallarm Cloudで作業する場合は
https://us1.api.wallarm.com
、EU Wallarm Cloudで作業する場合はhttps://api.wallarm.com
へのアクセス。ファイアウォールでブロックされていないことを確認してください -
攻撃検出ルールやAPI仕様の更新をダウンロードし、また許可リスト・拒否リスト・グレーリストに登録された国・地域・データセンターの正確なIPを取得するため、以下のIPアドレスへのアクセス
本トピックには、VPCクラスターなどWallarmのデプロイに必要なすべてのAWSリソースを作成する手順は含まれていません。詳細は、該当するTerraformガイドを参照してください。
Wallarm AWS Terraformモジュールの使用方法¶
AWS Terraformモジュールを使用して本番環境にWallarmをデプロイするには:
-
Wallarm Console → Nodesを開き、種類がWallarm nodeのノードを作成します。
-
生成されたノードトークンをコピーします。
-
Terraform構成に
wallarm
モジュールのコードを追加します。 -
wallarm
モジュール構成の変数値を設定します。
変数 | 説明 | 型 | 必須? |
---|---|---|---|
instance_type | Wallarmのデプロイに使用するAmazon EC2インスタンスタイプ(例:t3.small )。 | string | はい |
vpc_id | Wallarm EC2インスタンスをデプロイするAmazon Virtual Private CloudのID。 | string | はい |
token | Wallarm Console UIからコピーしたWallarmノードトークン。 1つのトークンを複数のインストールで使用する 選択したプラットフォームに関係なく、1つのトークンを複数のインストールで使用できます。これにより、Wallarm Console UI内でノードインスタンスを論理的にグループ化できます。例:複数のWallarmノードを開発環境にデプロイし、各ノードが特定の開発者の所有する専用マシン上にある場合。 | string | はい |
Wallarm固有の変数 | |||
host | Wallarm APIサーバー。設定可能な値:
api.wallarm.com です。 | string | いいえ |
upstream | デプロイするWallarmノードのバージョン。サポートされる最小バージョンは4.0 です。デフォルトは 4.8 です。 | string | いいえ |
preset | Wallarmのデプロイスキーム。設定可能:proxy (デフォルト)。 | string | いいえ |
proxy_pass | プロキシ対象のサーバープロトコルとアドレス。Wallarmノードは指定されたアドレス宛のリクエストを処理し、正当なもののみをプロキシします。プロトコルには'http'または'https'を指定できます。アドレスはドメイン名またはIPアドレス(任意でポート)を指定できます。 | string | はい(preset がproxy の場合) |
mode | トラフィックフィルタリングモード。設定可能:off 、monitoring 、safe_blocking 、block 。デフォルトは monitoring です。 | string | いいえ |
libdetection | トラフィック解析時にlibdetectionライブラリを使用するか。 デフォルトは true です。 | bool | いいえ |
global_snippet | NGINXのグローバル設定に追加するカスタム設定。設定を記述したファイルをTerraformコードのディレクトリに配置し、この変数にそのパスを指定できます。 プロキシの高度なソリューションデプロイ例に設定例があります。 | string | いいえ |
http_snippet | NGINXのhttp 設定ブロックに追加するカスタム設定。設定を記述したファイルをTerraformコードのディレクトリに配置し、この変数にそのパスを指定できます。プロキシの高度なソリューションデプロイ例に設定例があります。 | string | いいえ |
server_snippet | NGINXのserver 設定ブロックに追加するカスタム設定。設定を記述したファイルをTerraformコードのディレクトリに配置し、この変数にそのパスを指定できます。プロキシの高度なソリューションデプロイ例に設定例があります。 | string | いいえ |
post_script | Wallarmノード初期化スクリプト(cloud-init.py )の実行後に実行するカスタムスクリプト。任意のスクリプトを記述したファイルをTerraformコードのディレクトリに配置し、この変数にそのパスを指定できます。プロキシの高度なソリューションデプロイ例に設定例があります。 | string | いいえ |
AWSデプロイ構成 | |||
app_name | Wallarmモジュールが作成するAWSリソース名のプレフィックス。 デフォルトは wallarm です。 | string | いいえ |
app_name_no_template | Wallarmモジュールが作成するAWSリソース名に大文字・数字・特殊文字を使用するかどうか。false の場合、リソース名は小文字のみになります。デフォルトは false です。 | bool | いいえ |
lb_subnet_ids | Application Load BalancerをデプロイするVPCサブネットIDのリスト。推奨値は、インターネットゲートウェイへのルートを持つルートテーブルに関連付けられたパブリックサブネットです。 | list(string) | いいえ |
instance_subnet_ids | Wallarm EC2インスタンスをデプロイするVPCサブネットIDのリスト。推奨値は、送信専用接続に構成されたプライベートサブネットです。 | list(string) | いいえ |
lb_enabled | AWS Application Load Balancerを作成するかどうか。custom_target_group 変数でカスタムターゲットグループを指定しない限り、この変数に渡した値に関係なくターゲットグループが作成されます。デフォルトは true です。 | bool | いいえ |
lb_internal | Application Load Balancerを内部ロードバランサーにするかどうか。デフォルトではALBはinternet-facingタイプです。非同期アプローチで接続を処理する場合はtrue を推奨します。デフォルトは false です。 | bool | いいえ |
lb_deletion_protection | 誤って削除されることを防ぐための保護をApplication Load Balancerに対して有効にするかどうか。本番デプロイではtrue を推奨します。デフォルトは true です。 | bool | いいえ |
lb_ssl_enabled | クライアントとApplication Load Balancer間でSSL接続をネゴシエートするか。true の場合、lb_ssl_policy とlb_certificate_arn が必須です。本番デプロイで推奨されます。デフォルトは false です。 | bool | いいえ |
lb_ssl_policy | Application Load Balancerのセキュリティポリシー。 | string | lb_ssl_enabled がtrue の場合は必須 |
lb_certificate_arn | AWS Certificate Manager(ACM)証明書のAmazon Resource Name(ARN)。 | string | lb_ssl_enabled がtrue の場合は必須 |
custom_target_group | 作成されるAuto Scaling groupにアタッチする既存のターゲットグループ名。デフォルトでは新規ターゲットグループが作成されアタッチされます。非デフォルト値の場合、AWS ALBの作成は無効化されます。 | string | いいえ |
inbound_allowed_ip_ranges | Wallarmインスタンスへのインバウンド接続を許可する送信元IPおよびネットワークのリスト。トラフィックがパブリックサブネット発であっても、AWSはロードバランサーのトラフィックをマスクする点に留意してください。 デフォルト:
| list(string) | いいえ |
outbound_allowed_ip_ranges | Wallarmインスタンスからのアウトバウンド接続を許可する宛先IPおよびネットワークのリスト。 デフォルト: "0.0.0.0/0" 。 | list(string) | いいえ |
extra_ports | Wallarmインスタンスへのインバウンド接続を許可する内部ネットワークの追加ポートのリスト。セキュリティグループに適用されます。 | list(number) | いいえ |
extra_public_ports | Wallarmインスタンスへのインバウンド接続を許可するパブリックネットワークの追加ポートのリスト。 | list(number) | いいえ |
extra_policies | Wallarmスタックに関連付けるAWS IAMポリシー。Amazon S3からデータを取得するスクリプトをpost_script 変数で実行する場合などに役立ちます。 | list(string) | いいえ |
source_ranges | AWS Application Load Balancerからのトラフィックを許可する送信元IPおよびネットワークのリスト。 デフォルト: "0.0.0.0/0" 。 | list(string) | いいえ |
https_redirect_code | HTTPリクエストをHTTPSへリダイレクトする際のコード。設定可能:
0 です。 | number | いいえ |
asg_enabled | AWS Auto Scaling groupを作成するかどうか。 デフォルトは true です。 | bool | いいえ |
min_size | 作成されるAWS Auto Scaling group内の最小インスタンス数。 デフォルトは 1 です。 | number | いいえ |
max_size | 作成されるAWS Auto Scaling group内の最大インスタンス数。 デフォルトは 3 です。 | number | いいえ |
desired_capacity | 作成されるAWS Auto Scaling group内の初期インスタンス数。min_size 以上、max_size 以下である必要があります。デフォルトは 1 です。 | number | いいえ |
autoscaling_enabled | WallarmクラスターにAmazon EC2 Auto Scalingを有効にするかどうか。 デフォルトは false です。 | bool | いいえ |
autoscaling_cpu_target | AWS Auto Scaling groupが維持すべき平均CPU使用率(%)。デフォルトは70.0 です。 | string | いいえ |
ami_id | Wallarmインスタンスのデプロイに使用するAmazon Machine ImageのID。デフォルト(空文字列)の場合、アップストリームの最新イメージが使用されます。Wallarmノードを基にしたカスタムAMIを作成しても構いません。 | string | いいえ |
key_name | SSHでWallarmインスタンスに接続するために使用するAWSキーペア名。デフォルトではSSH接続は無効です。 | string | いいえ |
tags | Wallarmモジュールが作成するAWSリソースに付与するタグ。 | map(string) | いいえ |
例でWallarm Terraformモジュールを試す¶
本番デプロイ前にWallarmモジュールの使い方を試せる例を用意しています。
WallarmとTerraformに関する補足情報¶
Terraformには、多数の統合(provider)と、すぐに使える構成(module)があり、多くのベンダーが公開レジストリに提供しています。
このレジストリに、Wallarmは以下を公開しています。
-
Terraform互換環境からAWSへノードをデプロイするためのWallarmモジュール(本記事で説明)。
-
Terraform経由でWallarmを管理するためのWallarmプロバイダー。
これら2つは目的が異なる独立した要素であり、相互に依存しません。
制限事項¶
- 現時点ではCredential stuffingの検出はサポートされていません。