アドレス グループを構成する

アドレス グループを使用すると、複数の IP アドレスと IP アドレス範囲を 1 つの名前付き論理単位に結合し、複数のサービスで使用できます。このドキュメントでは、Google Cloud Armor セキュリティ ポリシーでアドレス グループを使用する方法について説明します。アドレス グループを使用するには、有効な Google Cloud Armor Enterprise サブスクリプションが必要です。

IAM ロール

アドレス グループを作成して管理するには、ネットワーク管理者ロール(compute.networkAdmin)またはセキュリティ管理者ロール(compute.securityAdmin)が必要です。また、同等の権限セットでカスタムロールを定義することもできます。

次の表に、アドレス グループで一連のタスクを実行するために必要な Identity and Access Management(IAM)権限の一覧を示します。

タスク IAM の役割名 IAM 権限
アドレス グループの作成と管理 compute.networkAdmin

compute.securityAdmin

networksecurity.addressGroups.*
アドレス グループの検出と表示 compute.networkUser networksecurity.addressGroups.list

networksecurity.addressGroups.get

networksecurity.addressGroups.use

特定の IAM 権限を含むロールの詳細については、IAM 権限のリファレンスをご覧ください。

アドレス グループを作成または変更する

以降のセクションでは、アドレス グループの作成方法、アドレス グループへのアドレスの追加と削除の方法、アドレス グループの削除方法について説明します。

アドレス グループを作成する

アドレス グループを作成するときは、--capacity フラグと --type フラグを使用して、容量と IP アドレス バージョンを指定する必要があります。アドレス グループの作成後にこれらの値を変更することはできません。

また、Google Cloud Armor の最大容量は、Cloud Next Generation Firewall などの他のサービスの最大容量よりも大きい場合があります。したがって、複数のプロダクトで同じアドレス グループを使用する場合は、それらのプロダクト間の最小容量以下になるように容量を設定する必要があります。

次の例の gcloud beta network-security address-groups create コマンドを使用して、1,000 個の IPv4 アドレスの容量を持つ GROUP_NAME というアドレス グループを作成します。このアドレス グループは、Google Cloud Armor と Cloud NGFW の両方で使用できます。

gcloud beta network-security address-groups create GROUP_NAME \
    --location global \
    --description  "address group description" \
    --capacity 1000 \
    --type IPv4 \
    --purpose DEFAULT,CLOUD_ARMOR

または、目的を CLOUD_ARMOR に設定して、容量の大きいアドレス グループを作成することもできます。次の例では、10,000 個の IPv6 IP アドレス範囲を持つアドレス グループを作成します。

gcloud beta network-security address-groups create GROUP_NAME \
   --location global \
   --description  "address group description" \
   --capacity 10000 \
   --type IPv6 \
   --purpose CLOUD_ARMOR

アドレス グループに項目を追加する

アドレス グループを作成したら、gcloud beta network-security address-groups add-items コマンドを使用してアイテムを追加できます。--item フラグを使用して、カンマ区切りのアイテム リストを指定します。次の例では、IP アドレス 192.168.1.2192.168.1.8192.168.1.9 をアドレス グループ GROUP_NAME に追加します。

gcloud beta network-security address-groups add-items GROUP_NAME \
   --location global \
   --items 192.168.1.2,192.168.1.8,192.168.1.9

アドレス グループから項目を削除する

アドレス グループからアイテムを削除するには、gcloud beta network-security address-groups remove-items コマンドを使用します。次のコマンドは、前のコマンドで追加した IP アドレス 192.168.1.2192.168.1.8192.168.1.9 を削除します。

gcloud beta network-security address-groups remove-items GROUP_NAME \
   --location global \
   --items 192.168.1.2,192.168.1.8,192.168.1.9

アドレス グループを削除する

セキュリティ ポリシーを含むリソースから参照されているアドレス グループは削除できません。

次の例では、gcloud beta network-security address-groups delete コマンドを使用して、GROUP_NAME というアドレス グループを削除します。

gcloud beta network-security address-groups delete GROUP_NAME \
   --location global

セキュリティ ポリシーを含むリソースから参照されているアドレス グループは削除できません。

セキュリティ ポリシーでアドレス グループを使用する

アドレス グループを作成して IP アドレスを追加したら、既存の Google Cloud Armor バックエンド セキュリティ ポリシーで使用できます。次の例は、アドレス グループを使用する 2 つの異なる方法を示しています。

IP アドレスのグループを拒否する

たとえば、BAD_IPS という IP アドレス グループがあり、その中に悪意のある IP アドレスが 10,000 個あるとします。次の一致条件で単一のセキュリティ ポリシー deny ルールを使用して、これらの IP アドレスをすべて拒否できます。

evaluateAddressGroup('BAD_IPS', origin.ip)

複数のセキュリティ ポリシーで IP アドレス範囲のグループを再利用する

この例では、前の例と同じ 10,000 個の IP アドレスのリストがあるとします。ただし、一部の IP アドレスはウェブ クローラーであることがわかっています。一部のバックエンド サービスからこれらの IP アドレスをすべてブロックしますが、検索エンジン最適化(SEO)を改善するために、ウェブ クローラーが他のバックエンド サービスにアクセスできるようにします。次の手順で、すべてのアドレスの BACKEND_SERVICE_1 へのアクセスを拒否し、IP アドレス範囲 66.249.77.32/2766.249.77.64/27BACKEND_SERVICE_2 へのアクセスを許可します。

  1. POLICY_1 というバックエンド セキュリティ ポリシーを作成し、BACKEND_SERVICE_1 に接続します。
  2. POLICY_1 で、次の一致条件を持つ deny ルールを作成します。

    evaluateAddressGroup('BAD_IPS', origin.ip)
    
  3. POLICY_2 という名前の 2 番目のバックエンド セキュリティ ポリシーを作成し、BACKEND_SERVICE_2 に接続します。

  4. POLICY_2 で、次の一致条件を持つ deny ルールを作成します。66.249.77.32/2766.249.77.64/27 は除外されます。

    evaluateAddressGroup('BAD_IPS', origin.ip, [66.249.77.32/27, 66.249.77.64/27])
    

アドレス グループを使用してユーザーの IP アドレスと照合する

たとえば、BAD_IPS という IP アドレス グループがあり、その中に悪意のある IP アドレスが 10,000 個あるとします。また、アップストリーム プロキシを使用します。このプロキシには、ヘッダーに送信元クライアントに関する情報が含まれます。次の一致条件で 1 つのセキュリティ ポリシー deny ルールを使用して、これらの IP アドレスをすべて拒否できます。

evaluateAddressGroup('BAD_IPS', origin.user_ip)

ユーザー IP アドレスの詳細については、ルール言語属性をご覧ください。

次のステップ