IAM Conditions 属性のリファレンス

このトピックでは、条件式でサポートされる属性について説明します。

サポートされている条件の属性

次の表に、サポートされている属性と、各属性を認識する Google Cloud サービスをまとめています。

属性 使用量の概要 サポートされる Google Cloud サービス

アクセスレベル属性

特定のアクセスレベルに基づいてアクセスを管理します。

アクセスレベルは、リクエストとリクエスト元に関する未加工の属性(送信元の IP アドレス、デバイス属性、時間帯など)に基づいて計算された属性です。たとえば、onNetwork というアクセスレベルでは、リクエストを送信したデバイスが特定の IP アドレス範囲から開始することが必要な場合があります。アクセスレベルは組織の管理者が定義します。

Identity-Aware Proxy

日時属性

Google Cloud リソースへの有効期限のあるアクセス権、スケジュール済みアクセス権、または期間限定のアクセス権を設定します。

すべての Google Cloud サービス

宛先 IP / ポート属性

宛先 IP アドレスやリクエストのポートに基づいてアクセスを管理します。たとえば、Compute Engine の仮想マシン(VM)インスタンスでは、外部 IP(10.0.0.2 など)が公開されますが、ポート 22 は管理用に限定して公開される場合があります。

現在は主に Identity-Aware Proxy TCP 転送に使用されています。

Identity-Aware Proxy

転送ルールの属性

メンバーが作成できる転送ルールのタイプを指定します。たとえば、メンバーが Google Cloud ネットワーク内で発生するトラフィックを処理する内部 Google Cloud ロードバランサの転送ルールを作成することを許可しつつ、インターネットから発生するトラフィックを処理する外部 Google Cloud ロードバランサの転送ルールの作成は許可しないことができます。

リソースの属性

リソース名、リソースタイプ、リソース サービス属性を使用すると、プロジェクト、フォルダ、組織内のリソースに対するアクセスを許可できます。アクセスを許可できるのは一部のリソースで、すべてのリソースではありません。

  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine

URL パス / ホスト属性

リクエストの URL パスやホストに基づいてアクセスを管理します。たとえば、条件によって、https://example.com がユーザーの一般的なドメインからアクセスできるメイン アプリケーションであり、https://hr.example.com/admin がアプリケーション内の人事管理者のみがアクセスできるページにアクセスするために使用されることを指定します。

Identity-Aware Proxy

一部のタイプの Google Cloud リソースは IAM ポリシーで条件を許可しません。ただし、組織、フォルダ、プロジェクト レベルで条件付きロールバインドを追加すると、他のリソースはリソース階層からロールバインドを継承します。詳細については、条件付きロールバインドを許可するリソースを参照してください。

属性を組織、フォルダ、またはプロジェクト レベルで使用する場合、サービスにリクエストを送信しても、サービスが条件の属性を認識しないと条件は常に false に評価されます。たとえば、BigQuery は宛先 IP またはポート属性を認識しないため、条件 destination.port == 21 は常に BigQuery の false に評価されます。

この問題を回避するには、このページのリソース属性を使用して条件の範囲を制限します。たとえば、条件 resource.service != "iap.googleapis.com" || destination.port == 21 は、true に対して Identity-Aware Proxy を除くすべてのサービスを評価します。一方、Identity-Aware Proxy については条件は宛先ポートを確認します。

アクセスレベル属性

アクセスレベル属性を使用すると、リクエストが承認されるために特定のアクセスレベルを満たすことを求める条件を設定できます。

アクセスレベル属性は、送信元 IP アドレス、デバイス属性、時刻など、リクエストの属性から取得されます。たとえば、fullyTrusted というアクセスレベルでは、リクエストを送信したデバイスが会社の所有物であり、画面ロック機能が必要な場合があります。onNetwork というアクセスレベルでは、リクエストを送信したデバイスが特定の IP アドレス範囲から開始することが必要な場合があります。

アクセスレベルの詳細については、Access Context Manager のドキュメントをご覧ください。

この属性は Identity-Aware Proxy で使用できます。

request.auth.access_levels 属性

属性の変数 request.auth.access_levels
属性タイプ 文字列のリスト
サポートされている演算子 in
サポートされているオペランド 文字列
ディスカッション

変数 request.auth.access_levels が右側に表示され、定義されたアクセスレベルの完全な名前を表す文字列が in 演算子の左側に表示されます。

