このトピックでは、Express Connect 回線で接続された 2 つの VPC 間のトラフィックを保護する仮想プライベートクラウド (VPC) ファイアウォールを作成する方法について説明します。
このトピックのサンプルコードは、数回クリックするだけで実行できます。詳細については、Terraform Explorer にアクセスしてください。
始める前に
Alibaba Cloud アカウントは、アカウント内のリソースに対するすべての権限を持っています。 Alibaba Cloud アカウントが漏洩した場合、リソースは大きなリスクにさらされます。Resource Access Management (RAM) ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することをお勧めします。詳細については、「RAM ユーザーを作成する」および「AccessKey ペアを作成する」をご参照ください。
詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "yundun-cloudfirewall:*", "yundun-ndr:*", "vpc:CreateVpc", "vpc:DeleteVpc", "vpc:DescribeVpcs", "vpc:CreateVSwitch", "vpc:DeleteVSwitch", "vpc:DescribeVSwitches", "vpc:CreateRouteEntry", "vpc:DeleteRouteEntry", "vpc:DescribeRouteEntries", "vpc:CreateVpcPeerConnection", "vpc:DeleteVpcPeerConnection", "vpc:DescribeVpcPeerConnections", "cloudfirewall:CreateVpcFirewall", "cloudfirewall:DeleteVpcFirewall", "cloudfirewall:DescribeVpcFirewalls" ], "Resource": "*" } ] }Terraform 環境を準備します。Terraform を使用するには、次のいずれかの方法を使用できます。
Terraform Explorer で Terraform を使用する: Alibaba Cloud は、Terraform のオンラインランタイム環境である Terraform Explorer を提供しています。 Terraform をインストールする必要なく、Terraform Explorer にログインした後に Terraform を使用できます。詳細については、「Terraform Explorer で Terraform を使用する」をご参照ください。この方法は、追加費用なしで Terraform を迅速かつ便利に使用およびデバッグしたい場合に適しています。
Cloud Shell で Terraform を使用する: Terraform は Cloud Shell にプリインストールされており、ID 資格情報は構成されています。 Cloud Shell で Terraform コマンドを直接実行できます。詳細については、「Cloud Shell で Terraform を使用する」をご参照ください。この方法は、低コストで Terraform を迅速かつ便利に使用およびデバッグしたい場合に適しています。
オンプレミスマシンに Terraform をインストールして構成する: この方法は、ネットワークの状態が悪い場合や、カスタム開発環境を使用する場合に適しています。詳細については、「ローカル PC に Terraform をインストールして構成する」をご参照ください。
重要Terraform 0.12.28 以降をインストールする必要があります。
terraform --versionコマンドを実行して、Terraform のバージョンをクエリできます。
リソース
alicloud_cloud_firewall_vpc_firewall: VPC ファイアウォールを作成します。
手順
このセクションでは、VPC ファイアウォールを作成する方法について説明します。
作業ディレクトリと、そのディレクトリに
main.tfという名前の構成ファイルを作成します。 main.tf は Terraform のメインファイルであり、デプロイするリソースを定義します。variable "region" { default = "cn-heyuan" } provider "alicloud" { region = var.region } # 現在の Alibaba Cloud アカウントの ID を取得します。 data "alicloud_account" "current" { } # VPC 1 を作成します。 resource "alicloud_vpc" "vpc" { vpc_name = "dd-tf-vpc-01" cidr_block = "192.168.0.0/16" } # VPC 2 を作成します。 resource "alicloud_vpc" "vpc1" { vpc_name = "dd-tf-vpc-02" cidr_block = "172.16.0.0/12" } # vSwitch を作成し、CIDR ブロック 192.168.10.0/24 を vSwitch に割り当てます。 resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "192.168.10.0/24" zone_id = "cn-heyuan-a" vswitch_name = "dd-tf-vpc-01-example-1" } # vSwitch を作成し、CIDR ブロック 192.168.20.0/24 を vSwitch に割り当てます。 resource "alicloud_vswitch" "vsw1" { vpc_id = alicloud_vpc.vpc.id cidr_block = "192.168.20.0/24" zone_id = "cn-heyuan-b" vswitch_name = "dd-tf-vpc-01-example-2" } # vSwitch を作成し、CIDR ブロック 172.16.10.0/24 を vSwitch に割り当てます。 resource "alicloud_vswitch" "vsw2" { vpc_id = alicloud_vpc.vpc1.id cidr_block = "172.16.10.0/24" zone_id = "cn-heyuan-a" vswitch_name = "dd-tf-vpc-02-example-11" } # vSwitch を作成し、CIDR ブロック 172.16.20.0/24 を vSwitch に割り当てます。 resource "alicloud_vswitch" "vsw3" { vpc_id = alicloud_vpc.vpc1.id cidr_block = "172.16.20.0/24" zone_id = "cn-heyuan-b" vswitch_name = "dd-tf-vpc-02-example-22" } # VPC ピアリング接続を作成します。 resource "alicloud_vpc_peer_connection" "default" { # VPC ピアリング接続の名前。 peer_connection_name = "terraform-example-vpc-peer-connection" # 開始側 VPC の ID。 vpc_id = alicloud_vpc.vpc.id # 受信側 VPC の Alibaba Cloud アカウント ID。 accepting_ali_uid = data.alicloud_account.current.id # 受信側 VPC のリージョン ID。2 つの VPC が同じリージョンにある場合は、開始側 VPC のリージョン ID を入力します。VPC が異なるリージョンにある場合は、異なるリージョン ID を入力します。 accepting_region_id = "cn-heyuan" # 受信側 VPC の ID。 accepting_vpc_id = alicloud_vpc.vpc1.id # 説明。 description = "terraform-example" # VPC ピアリング接続を強制的に削除するかどうかを指定します。 force_delete = true } # 受信側 VPC。 resource "alicloud_vpc_peer_connection_accepter" "default" { instance_id = alicloud_vpc_peer_connection.default.id } # ルート vpc-A を構成します。 resource "alicloud_route_entry" "foo" { # ルートテーブル VPC-A の ID。 route_table_id = alicloud_vpc.vpc.route_table_id # カスタムの宛先 CIDR ブロック。 destination_cidrblock = "1.2.3.4/32" # ネクストホップのタイプ。 nexthop_type = "VpcPeer" # ネクストホップの ID。 nexthop_id = alicloud_vpc_peer_connection.default.id } # ルート vpc-B を構成します。 resource "alicloud_route_entry" "foo1" { # ルートテーブル VPC-A の ID。 route_table_id = alicloud_vpc.vpc1.route_table_id # カスタムの宛先 CIDR ブロック。 destination_cidrblock = "4.3.X.X/32" # ネクストホップのタイプ。 nexthop_type = "VpcPeer" # ネクストホップの ID。 nexthop_id = alicloud_vpc_peer_connection.default.id } # 他の必要なリソースを作成します。 resource "time_sleep" "wait_before_firewall" { # Cloud Enterprise Network (CEN) インスタンスとネットワークインスタンス接続が作成されていることを確認します。 depends_on = [ alicloud_route_entry.foo, alicloud_route_entry.foo1 ] create_duration = "720s" # ビジネス要件に基づいて値を指定します。 } # 待ち時間。 resource "null_resource" "wait_for_firewall" { provisioner "local-exec" { command = "echo waiting for firewall to be ready" // ファイアウォールの準備ができるまで待機しています。 } # CEN インスタンスが作成されていることを確認します。 depends_on = [time_sleep.wait_before_firewall] } # VPC ピアリング接続または Express Connect 回線。 resource "alicloud_cloud_firewall_vpc_firewall" "default" { # 必要な依存関係。 depends_on = [ null_resource.wait_for_firewall ] timeouts { create = "30m" # 作成操作のタイムアウト期間。 } # インスタンスの名前。 vpc_firewall_name = "tf-test" # ユーザーの ID。 member_uid = data.alicloud_account.current.id local_vpc { # 開始側 VPC の ID。 vpc_id = alicloud_vpc.vpc.id # リージョン。 region_no = "cn-heyuan" # ルート。 local_vpc_cidr_table_list { # ルートテーブルの ID。 local_route_table_id = alicloud_vpc.vpc.route_table_id local_route_entry_list { # ネクストホップ。 local_next_hop_instance_id = alicloud_vpc_peer_connection.default.id # 宛先 CIDR ブロック。 local_destination_cidr = alicloud_route_entry.foo.destination_cidrblock } } } peer_vpc { # 受信側 VPC の ID。 vpc_id = alicloud_vpc.vpc1.id # リージョン。 region_no = "cn-heyuan" # ルート。 peer_vpc_cidr_table_list { # ルートテーブルの ID。 peer_route_table_id = alicloud_vpc.vpc1.route_table_id peer_route_entry_list { # 宛先 CIDR ブロック。 peer_destination_cidr = alicloud_route_entry.foo1.destination_cidrblock # ネクストホップ。 peer_next_hop_instance_id = alicloud_vpc_peer_connection.default.id } } } # VPC ファイアウォールのステータス。有効な値: # open: VPC ファイアウォールは、作成後に自動的に有効になります。 # close: VPC ファイアウォールは、作成後に自動的に有効になりません。 status = "open" } output "vpc_id" { value = alicloud_vpc.vpc.id } output "vpc1_id" { value = alicloud_vpc.vpc1.id } output "route_table_id_vpc" { value = alicloud_vpc.vpc.route_table_id } output "route_table_id_vpc1" { value = alicloud_vpc.vpc1.route_table_id } output "foo_nexthop_id" { value = alicloud_vpc_peer_connection.default.id } output "foo1_nexthop_id" { value = alicloud_vpc_peer_connection.default.id } output "cidrblock" { value = alicloud_route_entry.foo.destination_cidrblock } output "cidrblock1" { value = alicloud_route_entry.foo1.destination_cidrblock }次のコマンドを実行して、
Terraformを初期化します。terraform init次の情報が返された場合、Terraform は初期化されています。
Initializing the backend... Initializing provider plugins... - Checking for available provider plugins... - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.203.0... Warning: registry.terraform.io: For users on Terraform 0.13 or greater, this provider has moved to aliyun/alicloud. Please update your source in required_providers. Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.実行計画を作成し、変更をプレビューします。
terraform plan次のコマンドを実行して、VPC ファイアウォールを作成します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[Enter] キーを押します。コマンドが正常に実行されるまで待ちます。次の情報が表示された場合、操作は成功です。Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes // 省略 Apply complete! Resources: 13 added, 0 changed, 0 destroyed.結果を確認します。
terraform show コマンドを実行する
次のコマンドを実行して、作成された VPC ファイアウォールの詳細を表示できます。
terraform show
Cloud Firewall コンソールにログインする
Cloud Firewall コンソール にログインし、[ファイアウォール設定] ページに移動して、[VPC ファイアウォール] タブをクリックします。次に、ファイアウォール ID を使用して VPC ファイアウォールを検索し、VPC ファイアウォールの詳細を表示します。
リソースの解放
Terraform を使用して作成または管理されている上記のリソースが不要になった場合は、次のコマンドを実行してリソースを解放します。 terraform destroy コマンドの詳細については、「共通コマンド」をご参照ください。
terraform destroy完全なサンプルコード
このトピックのサンプルコードは、数回クリックするだけで実行できます。詳細については、Terraform Explorer にアクセスしてください。