Google Cloud コンソールの Web Security Scanner を使用して、デプロイ済みのアプリケーションのカスタム スキャンのスケジュールを設定して実行します。Web Security Scanner は、ファイアウォール内にない公開 URL と IP のスキャンをサポートしています。
始める前に
Web Security Scanner を使用してカスタム スキャンを設定するには:
- 公開 URL または IP にアプリケーションがデプロイされている必要があります。Web Security Scanner は、IPv4 を使用するウェブサイトのみをサポートしています。IPv6 を使用しているウェブサイトはスキャンされません。
- Security Command Center を有効にする必要があります。
スキャンする前に、選択したスキャンの範囲外でデータ、ユーザー、システムのいずれかに影響を及ぼす可能性がある機能がないか慎重にアプリケーションを調べてください。
Web Security Scanner を使用すると、フィールドに値が入力される、ボタンが押される、リンクがクリックされる、などの操作が行われるため、注意して使用してください。Web Security Scanner により、データやシステムの状態が変更される機能が有効になり、望ましくない結果が生じる可能性があります。次に例を示します。
- ブログ アプリケーションで一般からのコメントを受け付けるようにしていると、Web Security Scanner がすべてのブログ記事にコメントとしてテスト文字列を投稿する場合があります。
- メール登録ページで、Web Security Scanner により多数のテストメールが生成される場合があります。
リスクを最小限に抑えるヒントについては、意図しない結果を避けるためのベスト プラクティスをご覧ください。
Web Security Scanner を有効にする
Security Command Center で Web Security Scanner を有効にして、カスタム スキャンを作成して実行します。
Security Command Center が有効になっている場合は、 Google Cloud コンソールの Security Command Center の [設定] ページで Web Security Scanner を有効にできます。
手順 1: テスト アプリケーションをデプロイする
Web Security Scanner でカスタム スキャンの設定を完了するには、Compute Engine、Google Kubernetes Engine(GKE)、またはデプロイ済みの App Engine アプリケーションの URL が必要です。デプロイされたアプリケーションがない場合や、テスト アプリケーションで Web Security Scanner を試す場合は、テスト用の App Engine アプリケーションをデプロイします。任意の言語を使用します。次の言語を使用できます。
手順 2: IAM ロールを割り当てる
Web Security Scanner のスキャンを実行するには、スキャンするプロジェクトに対して、次のいずれかの Identity and Access Management(IAM)ロールが必要です。
- 編集者
- オーナー
これらのロールのいずれかを追加するには:
- Google Cloud コンソールの [IAM と管理] ページに移動します。 
- [プロジェクト セレクタ] のプルダウン リストをクリックします。 
- 表示された [選択元] ダイアログで、Web Security Scanner でスキャンするプロジェクトを選択します。 
- [IAM] ページで、ユーザー名の横にある [編集] をクリックします。 
- 表示される [権限の編集] パネルで、[別のロールを追加] をクリックして、以下のいずれかのロールを選択します。 - プロジェクト > オーナー
- プロジェクト -> 編集者
 
- 役割の追加が完了したら、[保存] をクリックします。 
Web Security Scanner ロールの詳細を確認してください。
手順 3: スキャンを実行する
スキャンを設定すると、後で実行されるようキューに登録されます。現在の負荷によっては、スキャンの実行までに数時間かかることがあります。スキャンを作成、保存、実行するには:
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。 
- スキャンするデプロイ済みアプリケーションを含むプロジェクトを選択します。 
- 新しいスキャンを設定するには、[新しいスキャン] をクリックします。 
- [新しいスキャンの作成] ページで、次の値を設定します。 - [開始 URL] に、スキャンするアプリケーションの URL を入力します。
- [スケジュール] で、[毎週] を選択します。
- [次回の実行] で日付を選択します。
 - [Export to Security Command Center] ボックスが自動的にオンになります。Security Command Center のセキュリティ ソースとして Web Security Scanner を有効にしている場合、スキャン結果は Google Cloud コンソールの [検出結果] ページに表示されます。 - この最初のスキャンでは、[新しいスキャンの作成] ページで他の値を変更せずにデフォルトのスキャンを使用します。スキャン設定の詳細については、アプリのスキャンをご覧ください。 
