IP アドレスに基づいてフィルタリングする Google Cloud Armor セキュリティ ポリシー ルールでは、通常、呼び出し元のクライアント IP が使用されます。サービスがサードパーティのコンテンツ配信ネットワーク(CDN)などの仲介者の背後にある場合、origin.ip フィールドのクライアント IP は、元のクライアントではなく、最後の仲介者の IP アドレスになります。
ユーザー IP 機能を使用すると、アップストリーム プロバイダが入力するヘッダーから解決するために、代替フィールド origin.user_ip を構成できます。セキュリティ ポリシー ルールの origin.user_ip フィールドを使用して、これらの機能で使用される IP アドレスを指定できます。origin.user_ip を使用する場合は、セキュリティ ポリシーの advancedOptionsConfig フィールドで userIpRequestHeaders[] オプションを構成できます。
ユーザーの IP アドレスの仕組み
特定のリクエスト ヘッダーからエンドユーザーの IP アドレスを抽出するように Cloud Armor を構成します。この値は origin.user_ip フィールドに入力され、セキュリティ ポリシー ルールで使用できます。
userIpRequestHeaders[] で指定されたヘッダーが存在しない場合、またはその値が有効な IP アドレスでない場合、Cloud Armor は代わりにクライアント IP アドレス(origin.ip)にフォールバックします。次の例は、デフォルトのケースの直接比較を示しています。
origin.ip != origin.user_ip
次の例は、ルール言語、Google Threat Intelligence、アドレス グループで origin.user_ip を使用する方法を示しています。
inIpRange
inIpRange(origin.user_ip, '9.9.9.0/24')
origin.user_ip で inIpRange を使用する方法については、属性をご覧ください。
Google Threat Intelligence
evaluateThreatIntelligence('iplist-known-malicious-ips', origin.user_ip)
詳細については、Google Threat Intelligence を適用するをご覧ください。
アドレス グループ
evaluateAddressGroup('example-address-group', origin.user_ip)
詳細については、アドレス グループを構成するをご覧ください。
組織スコープのアドレス グループ
evaluateOrganizationAddressGroup('example-org-address-group', origin.user_ip)
詳細については、組織スコープのアドレス グループを使用するをご覧ください。
ベスト プラクティス
origin.user_ip はリクエスト ヘッダーから解決されるため、信頼できないクライアントが操作する可能性があります。そのため、信頼できるアップストリーム ソースからトラフィックが発信されていることを検証する必要があります。
アップストリーム ソースを検証するには、少なくとも 2 つのルールを含むセキュリティ ポリシーを作成します。優先度の高い最初のルールは、直近のクライアント IP(origin.ip)が信頼できるアップストリーム プロバイダに属していることを確認します。優先度の低い 2 番目のルールは、origin.user_ip フィールドを使用して目的のロジックを適用します。
たとえば、次の 2 つのルールを含むポリシーを作成できます。
- ルール 1:
evaluateThreatIntelligence('iplist-public-clouds', origin.ip) - ルール 2:
inIpRange(origin.user_ip, '9.9.9.0/24')