アクセスレベルの完全な名前は、次のパターンで書式設定された名前です。
"accessPolicies/<policyNumber>/accessLevels/<shortName>"

注: アクセスレベルの文字列では、大文字と小文字が区別され、意図した効果を示すようにするため、Access Context Manager で構成されている文字列と一致する必要があります。たとえば、"accessPolicies/199923665455/accessLevels/CorpNet" は式で使用される有効な文字列リテラルですが、"accessPolicies/199923665455/accesslevels/CorpNet" は意図した効果を得られません。


"accessPolicies/199923665455/accessLevels/CorpNet"
in request.auth.access_levels

日時属性

日時属性は、Google Cloud リソースに対する有効期限のあるアクセス権、スケジュール済みアクセス権、または期間限定のアクセス権を設定するために使用します。

すべての Google Cloud サービスはこの条件属性をサポートしています。

サポートされている基本的な関数と演算子

日時属性に使用される属性の変数は、Timestamp 型の request.time です。文字列を Timestamp 型と Duration 型に変換することもできます。

サポートされている基本的な関数 説明
date 文字列 --> Timestamp

関数: 文字列をタイムスタンプに変換します。
パラメータ: YYYY-MM-DD 形式の文字列。ここで YYYY は年、MM は 2 桁の月、DD は 2 桁の日です。得られるタイムスタンプには、指定された日付と時刻 00:00:00.000 UTC が含まれます。

例:

date("2020-02-01")
日付 2020-02-01 と時刻 00:00:00.000 UTC を表すタイムスタンプ。

duration 文字列 --> Duration

関数: 文字列を期間に変換します。
パラメータ: 秒数を含む文字列。その後に s が続きます

例:

duration("90s")
1.5 分を表す期間。

duration("2592000s")
30 日を表す期間。

timestamp

文字列 --> Timestamp

関数: 文字列をタイムスタンプに変換します。
パラメータ: UTC 形式(RFC 3339)に準拠する文字列。

例:

timestamp("1985-04-12T23:20:50.52Z")
これは、UTC での 1985 年 4 月 12 日 23 時 20 分 50.52 秒のタイムスタンプ変換を表しています。

timestamp("1996-12-19T16:39:57-08:00")
これは、UTC から -08:00 オフセットした 1996 年 12 月 19 日 16 時 39 分 57 秒のタイムスタンプ変換を表しています。これは、UTC での 1996-12-20T00:39:57Z と同等であるので注意してください。また、このオフセットはタイムゾーンを反映していません。たとえば、太平洋標準時のオフセットは、冬は -08:00、夏は夏時間のため、-07:00 です。

重要な注意事項:
文字列は UTC 文字列の形式の要件に従っている必要があります。UTC 形式に準拠していない文字列の場合、timestamp() 関数はタイムスタンプ値に変換されません。そのため、timestamp() を使用した式の条件評価で認証に失敗します。

<, <=, >, >=

(Timestamp, Timestamp) --> bool

関数: Timestamp 型との一般的な比較。

例:

request.time < timestamp("2018-04-12T00:00:00.00Z")
request.time <= timestamp("2018-04-12T00:00:00.00Z")
request.time > timestamp("2018-04-12T00:00:00.00Z")
request.time >= timestamp("2018-04-12T00:00:00.00Z")
このような式では、要求時刻と UTC で 2018 年 4 月 12 日のタイムスタンプとの比較が設定されます。一般に、「開始時間」または「有効期限」、ロール付与における条件の設定に使用されます。

注: ミリ秒までの時間精度が指定されている場合、等価比較と不等比較(==!=)を含めることに大きな効果はありません。

+- (Timestamp, Duration) -> Timestamp

関数: タイムスタンプから期間を加算または減算します。

例:

timestamp("2018-04-12T14:30:00.00Z") + duration("1800s")
2018-04-12 の 14:30:00 GMT の 30 分後に取得されるタイムスタンプを検索します。

timestamp("2018-04-12T14:30:00.00Z") - duration("5184000s")
2018-04-12 の 14:30:00 GMT の 60 日前のタイムスタンプを検索します。

サポートされている高度な関数と演算子

日時属性に使用される属性の変数は、Timestamp 型の request.time です。

サポートされている高度な関数 説明

<, <=, >, >=, ==, !=

(int, int) --> bool

関数: int 型との一般的な比較。