- スキャンを作成するには、[保存] をクリックします。 
- [Web Security Scanner] ページで、スキャン名をクリックして概要ページを読み込み、[スキャンを実行] をクリックします。 - スキャンがキューに追加され、その後のある時点でスキャンが実行されます。スキャンの実行までに数時間かかることがあります。 
- スキャンが完了すると、スキャンの概要ページに結果のセクションが表示されます。次の画像は、脆弱性が検出されない場合のスキャン結果を示しています。  - Web Security Scanner のセキュリティ ソースとして Web Security Scanner を有効にしている場合、スキャン結果は Google Cloud コンソールにも表示されます。 - 特定の検出結果の詳細を表示するには、スキャン結果で検出名をクリックします。 
これで、Web Security Scanner の基本的なスキャンは完了です。独自のアプリケーションをスキャンした場合は、このページのアプリのスキャンのセクションで、スキャンのカスタマイズ方法をご確認ください。
スキャンを実行するテスト アプリケーションをデプロイしている場合は、このページの次のクリーンアップの手順を完了して、アプリケーションで App Engine 料金が発生しないようにします。
手順 4: クリーンアップ
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
アプリのスキャン
テスト アカウントを使用して、アプリのカスタム スキャンを設定します。
手順 1: テスト アカウントを作成する
アプリをスキャンする際は、機密データへのアクセスや有害な操作を実行できないテスト アカウントを使用することをおすすめします。アプリにログインできるテスト アカウントを作成します。スキャンを作成する際は、認証用のログイン認証情報に注意してください。この認証情報を使うと、テスト アカウントでデータをスキャンできます。
手順 2: スキャンを作成する
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。 
- [選択] をクリックし、デプロイ済みの App Engine、Compute Engine、または GKE のアプリケーションが存在するプロジェクトを選択します。 
- 新規スキャンのフォームを表示するには、[スキャンを作成] または [新しいスキャン] をクリックします。 
- 新規スキャン フォームに値を追加する際は、次の表をガイドとして使用してください。 - フィールド - 説明 - 開始 URL - ベーシックなサイトでは、通常必要な開始 URL は 1 つだけで(サイトのホームページ、メインページ、ランディング ページなど)、Web Security Scanner は、そこから他のすべてのサイトページを検出できます。ただし、次のようなサイトの場合、Web Security Scanner はすべてのページを検出しない場合があります。 - ページ数が多い
- 未接続の孤立ページがある
- マウスオーバーによるマルチレベル メニューのような複雑な JavaScript を必要とするナビゲーション
 - このような場合は、開始 URL を追加してスキャン対象範囲を広げます。 - 除外 URL - 有効な正規表現を使用しなくても、1 つ以上の * ワイルドカードによる簡素化された proto 言語を使用して除外対象を定義すると、複雑さを軽減できます。詳細と有効なパターンの例については、このページで後述される URL の除外をご覧ください。 - 認証 > Google アカウント - Gmail でテスト アカウントを作成し、そのアカウントを使用してプロダクトをスキャンできます。Google Workspace をご利用の場合は、ドメイン内にテスト アカウントを作成できます( - test-account@yourdomain.comなど)。Web Security Scanner では、これらのアカウントは Gmail アカウントと同様に機能します。2 要素認証はサポートされていません。- Google アカウントには実名のポリシーが適用されます。テスト アカウント名が実名のように見えない場合、アカウントがブロックされる可能性があります。 - [認証] > [Identity-Aware Proxy アルファ版] - Identity-Aware Proxy でリソースを保護するには、IAP ガイドをご覧ください。 - IAP で保護されたリソースで Web Security Scanner を使用するには、まず Web Security Scanner サービス アカウントにアクセス権を付与します。 - Google Cloud コンソールで [IAP] ページに移動します。
