このページでは、Google Cloud Armor セキュリティ ポリシー ルールを bot 管理用に構成する方法について説明します。bot 管理を構成する前に、bot 管理の概要の情報をよく理解しておいてください。
準備
以降のセクションでは、Google Cloud Armor セキュリティ ポリシーの構成に必要なすべての Identity and Access Management(IAM)のロールと権限について説明します。このドキュメントのユースケースでは、compute.securityPolicies.create
権限と compute.securityPolicies.update
権限のみが必要です。
Google Cloud Armor セキュリティ ポリシーの IAM 権限を設定する
次の操作を行うには、Identity and Access Management(IAM)の Compute セキュリティ管理者のロール(roles/compute.securityAdmin
)が必要です。
- Google Cloud Armor セキュリティ ポリシーの構成、変更、更新、削除
- 次の API メソッドの使用:
SecurityPolicies insert
SecurityPolicies delete
SecurityPolicies patch
SecurityPolicies addRule
SecurityPolicies patchRule
SecurityPolicies removeRule
Compute ネットワーク管理者のロール(roles/compute.networkAdmin
)を付与されたユーザーは、次の操作を実行できます。
- バックエンド サービスの Google Cloud Armor セキュリティ ポリシーの設定
- 次の API メソッドの使用:
BackendServices setSecurityPolicy
BackendServices list
(gcloud
のみ)
セキュリティ管理者ロール(roles/iam.securityAdmin
)とネットワーク管理者ロールを持つユーザーは、SecurityPolicies
API メソッドの get
、list
、および getRule
を使用して、Google Cloud Armor セキュリティ ポリシーを閲覧できます。
カスタムロールの IAM 権限を設定する
次の表に、IAM のロールの基本的な権限と、関連する API メソッドを示します。
IAM 権限 | API メソッド |
---|---|
compute.securityPolicies.create |
SecurityPolicies insert |
compute.securityPolicies.delete |
SecurityPolicies delete |
compute.securityPolicies.get |
SecurityPolicies get SecurityPolicies getRule |
compute.securityPolicies.list |
SecurityPolicies list |
compute.securityPolicies.use |
BackendServices setSecurityPolicy |
compute.securityPolicies.update |
SecurityPolicies patch SecurityPolicies addRule SecurityPolicies patchRule SecurityPolicies removeRule |
compute.backendServices.setSecurityPolicy |
BackendServices setSecurityPolicy |
reCAPTCHA の手動チャレンジで人と自動クライアントを区別する
reCAPTCHA と Google 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 評価を適用するために使用します。
次の例では、reCAPTCHA の手動チャレンジで /login.html
に到達しようとするトラフィックをリダイレクトするルールを作成します。
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
は、Google Cloud Armor のルール言語の有効なトークン属性で置き換えます。同様に、token.recaptcha_session.ATTRIBUTE
を使用して reCAPTCHA セッション トークンから属性を抽出します。利用可能な reCAPTCHA トークン属性の構文の詳細については、ルール言語リファレンスをご覧ください。
アクション トークンはウェブ アプリケーション、iOS アプリケーション、Android アプリケーションから取得できますが、セッション トークンはウェブ アプリケーションからのみ取得できます。各プラットフォームには、個別の reCAPTCHA キーが必要です。式 token.recaptcha_action.ATTRIBUTE
と token.recaptcha_session.ATTRIBUTE
は、これらのプラットフォームからのトークンに適用されます。さまざまなプラットフォームからのトークンを区別して、トークンの盗難を防止するには、これらの式を使用するルールを構成するときに reCAPTCHA キーを関連付けることをおすすめします。
例
最初の例では、reCAPTCHA アクション トークンのスコアが 0.8
以上の、/login.html
をターゲットとするトラフィックを許可するルールを作成します。
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 番目の例では、reCAPTCHA セッション トークンを example-site-key-3
という reCAPTCHA キーで発行し、スコアが 0.8
以上の、/login.html
をターゲットにしたトラフィックを許可するルールを作成します。
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_#
: リクエストを装飾するリクエストヘッダーの値
次の例では、reCAPTCHA アクション トークンのスコアが 0.2
よりも低い場合に /login.html
をターゲットとするトラフィックを許可するルールを作成します。
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"