ディスカッション:
この整数用の比較演算子セットは主に、Timestamp 関数を使用した残りの「高度な関数」のセットに対して使用されます。この関数(この表の残りの部分で定義されています)はすべて、タイムスタンプ値の特定の部分を int に変換します。高度な関数ごとに、一般的な使用法を示す例があります。

getDate, getDayOfMonth, getDayOfWeek, getDayOfYear

Timestamp.() --> int

Timestamp.(string) --> int

関数:
getDate: 1 から始まるインデックスを使用して、タイムスタンプ値から日を取得します。つまり、月の最初の日が 1 です。

getDayOfMonth: 0 から始まるインデックスを使用して、タイムスタンプ値から日を取得します。つまり、月の最初の日が 0 です。

getDayOfWeek: 日曜日を 0 として、タイムスタンプ値から曜日を取得します。つまり、日曜日(0)、月曜日(1)、...、土曜日(6)です。

getDayOfYear: 0 から始まるインデックスを使用して、タイムスタンプ値から通日を取得します。つまり、年の最初の日が 0 です。

パラメータ:
タイムゾーンとしての文字列。タイムゾーンを持つ日付に基づく変換。 注: タイムゾーンが指定されていない場合、変換は UTC の日付に基づいて行われます。

有効なタイムゾーン文字列の詳細については、サポートされているタイムゾーン値をご覧ください。

例:

request.time.getDayOfWeek() > 0 && request.time.getDayOfWeek() < 6
この式は、受信リクエストが UTC 時間で月曜日から金曜日の間に送信された場合に true と評価されます。

例:

