このページでは、Cloud Armor セキュリティ ポリシー ルールを bot 管理用に構成する方法について説明します。bot 管理を構成する前に、bot 管理の概要の情報をよく理解しておいてください。
始める前に
以降のセクションでは、Cloud Armor セキュリティ ポリシーの構成に必要なすべての Identity and Access Management(IAM)のロールと権限について説明します。このドキュメントのユースケースでは、compute.securityPolicies.create 権限と compute.securityPolicies.update 権限のみが必要です。
Cloud Armor セキュリティ ポリシー用の IAM 権限を設定する
次の操作を行うには、Identity and Access Management(IAM)の Compute セキュリティ管理者のロール(roles/compute.securityAdmin)が必要です。
- Cloud Armor セキュリティ ポリシーの構成、変更、更新、削除
- 次の API メソッドの使用:
SecurityPolicies insertSecurityPolicies deleteSecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies removeRule
Compute ネットワーク管理者のロール(roles/compute.networkAdmin)を付与されたユーザーは、次の操作を実行できます。
- バックエンド サービスに Cloud Armor セキュリティ ポリシーを設定する
- 次の API メソッドの使用:
BackendServices setSecurityPolicyBackendServices list(gcloudのみ)
セキュリティ管理者のロール(roles/iam.securityAdmin)と Compute ネットワーク管理者のロール(roles/compute.networkAdmin)を持つユーザーは、SecurityPolicies API メソッドの get、list、getRule を使用して Cloud Armor のセキュリティ ポリシーを参照できます。
カスタムロールの IAM 権限を設定する
次の表に、IAM のロールの基本的な権限と、関連する API メソッドを示します。
| IAM 権限 | API メソッド |
|---|---|
compute.securityPolicies.create |
SecurityPolicies insert |
compute.securityPolicies.delete |
SecurityPolicies delete |
compute.securityPolicies.get |
SecurityPolicies getSecurityPolicies getRule |
compute.securityPolicies.list |
SecurityPolicies list |
compute.securityPolicies.use |
BackendServices setSecurityPolicy |
compute.securityPolicies.update |
SecurityPolicies patchSecurityPolicies addRuleSecurityPolicies patchRuleSecurityPolicies removeRule |
compute.backendServices.setSecurityPolicy |
BackendServices setSecurityPolicy |
reCAPTCHA の手動チャレンジで人間と自動クライアントを区別する
reCAPTCHA を Cloud Armor と連携させるには、CHALLENGEPAGE タイプの reCAPTCHA WAF サイトキー(reCAPTCHA キー)をセキュリティ ポリシーに関連付ける必要があります。reCAPTCHA キーの詳細については、reCAPTCHA キーの概要をご覧ください。
独自の reCAPTCHA キーをセキュリティ ポリシーに関連付ける、または関連付けを解除するには、次のコマンドを使用します。
gcloud compute security-policies update SECURITY_POLICY \
--recaptcha-redirect-site-key SITE_KEY
次のように置き換えます。
SECURITY_POLICY: セキュリティ ポリシーの名前SITE_KEY: reCAPTCHACHALLENGEPAGEキー
reCAPTCHA キーを関連付ける
次の例では、reCAPTCHA キーをセキュリティ ポリシーに関連付けます。関連付けられた reCAPTCHA キーは、特定のセキュリティ ポリシーの下で手動チャレンジ機能を使用するすべてのルールに適用されます。
gcloud compute security-policies update SECURITY_POLICY \
--recaptcha-redirect-site-key "SITE_KEY"
reCAPTCHA キーの関連付けを解除する
独自の reCAPTCHA キーとセキュリティ ポリシーの関連付けを解除するには、次のコマンドを使用します。
gcloud compute security-policies update SECURITY_POLICY \
--recaptcha-redirect-site-key ""
トラフィックを reCAPTCHA 評価にリダイレクトする
reCAPTCHA 評価をセキュリティ ポリシーに関連付けている場合、そのポリシー内に、内部でトラフィックを reCAPTCHA 評価にリダイレクトするルールを作成できます。トラフィックをリダイレクトをするには、gcloud CLI で次の形式を使用します。
gcloud compute security-policies rules create PRIORITY \
--security-policy SECURITY_POLICY \
{--expression EXPRESSION | --src-ip-ranges SRC_IP_RANGE} \
--action redirect \
--redirect-type google-recaptcha
次のように置き換えます。
PRIORITY: 作成するルールの優先度SECURITY_POLICY: セキュリティ ポリシーの名前EXPRESSION: トラフィックと照合するカスタムルール言語の式。この式と一致したトラフィックに reCAPTCHA 評価が適用されます。SRC_IP_RANGE: IP アドレス範囲。この範囲から発信されたすべてのリクエストに reCAPTCHA 評価を適用するために使用します。
次の例では、/login.html に到達しようとしているトラフィックを reCAPTCHA の手動チャレンジにリダイレクトするルールを作成します。
gcloud compute security-policies rules create 1000 \
--security-policy SECURITY_POLICY \
--expression "request.path.matches(\"/login.html\")" \
--action redirect \
--redirect-type google-recaptcha
reCAPTCHA のフリクションレス評価を適用する
先に進む前に、bot 管理の概要で、reCAPTCHA のアクション トークンまたはセッション トークンを使用する際の前提条件を確認してください。
reCAPTCHA アクション トークンから属性を抽出するには、token.recaptcha_action.ATTRIBUTE を使用します。ATTRIBUTE は、Cloud Armor のルール言語の有効なトークン属性に置き換えます。同様に、token.recaptcha_session.ATTRIBUTE を使用して reCAPTCHA セッション トークンから属性を抽出します。使用可能な reCAPTCHA トークン属性の構文の詳細については、ルール言語リファレンスをご覧ください。
アクション トークンはウェブ アプリケーション、iOS アプリケーション、Android アプリケーションから発行できますが、セッション トークンはウェブ アプリケーションからのみ発行できます。プラットフォームごとに個別の reCAPTCHA キーが必要です。式 token.recaptcha_action.ATTRIBUTE と token.recaptcha_session.ATTRIBUTE は、これらのプラットフォームからのトークンに適用されます。異なるプラットフォームからのトークンを区別するため、およびトークンの盗難を防ぐために、これらの式を使用するルールを構成するときに reCAPTCHA キーを関連付けることをおすすめします。
例
最初の例では、/login.html をターゲットとし、reCAPTCHA アクション トークンのスコアが 0.8 以上であるトラフィックを許可するルールを作成します。
gcloud compute security-policies rules create 1000 \
--security-policy SECURITY_POLICY \
--expression "request.path.matches(\"/login.html\") && token.recaptcha_action.score >= 0.8" \
--action allow
2 つ目の例は 1 つ目と同じですが、アクション トークンが example-site-key-1 または example-site-key-2 の reCAPTCHA キーで発行されている必要があります。
gcloud compute security-policies rules create 1000 \
--security-policy SECURITY_POLICY \
--expression "request.path.matches(\"/login.html\") && token.recaptcha_action.score >= 0.8" \
--recaptcha-action-site-keys "example-site-key-1,example-site-key-2" \
--action allow
3 つ目の例では、/login.html をターゲットとし、reCAPTCHA セッション トークンが example-site-key-3 という reCAPTCHA キーで発行されていて、スコアが 0.8 以上であるトラフィックを許可するルールを作成します。
gcloud compute security-policies rules create 1000 \
--security-policy SECURITY_POLICY \
--expression "request.path.matches(\"/login.html\") && token.recaptcha_session.score >= 0.8" \
--recaptcha-session-site-keys "example-site-key-3" \
--action allow
リダイレクト(302 レスポンス)
ユーザーが構成した URL にトラフィックをリダイレクトするルールを作成するには、Google Cloud CLI で次の形式を使用します。
gcloud compute security-policies rules create PRIORITY \
--security-policy SECURITY_POLICY \
{--expression EXPRESSION | --src-ip-ranges SRC_IP_RANGE} \
--action redirect \
--redirect-type external-302 \
--redirect-target REDIRECT_URL
次のように置き換えます。
PRIORITY: 作成するルールの優先度SECURITY_POLICY: セキュリティ ポリシーの名前EXPRESSION: トラフィックと照合するカスタムルール言語の式。この式と一致したトラフィックに reCAPTCHA 評価が適用されます。SRC_IP_RANGE: IP アドレス範囲。この範囲から発信されたすべてのリクエストに reCAPTCHA 評価を適用するために使用します。REDIRECT_URL: トラフィックのリダイレクト先の URL
次の例では、10.10.10.0/24 からのトラフィックを https://www.example.com へリダイレクトするルールを作成します。
gcloud compute security-policies rules create 1000 \ --security-policy SECURITY_POLICY \ --src-ip-ranges "10.10.10.0/24" \ --action redirect \ --redirect-type external-302 \ --redirect-target "https://www.example.com"
リクエストのデコレート
トラフィックは許可するものの、保護されたバックエンドに送信する前にカスタム ヘッダーとユーザー定義の静的な値を追加するルールを作成するには、gcloud CLI で次の形式を使用します。
gcloud compute security-policies rules create PRIORITY \
--security-policy SECURITY_POLICY \
{--expression EXPRESSION | --src-ip-ranges SRC_IP_RANGE} \
--action allow \
--request-headers-to-add HEADER_1=VALUE_1,HEADER_2=VALUE_2,...
次のように置き換えます。
PRIORITY: 作成するルールの優先度SECURITY_POLICY: セキュリティ ポリシーの名前EXPRESSION: トラフィックと照合するカスタムルール言語の式。この式と一致したトラフィックに reCAPTCHA 評価が適用されます。SRC_IP_RANGE: IP アドレス範囲。この範囲から発信されたすべてのリクエストに reCAPTCHA 評価を適用するために使用します。HEADER_#: デコレートするリクエスト ヘッダーの名前VALUE_#: デコレートするリクエスト ヘッダーの値
次の例では、/login.html をターゲットとし、reCAPTCHA アクション トークンのスコアが 0.2 よりも低いトラフィックを許可するルールを作成します。
gcloud compute security-policies rules create 1000 \
--security-policy SECURITY_POLICY \
--expression "request.path.matches("/login.html") && token.recaptcha_action.score < 0.2" \
--action allow \
--request-headers-to-add "reCAPTCHA-Warning=high"