ネットワーク ACL を作成し、vSwitch にアタッチすることで、ネットワーク ACL ルールを設定して、vSwitch のインバウンドトラフィックとアウトバウンドトラフィックを正確に制御できます。
仕組み
適用範囲
ネットワーク ACL は、関連付けられた vSwitch 内の ENI(Elastic Network Interface)にのみ適用されます。
ネットワーク ACL は、ECS、ECI、NLB インスタンスなど、ネットワーク通信に ENI を使用するクラウドリソースのトラフィックを制御します。
ENI を使用しない RDS や CLB などのインスタンスのトラフィックは、ネットワーク ACL では制御されません。 RDS インスタンスのアクセスの制御は ホワイトリスト を使用して実装され、CLB インスタンスは アクセス制御ポリシー を使用します。
ネットワーク ACL は、EIP 可視モードの EIP にバインドされているセカンダリ ENI のトラフィックを制御しません。
PrivateLink を介して Alibaba Cloud サービスにアクセスする場合、トラフィックはエンドポイント ENI を通過し、ネットワーク ACL ルールによって制御されます。
ルール適用メカニズム
各ルールには優先度があります。システムは優先度 1 のルールから開始し、IP バージョン、プロトコルタイプ、送信元/宛先アドレス、ポート範囲に基づいてトラフィックが一致するかどうかを順番に評価します。トラフィックがルールに一致すると、指定された許可/拒否ポリシーが実行されます。
インバウンドルールとアウトバウンドルールの両方で、ポート範囲は常にトラフィックの宛先ポートと一致します。
ネットワーク ACL がトラフィックを拒否する場合、ドロップ操作を使用します。リクエスト側は応答を受信しないため、タイムアウトまたは接続を確立できません。
ネットワーク ACL ルールはステートレスです。特定のトラフィックが vSwitch に入ることを許可するようにインバウンドルールを設定する場合、応答トラフィックは自動的には許可されません。クライアントの一時ポートにレスポンストラフィックを返すには、[許可] するアウトバウンドルールを作成する必要があります。クライアントがサーバーにリクエストを開始すると、一時ポート範囲からポートをランダムに選択してサーバーの応答を受信します。
さまざまなタイプのクライアントがサービスに正常にアクセスできるようにするには、一時ポート範囲を 1024 ~ 65535 に設定できます。
設定例では、送信元/宛先アドレス範囲が重複する 2 つのカスタムルールがあります。IP 192.168.0.1 のクライアントが HTTPS プロトコルを使用してサブネット内のサービスにアクセスすると、トラフィックは最初に優先度 1 のルールに一致するため、拒否されます。IP 192.168.1.1 のクライアントがアクセスすると、トラフィックは優先度 2 のルールに順番に一致するため許可され、応答トラフィックは優先度 1 のアウトバウンドルールに従ってクライアントの一時ポートに返送されます。
サービスが多くのポートを開く必要があるが、一部のポートへのアクセスを拒否する必要がある場合は、拒否ルールが許可ルールよりも優先度が高くなるようにする必要があります。
セキュリティグループとの違い
比較項目 | ネットワーク ACL | セキュリティグループ |
適用範囲 | ネットワーク ACL ルールに基づいて、vSwitch に出入りするトラフィックを制御します。 | ECS インスタンスレベルでのアクセス制御方法。 ECS インスタンスに関連付けられた複数のセキュリティグループのルールは、固定ポリシーに従ってソートされ、インスタンスのインバウンドトラフィックとアウトバウンドトラフィックを許可するかどうかをまとめて決定します。 |
リターンダータフローステート | ステートレス:リターンダータフローはルールで明示的に許可する必要があります。 | ステートフル:リターンダータフローは自動的に許可され、ルールによる影響を受けません。 |
ルールマッチング順序 | ルールは、優先度に従って順番に評価され、トラフィックに一致するかどうかが判断されます。 | 最初に優先度でソートされます。優先度が同じ場合は、拒否ポリシーのルールが許可ポリシーのルールよりも前に配置されます。 ソート後、ルールは順番に照合されます。 |
ECS インスタンスとの関連付け | 各 vSwitch は 1 つのネットワーク ACL にのみ関連付けることができます。 | ECS インスタンスは複数のセキュリティグループに参加できます。 |
ネットワーク ACL の作成/削除
ネットワーク ACL を作成し、vSwitch に関連付けることで、vSwitch に出入りするトラフィックを制御できます。
IPv4 CIDR ブロックのみを持つ VPC のネットワーク ACL を作成すると、システムはインバウンドとアウトバウンドの両方向に次のデフォルトルールを追加します。
クラウドサービするルール:Alibaba Cloud のプライベート 名前解決 サービスと ECS メタデータサービスの使用を許可します。これらのルールは最優先であり、変更または削除することはできません。
1. デフォルトの Alibaba Cloud DNS サーバ IP は 100.100.2.136 と 100.100.2.138 で、内部 ドメイン名 の解決に使用されます。
2. MetaServer IP は 100.100.100.200 で、ECS インスタンスが適切に動作するために不可欠なメタデータサービスを提供します。
カスタムルール:すべての IPv4 トラフィックを許可して、ネットワーク ACL を作成しても同じ VPC 内の異なる vSwitch 間の プライベートネットワーク 通信に影響を与えないようにします。カスタムルールを設定して、vSwitch に出入りするトラフィックを正確に制御できます。
システムルール:他のルールに一致しない IPv4 トラフィックを拒否するために使用されます。これらのルールは優先度が最も低く、変更または削除することはできません。
ACL が存在する VPC で IPv6 が有効になっている場合、すべての IPv6 トラフィックを許可するカスタムルールとすべての IPv6 トラフィックを拒否するシステムルールがインバウンドとアウトバウンドの両方向に追加されます。
ネットワーク ACL は同じ VPC 内の vSwitch にのみ関連付けることができ、各 vSwitch は 1 つのネットワーク ACL にのみ関連付けることができます。
コンソール
ネットワーク ACL の作成
仮想プライベートクラウド コンソール - ネットワーク ACL ページに移動し、ページ上部でターゲット リージョンを選択して、[ネットワーク ACL の作成] をクリックします。
[VPC] を設定し、ネットワーク ACL に関連付ける予定の vSwitch が含まれる VPC を選択します。
vSwitch の関連付け
インスタンス ID または [アクション] 列の [管理] をクリックし、[関連リソース] タブに移動して、[vSwitch の関連付け] をクリックし、1 つ以上のターゲット vSwitch と [関連付けの確認] を選択します。関連付けられた vSwitch のトラフィックは、ネットワーク ACL ルールに従って制御されます。この制御を削除するには、このタブのターゲット vSwitch の [アクション] 列の [関連付けの解除] をクリックします。
ターゲット vSwitch の詳細ページの [ネットワーク ACL] パラメーターセクションで、ネットワーク ACL をバインド、変更、またはバインド解除することもできます。
ネットワーク ACL の削除
最初に、すべての vSwitch の関連付けが削除されていることを確認します。ターゲットネットワーク ACL の [アクション] 列で、[削除] をクリックします。
API
CreateNetworkAcl を呼び出して、ネットワーク ACL を作成します。
AssociateNetworkAcl を呼び出して、ネットワーク ACL を vSwitch に関連付けます。
UnassociateNetworkAcl を呼び出して、ネットワーク ACL を vSwitch から関連付け解除します。
DeleteNetworkAcl を呼び出して、ネットワーク ACL を削除します。
Terraform
コンソールのロジックとは異なり、Terraform はネットワーク ACL と 1 つの vSwitch の関連付けのみをサポートしています。
リソース:alicloud_network_acl
# ネットワーク ACL のリージョンを指定します
provider "alicloud" {
region = "cn-hangzhou"
}
# VPC ID を指定します
variable "vpc_id" {
default = "vpc-bp1k******" // 実際の VPC ID に置き換えます
}
# vSwitch ID を指定します
variable "vswitch_id" {
default = "vsw-bp1y******" // 実際の vSwitch ID に置き換えます
}
# ネットワーク ACL を作成し、vSwitch に関連付けます
resource "alicloud_network_acl" "example_network_acl" {
vpc_id = var.vpc_id // ネットワーク ACL が属する VPC を指定します
network_acl_name = "example_network_acl_name"
resources {
resource_id = var.vswitch_id // ネットワーク ACL に関連付ける vSwitch を指定します
resource_type = "VSwitch"
}
}ネットワーク ACL ルールの構成
ネットワーク ACL を作成すると、システムはすべてのトラフィックを許可/拒否するデフォルトルールを追加します。 vSwitch の出入りの特定のトラフィックを正確に制御するために、カスタムルールを構成できます。
[プロトコル]、[IP バージョン]、[送信元 IP アドレス]/[宛先 IP アドレス]、および [ポート範囲] がネットワーク ACL ルールと一致する場合、システムは指定された [ポリシー] をトラフィックに対して実行し、対応するトラフィックを許可または拒否します。
プロトコルタイプが TCP(6)/UDP(17) の場合、ポート範囲を調整できます。 有効値の範囲は 0 ~ 65535 で、最初のポート/最後のポート の形式で設定しますが、-1/-1 (ポート制限なしを意味する)に設定することはできません。 他のプロトコルタイプを選択した場合、ポート範囲は設定できず、デフォルトで -1/-1 になります。
1. ネットワーク ACL ルールを追加/変更/削除すると、それらはネットワーク ACL に関連付けられた vSwitch に自動的に適用されます。
2. ネットワーク ACL が属する VPC で IPv6 が有効になっている場合にのみ、IPv6 タイプのインバウンドおよびアウトバウンドルールを追加できます。
3. DHCP オプションセット を構成した後、指定された DNS サーバーを許可するインバウンドおよびアウトバウンドルールを追加する必要があります。 ルールを追加しないと、名前解決の問題が発生する可能性があります。
4. ロードバランシングを使用する場合、リスナーポートで受信されたリクエストをバックエンドサーバーに転送し、ヘルスチェックポートリクエストをバックエンドサーバーに送信できるように、インバウンドおよびアウトバウンド方向にルールを追加する必要があります。
コンソール
対象のネットワーク ACL の [インバウンドルール]/[アウトバウンドルール] タブで、次の手順に従ってカスタムルールを構成できます。
ネットワーク ACL ルールはステートレスであるため、インバウンドルールを設定して特定のトラフィックが vSwitch に入ることを許可する場合は、対応するアウトバウンドルールを設定する必要があります。
ルールの追加
対象のネットワーク ACL の [インバウンドルール]/[アウトバウンドルール] タブで、[インバウンドルールを管理]/[アウトバウンドルールを管理] をクリックします。 [IPv4 ルールを追加]/[IPv6 ルールを追加] をクリックして、ルールを 1 つずつ構成できます。
複数の IP アドレス範囲に均一なアクセス制御を適用するには、[ルールをクイック追加] を選択し、[優先度] を使用してルールの挿入位置を設定します。
異なるポリシーを持つルールを一括で追加するには、提供されているテンプレートを使用して [ルールをインポート] します。 テンプレートにリストされているすべての設定項目を入力する必要があります。設定項目が不足しているルールはインポートできません。 正常にインポートされたルールは、既存のルールに基づいて順番に追加され、既存のルールを上書きしません。
ルール順序の調整
[インバウンドルールを管理]/[アウトバウンドルールを管理] をクリックし、ルールを上下にドラッグして優先順位を調整します。
ルールの削除
対象のネットワーク ACL ルールの [アクション] 列の [削除] をクリックします。
API
UpdateNetworkAclEntries を呼び出して、ネットワーク ACL ルールを更新します。 コンソールのロジックとは異なり、この API は ACL ルールのフルアップデートを実行します。 新しいルールのみが渡された場合、元のルールは削除され、新しく渡されたルールのみが保持されます。 したがって、ルールを追加するときは、保持する必要があるすべてのルールを渡す必要があります。
CopyNetworkAclEntries を呼び出して、あるネットワーク ACL から別のネットワーク ACL にルールを完全にコピーします。 すべてのルールがターゲットネットワーク ACL によって正しく識別および受信されるようにするには、両方の VPC に IPv4 CIDR ブロックのみがあるか、両方に IPv6 が有効になっていることを確認する必要があります。 IPv6 が有効になっていない VPC のネットワーク ACL は、IPv6 タイプのルールを構成できません。 IPv6 が有効になっている VPC のネットワーク ACL にルールを完全にコピーする場合、システムはすべての IPv6 トラフィックを許可するカスタムルールを自動的に追加しないため、IPv6 通信に影響を与える可能性があります。
Terraform
この例では、インバウンドとアウトバウンドの両方向に拒否ルールを追加します。 実際のアクセス制御ポリシーに従ってルール構成を調整する必要があります。
リソース: alicloud_network_acl
# ネットワーク ACL のリージョンを指定します
provider "alicloud" {
region = "cn-hangzhou"
}
# VPC ID を指定します
variable "vpc_id" {
default = "vpc-bp1k******" # 実際の VPC ID に置き換えます
}
# vSwitch ID を指定します
variable "vswitch_id" {
default = "vsw-bp1y******" # 実際の vSwitch ID に置き換えます
}
# ネットワーク ACL を作成し、vSwitch に関連付けます
resource "alicloud_network_acl" "example_network_acl" {
vpc_id = var.vpc_id # ネットワーク ACL が属する VPC を指定します
network_acl_name = "example_network_acl_name"
resources {
resource_id = var.vswitch_id # ネットワーク ACL に関連付ける vSwitch を指定します
resource_type = "VSwitch"
}
ingress_acl_entries { # インバウンドルールを指定します
network_acl_entry_name = "example-ingress"
protocol = "tcp" # プロトコルタイプ
source_cidr_ip = "10.0.0.0/24" # 送信元 IP アドレス
port = "20/80" # ポート範囲
policy = "drop" # ポリシー
}
egress_acl_entries { # アウトバウンドルールを指定します
network_acl_entry_name = "example-egress"
protocol = "tcp"
destination_cidr_ip = "10.0.0.0/24" # 宛先 IP アドレス
port = "20/80" # ポート範囲
policy = "drop" # ポリシー
}
}ネットワーク ACL ルール構成例
異なる vSwitch 内の ECS インスタンス間の通信を制限する
同じ VPC 内の異なる vSwitch は、デフォルトでプライベートネットワーク通信を行います。異なる vSwitch 内のリソース間の通信を制限するには、ネットワーク ACL を使用して特定の IP からのアクセスを拒否できます。
図に示すように、vSwitch 1 に関連付けられたネットワーク ACL のインバウンドルールとアウトバウンドルールを構成して、vSwitch 1 内のインスタンスと ECS06 間の通信を禁止できます。
特定の IP のみクラウドサービスへのアクセスを許可する
Express Connect を実装してオンプレミス IDC と VPC 間の通信を有効にした後、オンプレミス IDC 内のすべてのリソースがクラウドサービスにアクセスできます。 ネットワーク ACL を使用すると、特定の IP からのアクセスのみを許可し、他のすべてのアクセスを拒否できます。
図に示すように、vSwitch に関連付けられたネットワーク ACL のインバウンドルールとアウトバウンドルールを構成して、オンプレミスサーバー 1 とオンプレミスサーバー 2 のみが vSwitch 内のインスタンスにアクセスできるようにすることができます。
詳細情報
課金
ネットワーク ACL 機能は無料です。
サポートされているリージョン
エリア | リージョン |
アジアパシフィック - 中国 | 中国 (杭州)、中国 (上海)、中国 (南京 - ローカルリージョン)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (深圳)、中国 (河源)、中国 (広州)、中国 (成都)、中国 (香港)、中国 (武漢 - ローカルリージョン)、および 中国 (福州 - ローカルリージョン) |
アジアパシフィック - その他 | 日本 (東京)、韓国 (ソウル)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、および タイ (バンコク) |
ヨーロッパ & アメリカ | ドイツ (フランクフルト)、英国 (ロンドン)、米国 (シリコンバレー)、米国 (バージニア)、および メキシコ |
中東 | UAE (ドバイ) および SAU (リヤド - パートナーリージョン) 重要 SAU (リヤド - パートナーリージョン) リージョンはパートナーによって運営されています。 |
クォータ
名前/ID | 説明 | デフォルト値 | 調整可能 |
vpc_quota_nacl_ingress_entry | ネットワークアクセス制御リスト (ACL) に追加できるインバウンドルールの最大数 関連付けられている VPC で IPv6 が有効になっている場合、デフォルトで 20 個の IPv4 および IPv6 インバウンドルールを作成できます。 | 20 | 次の操作を実行することで、クォータを増やすことができます。
|
vpc_quota_nacl_egress_entry | ネットワーク ACL に追加できるアウトバウンドルールの最大数 関連付けられている VPC で IPv6 が有効になっている場合、デフォルトで 20 個の IPv4 および IPv6 インバウンドルールを作成できます。 | 20 | |
nacl_quota_vpc_create_count | 各 VPC で作成できるネットワーク ACL の最大数 | 20 |