request.time.getDayOfWeek("Europe/Berlin") > 0 && request.time.getDayOfWeek(Europe/Berlin") < 6
この式は、受信リクエストがベルリンのタイムゾーンで月曜日から金曜日の間に送信された場合に true と評価されます。

例:

request.time.getDayOfYear("America/Los_Angeles") >= 0 && request.time.getDayOfYear("America/Los_Angeles") < 5
この式は、受信リクエストがロサンゼルスのタイムゾーンで年初の 5 日以内に送信された場合に true と評価されます。

getFullYear

Timestamp.() --> int

Timestamp.(string) --> int

関数: 日付から年を取得します。

パラメータ:
バージョン 1: パラメータなし。UTC での日付から。
バージョン 2: タイムゾーン文字列。タイムゾーンでの日付から。

有効なタイムゾーン文字列の詳細については、サポートされているタイムゾーン値をご覧ください。

例:

request.time.getFullYear("America/Los_Angeles") == 2018
この式は、受信リクエストがロサンゼルスのタイムゾーンで 2018 年に送信された場合に true と評価されます。

例:

request.time.getFullYear() < 2020
この式は、受信リクエストが UTC で 2019 年末より前に送信される場合に true と評価されます。

getHours

Timestamp.() --> int

Timestamp.(string) --> int

機能: 日付から時を取得します。値の範囲は 0~23 です。

パラメータ:
バージョン 1: パラメータなし。UTC での日付から。
バージョン 2: タイムゾーン文字列。タイムゾーンでの日付から。

有効なタイムゾーン文字列の詳細については、サポートされているタイムゾーン値をご覧ください。

例:

request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17
この式は、勤務時間の条件を指定します。リクエストがベルリンのタイムゾーンで午前 9 時から午後 5 時の間に送信された場合に true と評価されます。

注:

たとえば地域の適用法令の要件を満たすために、getHours()getDayofWeek() の組み合わせを使用して法定の業務時間の条件を設定できます。

getMilliseconds

Timestamp.() --> int

Timestamp.(string) --> int

関数: タイムスタンプから秒内のミリ秒を取得します。値の範囲は 0~999 です。

パラメータ:
バージョン 1: パラメータなし。UTC での日付から。
バージョン 2: タイムゾーン文字列。タイムゾーンでの日付から。

有効なタイムゾーン文字列の詳細については、サポートされているタイムゾーン値をご覧ください。

注:

この関数は意味的に使い方が限定されるため、有用性は高くありません。

getMinutes

Timestamp.() --> int

Timestamp.(string) --> int

関数: タイムスタンプから時間内の分を取得します。値の範囲は 0~59 です。

パラメータ:
バージョン 1: パラメータなし。UTC での日付から。
バージョン 2: タイムゾーン文字列。タイムゾーンでの日付から。

有効なタイムゾーン文字列の詳細については、サポートされているタイムゾーン値をご覧ください。

注:

この関数は意味的に使い方が限定されるため、有用性は高くありません。

getMonth

Timestamp.() --> int

Timestamp.(string) --> int

関数: タイムスタンプから年内の月を取得します。値の範囲は 0~11 です。

パラメータ:
バージョン 1: パラメータなし。UTC での日付から。
バージョン 2: タイムゾーン文字列。タイムゾーンでの日付から。

有効なタイムゾーン文字列の詳細については、サポートされているタイムゾーン値をご覧ください。

例:

request.time.getMonth("America/Los_Angeles") == 3
この式は、受信リクエストがロサンゼルスのタイムゾーンで 4 月中に送信された場合に true と評価されます。

getSeconds

Timestamp.() --> int

Timestamp.(string) --> int

関数: タイムスタンプから 1 分内の秒を取得します。値の範囲は 0~59 です。

パラメータ:
バージョン 1: パラメータなし。UTC での日付から。
バージョン 2: タイムゾーン文字列。タイムゾーンでの日付から。

有効なタイムゾーン文字列の詳細については、サポートされているタイムゾーン値をご覧ください。

注:

この関数は意味的に使い方が限定されるため、有用性は高くありません。

宛先 IP / ポート属性

宛先 IP / ポート属性では、宛先 IP アドレスやリクエストのポートに基づいてアクセスを管理できます。たとえば、Compute Engine の仮想マシン(VM)インスタンスでは、ポート 3001 の外部 IP アドレス 10.0.0.1 が一般的な使用を目的として公開され、IP アドレス 10.0.0.2 とポート 22 が管理用に限定して公開される場合があります。

TCP 転送の詳細については、Identity-Aware Proxy のドキュメントをご覧ください。

この属性は Identity-Aware Proxy でサポートされています。

destination.ip 属性

属性の変数 destination.ip
属性タイプ 文字列
サポートされている演算子 ==, !=
サポートされているオペランド 文字列
ディスカッション

変数 destination.ip には、IPv4 形式の IP アドレスを表す文字列を設定する必要があります。

注: startsWith(<prefix string of IP>) 関数と endsWith(<suffix string of IP>) 関数は destination.ip 属性には使用できません。destination.ip.startsWith(<prefix string of IP>) のような条件を設定しても setIamPolicy オペレーションの実行時に構文エラーは発生しませんが、予期しない結果になる可能性があるためおすすめしません。CIDR で IP アドレス範囲の検査を行う場合、IP 文字列のプレフィックス マッチングは行わないようにしてください。


destination.ip == "10.0.0.1"

destination.ip != "10.0.0.1"

destination.port 属性

属性の変数 destination.port
属性タイプ 整数
サポートされている演算子 ==, !=, <, <=, >, >=
サポートされているオペランド 整数
ディスカッション

変数 destination.port は、TCP ポート番号を表す整数である必要があります。


destination.port == 21

destination.port < 3001

転送ルールの属性

転送ルールの属性を使用すると、メンバーが作成できる転送ルールのタイプを指定できます。たとえば、メンバーが Google Cloud ネットワーク内で発生するトラフィックを処理する内部 Google Cloud ロードバランサの転送ルールを作成することを許可しつつ、インターネットから発生するトラフィックを処理する外部 Google Cloud ロードバランサの転送ルールの作成は許可しないことができます。

Cloud Load Balancing の場合、転送ルール属性は、バックエンド サービス、ターゲット プロキシ、ヘルスチェック、URL マップなど、Google Cloud ロードバランサの他のコンポーネントを作成する機能には影響しません。

転送ルール属性は、次の Google Cloud サービスでサポートされています。

サポートされる関数

サポートされる関数 説明
compute.isForwardingRuleCreationOperation() () --> bool

関数: リクエストが転送ルールを作成しているかどうかを確認します。

例: compute.matchLoadBalancingSchemes() の例をご覧ください。

compute.matchLoadBalancingSchemes() Array.(string) --> bool

関数: リクエストが、指定されたタイプの負荷分散スキームに影響するかどうかを確認します。各負荷分散スキームの ID と各スキームの詳細については、Google Cloud ロードバランサでの IAM Conditions の使用をご覧ください。

パラメータ: 文字列の配列

例:


!compute.isForwardingRuleCreationOperation() || (
  compute.isForwardingRuleCreationOperation() &&
  compute.matchLoadBalancingSchemes([
    'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
  ]))
)
  • リクエストが転送ルールを作成していない場合は、ロールをメンバーに付与します。
  • リクエストが転送ルールを作成している場合は、転送ルールが INTERNALINTERNAL_MANAGED、または INTERNAL_SELF_MANAGED の負荷分散スキームに影響を与える場合にのみロールを付与します。

