ホスト名とパスの条件の使用

このページでは、ホスト名とパスの Identity and Access Management(IAM)条件について説明します。

リクエスト URL のホスト名とパスを使用して Identity-Aware Proxy(IAP)リソースを保護できます。たとえば、request.path.startsWith の IAM 条件を使用して、URL パスが /admin で始まる場合に特権アクセス グループの従業員にのみアクセスを許可できます。

ホスト名とパスの条件の使用について詳しくは、リクエスト属性をご覧ください。

文字列の正規化

URL にはホスト名とパスがあります。たとえば、URL https://sheets.google.com/create?query=param では sheets.google.com がホスト名、/create がパスになります。

バックエンドでは、さまざまな方法でホスト名とパスを解釈します。あいまいさを取り除くために、IAP はポリシーのチェック時にホスト名とパスの文字列を正規化します。

リクエストに正規化されていないパスがある場合、IAP は 2 つのポリシー チェックを実行します。正規化されていないパスがポリシー チェックに合格すると、IAP はパスを正規化し、2 回目のポリシー チェックを実行します。正規化されていないパスと正規化されたパスの両方がポリシー チェックに合格すると、アクセスが許可されます。

たとえば、リクエストのパスが /internal;some_param/admin の場合、IAP はまず正規化されていないパス(/internal)に対してポリシー チェックを実行します。テストに合格すると、IAP は正規化されたパス(/internal/admin)に対して 2 回目のポリシー チェックを実行します。

ホスト名

ホスト名の正規化には以下が含まれます。

  • 末尾のドットを削除する
  • 大文字を小文字に変換する
  • ASCII に変換する

ASCII 以外の文字を含むホスト名は、さらに Punycode で正規化されます。マッチングを行うには、ホスト名の文字列を正規化するために Punycode を使用する必要があります。

ホスト名の文字列を Punycode で正規化するには、Punycoder のようなコンバータを使用します。

正規化されたホスト名の例を以下に示します。

  • FOO.comfoo.com に正規化されます。
  • café.frxn--caf-dma.fr に正規化されます。

パス

パスの正規化には以下が含まれます。

  • パスパラメータを削除する
  • 相対パスを絶対パスに解決する

パスパラメータには、; から次の / またはパスの末尾までのすべての文字が含まれます。

..; で始まるパスセクションを含むリクエストは無効と見なされます。たとえば、/..;bar//bar/..;/HTTP 400: Bad Request エラーを返します。

正規化されたパスの例を以下に示します。

  • /internal;some_param/admin/internal/admin に正規化されます。
  • /a/../b/b に正規化されます。
  • /bar;param1/baz;baz;param2/bar/baz に正規化されます。

サブドメインの末尾

request.host.endsWith("google.com") が設定されたポリシーは、sub_domain.google.comtestgoogle.com のいずれにも一致します。ポリシーの適用先を末尾が google.com のサブドメインのみに限定するには、request.host.endsWith(".google.com") のようにポリシーを設定します。