- Web Security Scanner で使用するプロジェクトを選択します。
- スキャンするアプリケーション リソースを選択し、[情報パネル] で [プリンシパルを追加] をクリックします。
- [プリンシパルの追加] パネルの [新しいプリンシパル] ボックスで、Web Security Scanner のサービス アカウントを service-project-number@gcp-sa-websecurityscanner.iam.gserviceaccount.com形式で入力します。
- [ロールを選択] プルダウン リストで、[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。
- 役割の追加が完了したら、[保存] をクリックします。
 - 次に、OAuth クライアント ID をスキャンに追加します。Web Security Scanner は、単一の OAuth クライアント ID で保護されているアプリケーションのみをスキャンできます。OAuth クライアント ID を追加するには: - Google Cloud コンソールで [IAP] ページに移動します。
- Web Security Scanner で使用するプロジェクトを選択します。
- オーバーフロー メニューで [OAuth クライアントを編集] を選択します。
- 表示された [ウェブ アプリケーションのクライアント ID] ウィンドウで、[クライアント ID] をコピーします。
- Google Cloud コンソールで [Web Security Scanner] ページに移動します。
- [認証] で [Identity-Aware Proxy アルファ版] を選択します。
- [OAuth2 クライアント ID] ボックスに、コピーした OAuth クライアント ID を貼り付けて、[保存] をクリックします。
 - [認証] > [Google 以外のアカウント] - 独自の認証システムを作成し、Google アカウント サービスを使用していない場合は、このオプションを選択します。ログイン フォームの URL、ユーザー名、パスワードを指定してください。この認証情報は、アプリケーションへのログインとスキャンに使用します。 - Web Security Scanner は、ヒューリスティクスを試み、アプリケーションへログインし、スキャンします。具体的には、このメソッドでは - usernameフィールドと- passwordフィールドを含む 2 つのフィールドのログイン フォームが検索されます。スキャンを継続するには、ログイン アクションにより認証 Cookie を生成する必要があります。- カスタム ログインが失敗する一般的な原因は次のとおりです。 - 
          標準以外の HTML フォーム フィールドを使用する(たとえば、passwordタイプは使用しません)。
- 複雑なログイン フォームを使用する(たとえば、複数の usernameフィールドとpasswordフィールドがあるフォームなど)。
- ログイン成功時に認証 Cookie が保存されない。
- bot や DDoS などの攻撃からの保護を目的とした対策によってスキャナが拒否されることがあります。
 - アプリケーションの認証スキャンで最も一貫したエクスペリエンスを提供するため、Identity-Aware Proxy 統合を使用することをおすすめします。 - スケジュール - スキャンの実行を毎日、毎週、2 週間ごと、4 週間ごとに設定できます。スキャンのスケジュールを作成するときは、スキャン対象アプリケーションの今後のバージョンがテストされるようにすることをおすすめします。また、新たなバグタイプを検出できる新しいスキャナがリリースされることもあるため、スケジュールされたスキャンを実行することで、手作業なしで対象範囲を広げることができます。 - 事前に定義されたソース IP セットからスキャンを実行する(プレビュー) - スキャン トラフィックを事前定義の IP アドレスのセットに限定するには、このオプションを選択します。これにより、スキャナはファイアウォールの内側にあるアプリケーションにアクセスできますが、スキャン範囲が制限される可能性があります。Web Security Scanner トラフィックを許可するようにファイアウォール ルールを変更するには、このページで後述されるファイアウォールの構成をご覧ください。 - エクスポート オプション - スキャンの構成と結果を Security Command Center に自動的にエクスポートするには、このオプションを選択します。 - HTTP ステータス エラーを無視 - このオプションは、スキャン中に HTTP ステータス エラー(**400 Bad Request**(不正なリクエスト)など)が大量に発生したときに、スキャンを失敗として報告するかどうかを制御します。このオプションが選択されている場合、ステータス エラーは無視できます。このオプションが選択されておらず、ステータス エラーの割合が所定のしきい値を超えると、スキャンは失敗として報告されます。 
- 値の追加が完了したら、[保存] をクリックします。新しいスキャンを実行できるようになりました。 
デフォルトでは、Web Security Scanner は実行するたびにランダムに割り当てられた IP アドレスを使用します。Web Security Scanner の IP アドレスを予測可能にするには、このページで後述する静的 IP からのスキャンを有効にする手順を行います。
手順 3: スキャンを実行する
スキャンを実行するには:
- スキャンの作成に使用したテスト アカウントにログインします。
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。 
- [選択] をクリックし、スキャンを作成したプロジェクトを選択します。 
- [スキャンの構成] で、実行するスキャンの名前をクリックします。 
- [スキャンの詳細] ページで [実行] をクリックします。 
スキャンがキューに配置され、実行されるまでに時間がかかる場合があります。実行に数分の場合もあれば、何時間もかかる場合もあります。これは、システムの負荷と次のような特徴に応じて変わります。
- サイトの複雑さ
- 1 ページあたりの使用可能な要素の数
- リンクの数
- ナビゲーションが含まれるサイト上の JavaScript の量
最大 10 個のスキャンを設定して実行できます。この数を超える場合は以前に保存した結果を削除またはクリーンアップする必要があります。
カスタム スキャン結果の表示
カスタム スキャンのステータスと結果は、 Google Cloud コンソールの [スキャンの詳細] ページに表示されます。スキャン結果を表示するには:
- スキャンの作成に使用したテスト アカウントにログインします。
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。 
- [選択] をクリックして、表示するスキャンが含まれているプロジェクトを選択します。 
- [スキャンの構成] で、表示するスキャンの名前をクリックします。 
スキャンの詳細ページが読み込まれ、最新のスキャンの結果が表示されます。スキャンが進行中の場合は、[結果] タブに現在の完了率が表示されます。前のスキャンの結果を表示するには、プルダウン リストからスキャンの日時を選択します。
完了したカスタム スキャンの詳細には、次の情報が含まれています。
- スキャンで脆弱性が発見された場合は、発見された脆弱性のリストが [結果] タブに表示されます。
- [クロールした URL] タブには、スキャンで確認された URL のリストが表示されます。
- [詳細] タブには、次の情報が表示されます。 - 開始 URL
- 認証
- ユーザー エージェント
- 秒間クエリ数(QPS)として表示される最大スキャン速度
 
スキャンについての詳細情報は、プロジェクトのログページで確認できます。
カスタム スキャンの編集
カスタム スキャンを編集するには:
- スキャンの作成に使用したテスト アカウントにログインします。
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。 
- [選択] をクリックし、編集するスキャンが含まれているプロジェクトを選択します。 
- [スキャンの構成] で、レビューするスキャンの名前をクリックします。 
- 表示されたスキャンの詳細ページで、[編集] をクリックします。 
- 表示される [スキャン名] の編集ページで必要な変更を行い、[保存] をクリックします。 
編集されたカスタム スキャンが、次にスケジュールされた日時に実行されます。また、手動で実行して更新された結果を取得することもできます。
カスタム スキャンの削除
1 つ以上のカスタム スキャンを削除するには:
- スキャンの作成に使用したテスト アカウントにログインします。
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。 
- [選択] をクリックし、編集するスキャンが含まれているプロジェクトを選択します。 
- [スキャンの構成] で、削除するスキャンの横にあるチェックボックスをオンにします(複数選択可)。 
- [削除] をクリックし、[OK] をクリックします。 
選択したスキャンがすべて削除されます。
静的 IP からのスキャンの設定
このセクションでは、静的 IP アドレスからの Web Security Scanner カスタム スキャンを有効にする方法について説明します。この機能を有効にすると、Web Security Scanner は予測可能な IP アドレスを使用して、一般公開の Compute Engine アプリケーションと Google Kubernetes Engine アプリケーションをスキャンします。この機能はプレビュー版であり、今後のリリースで Web Security Scanner の IP アドレスが変更される可能性があります。
始める前に
静的 IP からの Web Security Scanner カスタム スキャン機能を使用するには、次のものが必要です。
- 一般公開された Compute Engine または GKE アプリケーション。この機能は、App Engine アプリケーションをサポートしていません。
- 認証なしで作成されたスキャン、または Google アカウント認証で作成されたスキャン。この機能は、Google 以外のアカウント認証を使用するスキャンをサポートしていません。
手順 1: ファイアウォールを構成する
- Google Cloud コンソールの [ファイアウォール ルール] ページに移動します。 
- [選択] をクリックして、プロジェクトを選択します。 
- 表示された [ファイアウォール ルール] ページで、[ファイアウォール ルールを作成] をクリックします。 
- [ファイアウォール ルールの作成] ページで、次の値を設定します。 - 名前: web-security-scannerまたは同様の名前を入力します。
- 優先度: アプリケーションへの下り(外向き)トラフィックを拒否するすべてのルールよりも高い優先度(小さい値)を選択します。
- ソース IP の範囲: 34.66.18.0/26と34.66.114.64/26を入力します。
- プロトコルとポート: [すべて許可] を選択するか、アプリケーションのプロトコルとポートを指定します。通常は、[tcp] チェックボックスをオンにしてから、ポートに「80」と「443」を入力します。
 
- 名前: 
- 値の更新が完了したら、[作成] をクリックします。 
手順 2: スキャンを構成する
Web Security Scanner が予測可能な IP アドレスを許可するようにファイアウォールを構成したら、事前定義の IP を使用するようにスキャンを構成します。
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。 
- [選択] をクリックして、プロジェクトを選択します。 
- 新しいスキャンを作成するか、既存のスキャンを編集します。 
- [事前に定義されたソース IP のセットからスキャンを実行する] のチェックボックスをオンにします。 
- スキャンを保存します。 
次回のスキャン時に、ファイアウォールの内側にある一般公開の Compute Engine アプリケーションと GKE アプリケーションがスキャンされます。
URL の除外
除外 URL パターンを最大 100 個まで指定して、カスタム スキャン中にサイトの一部がテストされないようにすることができます。Web Security Scanner は、除外対象のいずれかに一致するリソースをリクエストしません。以下のセクションでは、Web Security Scanner で使用されるパターン マッチングについて説明します。
URL パターン マッチング
除外 URL のマッチングは、一致パターンで定義される一連の URL に基づきます。一致パターンとは、次の 5 つのセグメントから構成される URL のことです。
- scheme: たとえば、- httpまたは- *
- host:- www.google.com、- *.google.com、または- *など
- path: たとえば、- /*、- /foo*または- /foo/bar. *
- query:- ?*、- ?*foo=bar*など
- fragment:- #*、- #accessなど
基本的な構文は次のとおりです。
<exclude-pattern> := <scheme>://<host><path><query><fragment>
<scheme> := '*' | 'http' | 'https'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars except '?' or '#'>
<query> := '?' <any chars except '#'>
<fragment> := '#' <any chars>
各部の * には次の機能があります。
- scheme:- *は HTTP または HTTPS に一致します。
- host:- *は、任意のホストに一致します。
- *.hostnameは、指定されたホストとその任意のサブドメインに一致します。
 
- path:- *は、0 個以上の文字に一致します。
除外パターンでは、すべてのセグメントが必須ではありません。
- schemeセグメントが指定されていない場合、デフォルトは- *://です。
- hostセグメントは必須です。
- pathセグメントが指定されていない場合、デフォルトは次のようになります。- /*(- queryと- fragmentのセグメントが指定されていない場合)。この値は、いずれかの- pathに一致するか、どの- pathとも一致しません。
- /(- queryか- fragmentのセグメントが指定されている場合は空の- path)。
 
- queryセグメントが指定されていない場合、デフォルトは次のようになります。- ?*(- fragmentセグメントが指定されていない場合)。この値は、いずれかの- queryに一致するか、どの- queryとも一致しません。
- ?(- fragmentが指定されている場合は空の- query)。
 
- fragmentセグメントが指定されていない場合、デフォルトは- #*になり、いずれかの- fragmentに一致するか、どの- fragmentとも一致しません。
有効なパターン一致
次の表は、有効なパターンの例を示したものです。
| パターン | 動作 | URL 一致例 | 
|---|---|---|
| http://*/* | HTTP スキームを使用する URL に一致します。 | 
 
 | 
| http://*/foo* | いかなるホスト上でも、パスが /fooで始まれば、HTTP スキームを使用するすべての URL に一致します。 | 
 
 | 
| https://*.google.com/foo*bar | パスが /fooで始まり、barで終わる場合に、HTTPS スキームを使用し、google.comホスト(www.google.com、docs.google.com、google.comなど)にある URL に一致します。 | 
 
 | 
| http://example.org/foo/bar.html | 指定された URL に一致します。 | http://example.org/foo/bar.html | 
| http://127.0.0.1/* | HTTP スキームを使用し、ホスト 127.0.0.1にあるすべての URL に一致します。 | 
 
 | 
| *://mail.google.com/* | http://mail.google.comまたはhttps://mail.google.comで始まる URL に一致します。 | 
 
 | 
| *://*/foo*?*bar=baz* | パスが /fooで始まり、クエリ パラメータbar=bazを持つすべての URL と一致します。 | https://www.google.com/foo/example?bar=baz | 
| google.com/app#*open* | パスが /appで始まり、フラグメントがopenのgoogle.comホストの URL と一致します。 | https://www.google.com/app/example#open | 
無効なパターン一致
次の表は、無効なパターンの例を示したものです。
| パターン | 理由 | 
|---|---|
| http://www.google.com | URL にパスが含まれていません。 | 
| http://*foo/bar | ホストの *の後に、.または/を指定する必要があります。 | 
| http://foo.*.bar/baz | *がホストにある場合は、最初の文字である必要があります。 | 
| http:/bar | URL スキーム セパレータの形式が正しくありません。 "/"は"//"にする必要があります。 | 
| foo://* | URL のスキームが無効です。 | 
次のステップ
- Web Security Scanner の検出結果を修正する方法を学習する。