リソースの属性

リソース名、リソースタイプ、リソース サービス属性は、通常、ロール バインディングによって提供されるアクセス許可の範囲を変更するために使用します。ロールに別のリソース固有の属性に適用される権限がある場合、リソースベースの条件を使用して、特定のタイプまたは特定のサービスに対するロールの権限のサブセットを付与できます。

リソースの属性は、次の Google Cloud サービスでサポートされています。

  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Cloud Key Management Service
  • Resource Manager(リソースタイプとリソース サービスのみ)

各サービスで使用できるリソース属性の詳細については、IAM Conditions のリソース属性をご覧ください。

リソース名からの値の抽出

extract() 関数を使用してリソース名から値を抽出できます。この関数を使用すると、条件式でリソース名の任意の部分を参照できます。

値を抽出するには、extract() 関数を呼び出して、抽出するリソース名の部分を特定する抽出テンプレートを指定します。たとえば、テンプレート projects/{project}/ を使用して、Compute Engine VM インスタンスのリソース名からプロジェクト ID を抽出できます。

抽出テンプレートには次の要素が含まれます。

  • 識別子は、中かっこで囲まれ、抽出する部分文字列を示します。どのような値を抽出するかがわかるように、意味のある短い識別子にします。A から Z までの大文字と小文字、数値、ダッシュ(-)、アンダースコア(_)を使用できます。

    テンプレート projects/{project}/ で、識別子は project です。

  • (省略可)接頭辞。抽出する部分文字列の前に指定する必要があります。

    テンプレート projects/{project}/ で接頭辞は projects/ です。

  • (省略可)接尾辞。抽出する部分文字列の後に指定する必要があります。

    テンプレート projects/{project}/ で、接尾辞は / です。

extract() 関数は、抽出テンプレートに接頭辞、接尾辞、またはその両方があるかどうかによって異なる値を返します。

接頭辞あり 接尾辞あり 抽出された値
- - リソース名全体
- 最初の接頭辞の後の文字。接頭辞の後に文字がない場合は空の文字列
- 接尾辞の初出よりも前の文字。接尾辞の前に文字がない場合は空の文字列。
接頭辞と接尾辞の間に文字がない場合は、接頭辞の初出とその後の接尾辞の初出との間の文字または空の文字列になります。

リソース名に含まれない接頭辞または接尾辞を指定した場合、または接頭辞の前にのみ接尾辞がある場合は、extract() 関数は null を返します。

次の例は、複数の異なる抽出テンプレートからの出力を示しています。この例では、リソースは projects/_/buckets/acme-orders-aaa/data_lake/orders/order_date=2019-11-03/aef87g87ae0876 という名前の Cloud Storage オブジェクトです。

抽出テンプレート 出力
/order_date={date}/ 2019-11-03
buckets/{name}/ acme-orders-aaa
/orders/{empty}order_date 空の文字列
{start}/data_lake projects/_/buckets/acme-orders-aaa
orders/{end} order_date=2019-11-03/aef87g87ae0876
{all} projects/_/buckets/acme-orders-aaa/data_lake/orders/order_date=2019-11-03/aef87g87ae0876
/orders/{none}/order_date= null
/orders/order_date=2019-11-03/{id}/data_lake null

このページの日時関数と演算子を使用して、抽出された値をタイムスタンプに変換することもできます。例については、リソースベースのアクセスの構成をご覧ください。

resource.name 属性

属性の変数 resource.name
属性タイプ 文字列
サポートされている演算子 startsWith()endsWith()extract()==!=
サポートされているオペランド

文字列

各リソースタイプは、リソース名に特定の形式を使用します。形式のリストについては、リソース名の形式をご覧ください。

ディスカッション

resource.name には、リクエスト内のターゲット リソースの相対的なリソースが含まれます。相対的なリソース名は URI パスで、先頭にスラッシュ(/)は付きません。

startsWith() 関数は、resource.name に対して評価される接頭辞文字列リテラルを受け取ります。

endsWith() 関数は、resource.name に対して評価される接尾辞文字列リテラルを受け取ります。

