このページでは、ホスト名とパスの Identity and Access Management(IAM)Conditions について説明します。
リクエスト 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.com
はfoo.com
に正規化されます。café.fr
はxn--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.com
と testgoogle.com
のいずれにも一致します。ポリシーの適用先を末尾が google.com
のサブドメインのみに限定するには、request.host.endsWith(".google.com")
のようにポリシーを設定します。