ネットワークアクセスコントロールリスト (ACL) を使用して、vSwitch レベルでネットワークトラフィックを制御します。ネットワーク ACL は、インバウンドおよびアウトバウンドトラフィックに対してステートレスなフィルタリングを提供します。
仕組み
適用範囲
ネットワーク ACL は、関連付けられた vSwitch 内の Elastic Network Interface (ENI) にのみ適用されます。
ネットワーク ACL は、ネットワーク通信に ENI を使用するクラウドリソースのトラフィックを制御します。ネットワーク ACL でサポートされるリソースとサポートされないリソースは次のとおりです。
サポート対象:Elastic Compute Service (ECS)、Elastic Container Instance (ECI)、Network Load Balancer (NLB) インスタンスなど。
サポート対象外:ApsaraDB RDS インスタンス (代わりにホワイトリストを使用)、CLB インスタンス (代わりにアクセス制御ポリシーを使用)、およびEIP 可視モードの EIP にバインドされたセカンダリ ENI。
PrivateLink を介して Alibaba Cloud サービスにアクセスする場合、トラフィックはエンドポイント ENI を通過し、ネットワーク ACL ルールによって制御されます。
ルールの仕組み
優先度に基づくマッチング:ルールは優先度 1 から昇順で評価されます。
トラフィックは、IP バージョン、プロトコル、送信元/宛先 IP アドレス、およびポート範囲に基づいてマッチングされます。トラフィックがルールに一致すると、指定された許可/拒否ポリシーが実行されます。
インバウンドルールとアウトバウンドルールの両方で、ポート範囲は常にトラフィックの宛先ポートと一致します。
ルールがトラフィックを拒否すると、パケットはクライアントに応答を送信せずにサイレントにドロップされ、接続タイムアウトまたは失敗が発生します。
ステートレスな動作:セキュリティグループとは異なり、ネットワーク ACL はステートレスです。
インバウンドトラフィックを許可しても、対応する戻りトラフィックが自動的に許可されるわけではありません。応答を許可するには、アウトバウンドルールを作成する必要があります。
クライアントがサーバーに接続すると、ランダムなエフェメラルポートを使用して応答を受信します。幅広いクライアント互換性を確保するために、アウトバウンドルールでエフェメラルポートの範囲を 1024/65535 に設定することを推奨します。
例
アドレス範囲が重複する設定を考えます。192.168.0.1 のクライアントが HTTPS アクセスを試みると、最初に優先度 1 の拒否ルールに一致してブロックされる可能性があります。逆に、192.168.1.1 のクライアントはそのルールをバイパスし、優先度 2 の許可ルールに一致する可能性があります。その後、戻りトラフィックは優先度 1 のアウトバウンドルールに従って許可されます。
ベストプラクティス:サービスが広範囲のオープンポートを必要とするが、特定のポートをブロックする必要がある場合は、拒否ルールに、広範な許可ルールよりも高い優先度 (小さい数値) を割り当てるようにしてください。
セキュリティグループとの違い
項目 | ネットワーク ACL | セキュリティグループ |
適用範囲 | vSwitch のトラフィックを制御します。 | ECS インスタンスのアクセスを制御します。インスタンスが複数のセキュリティグループに関連付けられている場合、すべてのルールが処理されてからトラフィックが通過できるかどうかが決定されます。 |
ステートフル性 | ステートレス。戻りトラフィックは許可する必要があります。 | ステートフル。戻りトラフィックは自動的に許可されます。 |
ルールの評価 | 厳密な優先度:ルールは優先度の昇順で評価されます。最初に一致したルールがアクションを決定します。 | 優先度とポリシー:ルールはまず優先度でソートされます。優先度が同じ場合、拒否ルールが許可ルールよりも優先されます。 |
関連付け | vSwitch は一度に 1 つのネットワーク ACL にのみ関連付けることができます。 | ECS インスタンスは複数のセキュリティグループに追加できます。 |
ネットワーク ACL の作成/削除
ネットワーク ACL を作成し、vSwitch に関連付けてインバウンドおよびアウトバウンドトラフィックをフィルタリングします。
デフォルトルール
ネットワーク ACL を作成すると、システムはインバウンドおよびアウトバウンド方向のデフォルトルールを自動的に追加します。
IPv4 CIDR ブロックのみを持つ VPC の場合:
クラウドサービスルール (最高優先度):このルールは変更または削除できません。これにより、以下へのアクセスが保証されます:
Alibaba Cloud DNS サーバー:内部ドメイン名の名前解決のための IP 100.100.2.136 および 100.100.2.138。
ECS メタデータ:インスタンスメタデータを取得するための IP 100.100.100.200。
カスタムルール (デフォルトで許可):すべての IPv4 トラフィックを許可し、新しいネットワーク ACL が同じ VPC 内の vSwitch 間のプライベートネットワーク通信を中断するのを防ぎます。必要に応じてカスタムルールを変更または追加して、トラフィックを制限します。
システムルール (最低優先度):他のどのルールにも一致しないすべての IPv4 トラフィックを拒否します。これは、変更または削除できない包括的な拒否ルールです。
IPv6 が有効な VPC の場合:
すべての IPv6 トラフィックを許可する追加のカスタムルール。
すべての IPv6 トラフィックを拒否する追加のシステムルール。
関連付けの制限
ネットワーク ACL は、同じ VPC 内の vSwitch にのみ関連付けることができます。
各 vSwitch は、一度に 1 つのネットワーク ACL にのみ関連付けることができます。
コンソール
ネットワーク ACL の作成
VPC コンソール - ネットワーク ACL ページに移動します。上部のナビゲーションバーでリージョンを選択し、ネットワーク ACL の作成 をクリックします。
ネットワーク ACL に関連付ける予定の vSwitch を含む対象の [VPC] を選択します。
vSwitch の関連付け
インスタンス ID をクリックするか、[操作] 列の [管理] をクリックします。
[関連リソース] タブで、[vSwitch の関連付け] をクリックします。1 つ以上の vSwitch を選択し、[OK] をクリックします。
この制御を解除するには、対象の 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 = "ap-southeast-1"
}
# VPC ID を指定します。
variable "vpc_id" {
default = "vpc-t41k******" # 値を実際の VPC ID に置き換えます。
}
# vSwitch ID を指定します。
variable "vswitch_id" {
default = "vsw-t41y******" # 値を実際の 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 を作成すると、デフォルトルールが自動的に適用されます。カスタムルールを追加して、プロトコル、IP バージョン、送信元/宛先 IP アドレス、およびポート範囲に基づいてトラフィックを正確にフィルタリングできます。ルールの変更は、関連付けられているすべての vSwitch に即座に適用されます。
ポート設定
TCP(6) または UDP(17):ポート範囲を 0 から 65535 の間で調整します。
First Port/Last Portの形式で設定します。ポート制限なしを意味する -1/-1 には設定できません。その他のプロトコル:ポート範囲は設定できず、デフォルトで -1/-1 になります。
重要な設定
DHCP オプションセット:DHCP オプションセットを設定する場合、名前解決エラーを防ぐために、指定された DNS サーバーを許可するインバウンドおよびアウトバウンドルールを追加する必要があります。
ロードバランサー:ロードバランサーを使用する場合、リスナーのトラフィックとヘルスチェックリクエストの両方がバックエンドサーバーに到達できるようにするルールを追加する必要があります。
プレフィックスリストの使用
頻繁に使用する CIDR ブロックをプレフィックスリストにグループ化することで、管理を簡素化できます。
更新:プレフィックスリストを変更すると、それを参照しているすべての ACL ルールが自動的に更新されます。
ルールクォータ:ルールクォータは、実際に使用されているエントリ数ではなく、プレフィックスリストの最大エントリ数に基づいて計算されます。クォータを節約するには、最大容量を減らすか、未使用のエントリを削除してください。
制約:プレフィックスリストはリージョン固有であり、リージョン間で共有することはできません。単一のリストに IPv4 と IPv6 の両方のアドレスを含めることはできません。
コンソール
対象のネットワーク ACL の [インバウンドルール] タブまたは [アウトバウンドルール] タブで、次の手順に従ってカスタムルールを設定できます。
ネットワーク ACL ルールはステートレスであるため、特定のトラフィックが vSwitch に入ることを許可するインバウンドルールを設定した場合は、対応するアウトバウンドルールを設定する必要があります。
ルールの追加
手動設定:対象のネットワーク ACL の [インバウンドルール] タブまたは [アウトバウンドルール] タブで、[インバウンドルールの管理] または [アウトバウンドルールの管理] をクリックします。
単一ルール:[IPv4 ルールの追加] または [IPv6 ルールの追加] をクリックして、ルールを 1 つずつ設定します。
プレフィックスリストの使用:頻繁に使用する IP アドレスの CIDR ブロックをプレフィックスリストで管理した後、[IPv4 ルールの追加] または [IPv6 ルールの追加] をクリックし、[IP バージョン] を [VPC プレフィックスリスト] に設定し、プレフィックスリストを [送信元アドレス] または [宛先アドレス] として選択します。
クイック追加 (複数 CIDR):同じポリシーを複数の CIDR ブロックに同時に適用するには、[ルールのクイック追加] を選択し、[優先度] を設定してルールが挿入される位置を指定します。
バッチインポート:ポリシーを持つルールをバッチで追加するには、提供されたテンプレートを使用して [ルールのインポート] を行います。
テンプレートに記載されているすべてのパラメーターを入力してください。パラメーターが欠落しているルールはインポートできません。
プレフィックスリストはバッチインポートで参照できません。
正常にインポートされたルールは、既存のルールに基づいて順次追加され、既存のルールを上書きしません。
ルールの並べ替え
[インバウンドルールの管理] または [アウトバウンドルールの管理] をクリックし、ルールをドラッグして優先度を調整します。
ルールの削除
対象のネットワーク ACL ルールの [操作] 列にある [削除] をクリックします。
API
UpdateNetworkAclEntries を呼び出してネットワーク ACL ルールを更新します。コンソールとは異なり、この API は ACL ルールのフルアップデートを実行します。新しいルールのみが渡された場合、元のルールは削除されます。保持する必要があるすべてのルールを渡す必要があります。
CopyNetworkAclEntries を呼び出して、あるネットワーク ACL から別のネットワーク ACL にルールをコピーします。
すべてのルールが正しく識別され、受信されることを保証するために、両方の VPC が IPv4 CIDR ブロックのみを持つか、両方とも IPv6 が有効になっていることを確認してください。IPv6 が有効になっていない VPC のネットワーク ACL は、IPv6 ルールを設定できません。
IPv6 が有効な VPC のネットワーク ACL にルールをコピーした後、システムはすべての IPv6 トラフィックを許可するカスタムルールを自動的に追加しないため、IPv6 通信に影響を与える可能性があります。
Terraform
この例では、インバウンドとアウトバウンドの両方向に拒否ルールを追加します。ご利用のアクセス制御ポリシーに従ってルールを変更してください。
リソース:alicloud_network_acl
# ネットワーク ACL のリージョンを指定します。
provider "alicloud" {
region = "ap-southeast-1"
}
# VPC ID を指定します。
variable "vpc_id" {
default = "vpc-t41k******" # 値を実際の VPC ID に置き換えます。
}
# vSwitch ID を指定します。
variable "vswitch_id" {
default = "vsw-t41y******" # 値を実際の 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" # 送信元アドレス。
port = "20/80" # ポート範囲。
policy = "drop" # ポリシー。
}
egress_acl_entries { # アウトバウンドルールを指定します。
network_acl_entry_name = "example-egress"
protocol = "tcp"
destination_cidr_ip = "10.0.0.0/24" # 宛先アドレス。
port = "20/80" # ポート範囲。
policy = "drop" # ポリシー。
}
}例
異なる vSwitch 内の ECS インスタンス間の通信を制限する
デフォルトでは、同じ VPC 内の異なる vSwitch にあるリソースは、プライベートネットワークを介して通信できます。それらの通信を制限するには、ネットワーク ACL を使用して特定の IP アドレスからのアクセスを拒否します。
図に示すように、vSwitch 1 に関連付けられたネットワーク ACL のインバウンドおよびアウトバウンドルールを設定して、vSwitch 1 内のインスタンスが ECS06 と通信できないようにすることができます。
特定の IP のみにアクセスを制限する
Express Connect を使用してオンプレミスのデータセンターを VPC に接続すると、データセンター内のすべてのリソースがクラウドサービスにアクセスできます。ネットワーク ACL を使用して、特定の IP アドレスからのアクセスのみを許可し、他のすべてのアクセスを拒否します。
図に示すように、vSwitch に関連付けられたネットワーク ACL のインバウンドおよびアウトバウンドルールを設定して、オンプレミスのサーバー 1 とサーバー 2 のみが vSwitch 内のインスタンスにアクセスできるようにすることができます。
トラブルシューティング
接続タイムアウト、予期しないトラフィックのブロック、または IPv6 接続の問題が発生した場合は、次のチェックリストに従ってください:
ルールのロジックと優先度の検証
ルールのシャドウイングの確認:ルールは優先度 1 から昇順で評価されるため、優先度の高い拒否ルールが許可ルールを上書きしていないことを確認してください。
戻りトラフィックの設定:クライアントのエフェメラルポート (通常は 1024-65535) へのトラフィックを許可するアウトバウンドルールを追加します。インバウンドの許可ルールは、戻りトラフィックを自動的に許可しません。
関連付けと範囲の確認
vSwitch の関連付け:ネットワーク ACL が対象の vSwitch に正しくバインドされていることを確認します。
IPv6 設定:IPv4 ルールは IPv6 トラフィックには適用されません。VPC で IPv6 が有効になっていること、vSwitch に有効な IPv6 CIDR があること、および特定の IPv6 ルールが設定されていることを確認してください。
外部依存関係の確認
セキュリティグループの競合:トラフィックは、ネットワーク ACL (vSwitch レベル) とセキュリティグループ (インスタンスレベル) の両方で許可されている必要があります。どちらかがトラフィックを拒否すると、接続は失敗します。
CIDR の正確性:送信元および宛先の CIDR ブロックを確認します。
詳細情報
課金
ネットワーク ACL 機能は無料です。
サポートされているリージョン
エリア | リージョン |
アジアパシフィック - 中国 | 中国 (杭州)、中国 (上海)、中国 (南京-ローカルリージョン、提供終了)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (深セン)、中国 (河源)、中国 (広州)、中国 (成都)、中国 (香港)、中国 (武漢 - ローカルリージョン)、および 中国 (福州-ローカルリージョン、提供終了) |
アジアパシフィック - その他 | 日本 (東京)、韓国 (ソウル)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、および タイ (バンコク) |
ヨーロッパ & アメリカ | ドイツ (フランクフルト)、イギリス (ロンドン)、米国 (シリコンバレー)、米国 (バージニア)、および メキシコ |
中東 | UAE (ドバイ) および サウジアラビア (リヤド - パートナー運営) |
クォータ
クォータ名 | 説明 | デフォルトの制限 | クォータの引き上げ |
vpc_quota_nacl_ingress_entry | ネットワーク ACL に作成できるインバウンドルールの数。 ネットワーク ACL が属する VPC で IPv6 が有効になっている場合、作成できる IPv4 および IPv6 インバウンドルールのデフォルト数は 20 です。 | 20 | |
vpc_quota_nacl_egress_entry | ネットワーク ACL に作成できるアウトバウンドルールの数。 ネットワーク ACL が属する VPC で IPv6 が有効になっている場合、作成できる IPv4 および IPv6 インバウンドルールのデフォルト数は 20 です。 | 20 | |
nacl_quota_vpc_create_count | VPC に作成できるネットワーク ACL の数。 | 20 |