extract() 関数は、抽出テンプレートを使用して resource.name の一部を抽出します。詳細については、このページのリソース名からの値の抽出をご覧ください。

==!= 演算子は、resource.name 全体または resource.name の抽出された部分と比較されます。

例 1(Compute Engine VM インスタンスの場合):


resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")

例 2(Cloud Storage バケットの場合):


resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")

例 3(Cloud Storage オブジェクトの場合):


resource.name.endsWith(".jpg")

例 4(複数のリソースタイプの場合):


resource.name.extract("projects/{project}/")

例 5(Cloud Storage バケットの場合):


resource.name != "projects/_/buckets/secret-bucket-123"

resource.service 属性

属性の変数 resource.service
属性タイプ 文字列
サポートされている演算子 ==, !=
サポートされているオペランド 文字列


サポートされているすべてのリソース サービス文字列リテラルのリストについては、IAM Conditions のリソース属性 をご覧ください。

ディスカッション 変数 resource.service は、等式や不等式の比較を目的として使用します。

注: .startsWith(<prefix string>) 関数と .endsWith(<suffix string>) 関数は resource.service 属性に使用することを想定していません。予期しない評価結果がみられるため、推奨されません。

例 1:


resource.service == "compute.googleapis.com"

resource.type 属性

属性の変数 resource.type
属性タイプ 文字列
サポートされている演算子 ==, !=
サポートされているオペランド 文字列


サポートされているすべてのリソースタイプ文字列リテラルのリストについては、IAM Conditions のリソース属性 をご覧ください。

ディスカッション 変数 resource.type は、等式や不等式の比較を目的として使用します。

注: .startsWith(<prefix string>) 関数と .endsWith(<suffix string>) 関数は resource.type 属性に使用することを想定していません。予期しない評価結果がみられるため、推奨されません。

例 1:


resource.type != "compute.googleapis.com/Image"

例 2:


(resource.type == "compute.googleapis.com/Image" ||
resource.type == "compute.googleapis.com/Disk")

URL パス / ホスト属性

URL パス / ホスト属性を使用すると、リクエストの URL パスやホストに基づいてアクセスを管理できます。たとえば、条件によって、https://example.com がユーザーの一般的なドメインからアクセスできるメイン アプリケーションであり、https://hr.example.com/admin がアプリケーション内の人事管理者のみがアクセスできるページにアクセスするために使用されることを指定します。

この属性は Identity-Aware Proxy でサポートされています。

request.path 属性

属性の変数 request.path
属性タイプ 文字列
サポートされている演算子 ==, startsWith(), endsWith()
サポートされるオペランドとパラメータ
  • 文字列: ==
  • 定数の接頭辞文字列: startsWith()
  • 定数の接尾辞文字列: endsWith()
ディスカッション 注: != 演算子の使用は推奨されません。否定の比較演算子の代わりに(例:

request.path != "/admin"
)、次のように接頭辞の一致によることを推奨します。

! request.path.startsWith("/admin")
このようにして、「/admin/payroll/」などの「/admin」を親とする URL パスはすべて、意図しないアクセスから保護されます。

例 1:


request.path == "/admin"

request.path == "/admin/payroll"

上の 2 つの例の等価(==)比較で使用される文字列は、URL パスの標準に従って書式設定する必要があります。

例 2:


request.path.startsWith("/admin")

URL パスの接頭辞を表す文字列が関数で使用されます。

例 3:


request.path.endsWith("/payroll.js")

URL パスの接尾辞を表す文字列が関数で使用されます。

request.host 属性

属性の変数 request.host
属性タイプ 文字列
サポートされている演算子 ==, endsWith()
サポートされるオペランドとパラメータ
  • 文字列: ==
  • 定数の接尾辞文字列: endsWith()
ディスカッション .startsWith(<prefix string>) 関数は request.host 属性に使用することを想定していません。request.host.startsWith(<prefix string>) のような条件を設定しても setIamPolicy オペレーションの実行時に構文エラーは発生しませんが、予期しない結果になる可能性があるためおすすめしません。同様に != の使用は推奨されません。

例 1:


request.host == "www.example.com"

request.host == "hr.example.com"

上の 2 つの例の等価(==)比較で使用される文字列は、ウェブサイトのホスト名の URL 文字列の標準に従って書式設定する必要があります。

例 2:


request.host.endsWith("example.com")

ウェブサイトのホスト名の接尾辞を表す文字列。