IAM Conditions 属性のリファレンス

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

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

以下のセクションでは、サポートされる属性の概要と、どの Google Cloud サービスがそれぞれの属性を認識するかについて説明します。

リソースの属性

次の属性は、リクエストの対象のリソースに関連しています。

属性 使用量の概要 サポートされる Google Cloud サービス
リソース サービス属性 使用する Google Cloud サービスに基づいてアクセスを管理します。
  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Pub/Sub Lite
  • Resource Manager(リソースタイプとリソース サービスのみ)
  • Secret Manager
リソースタイプ属性 リソースタイプに基づいてアクセスを管理します。
リソース名属性 リソースの名前に基づいてアクセスを管理します。
リソースタグ リソースに付加されたタグに基づいてアクセスを管理します。 すべての Google Cloud サービス

リソースの属性の詳細については、このページのリソースの属性をご覧ください。

リクエストの属性

次の属性は、リクエストの詳細に関連しています。

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

アクセスレベル属性

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

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

Identity-Aware Proxy

API 属性

Google Cloud の特定の API またはサービスから提供されるデータに基づいて、アクセスを管理します。

  • Cloud Storage
  • Identity and Access Management
  • AI Platform Notebooks
  • API ゲートウェイ
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • Cloud Healthcare API
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • Cloud Runtime Configuration API
  • Compute Engine
  • Container Analysis
  • Dataproc
  • Earth Engine
  • Game Servers
  • Identity and Access Management
  • Identity-Aware Proxy
  • Managed Service for Microsoft Active Directory
  • Resource Manager
  • Secret Manager
  • Service Management

日時属性

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 ロードバランサの転送ルールの作成は許可しないことができます。

URL パス / ホスト属性

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

Identity-Aware Proxy

リクエストの属性の詳細については、このページのリクエストの属性をご覧ください。

条件の継承のサポート

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

組織、フォルダ、プロジェクト レベルで属性を使用する場合、ほとんどの属性は特定のリソースタイプに対してのみ使用できることに注意してください。2021 年 2 月 26 日以降は、利用できない属性を条件の一部が使用している場合、条件のその部分はアクセス権の付与として解釈されなくなります。たとえば、BigQuery リソースは宛先 IP / ポート属性を備えていないため、条件 destination.port == 21 は BigQuery リソースにアクセス権を付与しません。

この問題を回避するには、このページで説明するリソースタイプリソース サービスの属性を使用して、条件のスコープを制限します。たとえば、次の条件は、Identity-Aware Proxy トンネル インスタンス以外のすべてのリソースタイプに対して true と評価されます。反対に Identity-Aware Proxy トンネル インスタンスに対する場合は、宛先ポートを確認します。

resource.type != 'iap.googleapis.com/TunnelInstance' ||
    destination.port == 21

リソースにアタッチされたタグをチェックする条件を制限する必要はありません。条件でタグキーと値をチェックする場合、リソースタイプやリソース サービスなど、他の属性はチェックできません。

リソースの属性

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

resource.service 属性

resource.service 属性では、使用される Google Cloud サービスに基づいて条件を設定できます。たとえば、cloudresourcemanager.googleapis.com サービスを使用するリソースに対するユーザーのアクセスを制限する条件を設定できます。

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


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

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

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

例 1:


resource.service == "compute.googleapis.com"
サポート対象のサービス
  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Pub/Sub Lite
  • Resource Manager(リソースタイプとリソース サービスのみ)
  • Secret Manager

resource.type 属性

resource.type 属性では、リソースのタイプに基づいて条件を設定できます。たとえば、タイプ storage.googleapis.com/Object のリソースに対するユーザーのアクセスを制限する条件を設定できます。

条件で resource.name 属性を使用する場合は、resource.type 属性を使用して、条件を適用するリソースタイプを管理することを強くおすすめします。詳細については、このページの resource.name 属性をご覧ください。

属性の変数 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")
サポートされるリソースタイプ
Cloud Key Management Service
  • 暗号鍵バージョン
  • 暗号鍵
  • キーリング
Cloud Spanner
  • データベース
  • インスタンス
Cloud Storage
  • バケット
  • オブジェクト
Compute Engine
  • バックエンド サービス(グローバルとリージョン)
  • ファイアウォール
  • 転送ルール(グローバルとリージョン)
  • イメージ
  • インスタンス テンプレート
  • インスタンス
  • 永続ディスク(リージョンとゾーン)
  • スナップショット
  • ターゲット HTTP(S) プロキシ(グローバルとリージョン)
  • ターゲット SSL プロキシ
  • ターゲット TCP プロキシ
Google Cloud ロケーション1
Identity-Aware Proxy
  • すべてのバックエンド サービスと App Engine アプリ
  • すべてのトンネル リソース
  • すべてのトンネルゾーン
  • すべてのウェブサービス
  • App Engine アプリのサービスのバージョン
  • App Engine アプリのサービス
  • Compute Engine バックエンド サービス
  • トンネル インスタンス
Pub/Sub Lite
  • ロケーション
  • サブスクリプション
  • トピック
Resource Manager プロジェクト
Secret Manager
  • Secret のバージョン
  • Secret

1 Cloud Key Management Service は、このリソースタイプをキーリング リソースの親として使用します。

resource.name 属性

resource.name 属性では、リソース名のすべてまたは一部に基づいて条件を設定できます。

resource.name 属性は、以下の表に示す特定のリソースタイプに対してのみ使用できます。条件の適用範囲を目的のリソースタイプに限定することを強くおすすめします。ロールに resource.name 属性を持たないリソースタイプに対する権限が含まれている場合は、resource.name を確認する条件の一部によってそれらの権限が制限されないようにする必要があります。

次の例は、そのように設定する方法を示しています。この例では、Cloud Storage バケットとオブジェクトを除くすべてのリソースタイプへのアクセスが条件によって許可されます。一方、バケットとオブジェクトに対しては、条件によってバケット example-bucket とその中に含まれるオブジェクトへのアクセスのみが許可されます。

(resource.type != 'storage.googleapis.com/Bucket' &&
 resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-bucket')

条件の前半部分は、リソースがバケットとオブジェクトのいずれでもないことを確認します。リソースのタイプが異なる場合は、リソース名に関係なく、条件全体が true と評価されます。

この条件が resource.service 属性ではなく resource.type 属性を確認することにも留意してください。resource.type 属性を確認することには、次のようなメリットがあります。

  • resource.name の確認を適切なリソースのセットに制限します。たとえば、特定の名前の Compute Engine インスタンスへのアクセス権を付与する場合は、Compute Engine インスタンス以外のすべてのリソースタイプを除外するのが適切です。
  • こうすることで、今後サービスによって新しいリソースタイプが追加された場合に、条件の範囲が変更されることを防止できます。

extract() 関数を使用してリソース名から値を抽出できます。たとえば、Compute Engine VM インスタンスのリソース名からプロジェクト ID を抽出し、そのプロジェクト ID を参照する条件式を記述できます。詳細については、このページの属性から値を抽出するをご覧ください。

属性の変数 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"
サポートされるリソースタイプ
Cloud Key Management Service
  • 暗号鍵
  • 暗号鍵バージョン
  • キーリング
Cloud Spanner
  • データベース
  • インスタンス
Cloud Storage
  • バケット
  • オブジェクト
Compute Engine
  • バックエンド サービス(グローバルとリージョン)
  • ファイアウォール
  • 転送ルール(グローバルとリージョン)
  • イメージ
  • インスタンス テンプレート
  • インスタンス
  • 永続ディスク(リージョンとゾーン)
  • スナップショット
  • ターゲット HTTP(S) プロキシ(グローバルとリージョン)
  • ターゲット SSL プロキシ
  • ターゲット TCP プロキシ
Pub/Sub Lite
  • ロケーション
  • サブスクリプション
  • トピック
Secret Manager
  • Secret のバージョン
  • Secret

リソースタグ

リソースタグの関数を使用すると、リソースに適用されているタグ、またはリソースによって継承されるタグに基づいて条件を設定できます。たとえば、タグ env: prod が適用されているリソースのみのロールを付与する条件を設定できます。タグによるアクセス制御の詳細については、タグとアクセス制御をご覧ください。

各タグはキーと値で構成されます。キーと値ごとに、異なるタイプの識別子がいくつかあります。

  • 永続 ID。グローバルに一意であり、再利用できません。たとえば、タグキーに永続 ID tagKeys/123456789012 を割り当て、タグ値に永続 ID tagValues/567890123456 を持たせることができます。
  • 略称。各キーの略称は、組織内で一意である必要があり、また各値の略称は、関連付けられているキーに対して一意である必要があります。たとえば、タグキーに略称 env を指定し、タグ値に prod という略称を付けることができます。
  • 名前空間名。組織の数値 ID をタグキーの略称に追加します。たとえば、タグキーに名前空間名 123456789012/env を指定できます。組織 ID の取得方法は、こちらをご覧ください。

条件で使用する ID の種類を選択する方法については、タグの定義と ID をご覧ください。

タグの操作は、次の関数を使用して行えます。

関数 説明
resource.hasTagKey String --> bool

関数:

リクエストのリソースが、指定されたキーのタグを持つかどうかをチェックします。タグキーは、その名前空間名で調べることができます。永続 ID を使用してタグキーを確認するには、関数 resource.hasTagKeyId() を使用します。

パラメータ: 文字列: タグキーの名前空間名。接頭辞として組織の数値 ID とスラッシュが付きます。例: 123456789012/env

例:

resource.hasTagKey('123456789012/env')
リクエストのリソースにキー env を含むタグがある場合、true を返します。

resource.hasTagKeyId String --> bool

関数:

リクエストのリソースが、指定されたキーのタグを持つかどうかをチェックします。永続 ID で、タグキーの検索を行います。名前空間名を使用してタグキーを確認するには、関数 resource.hasTagKey() を使用します。

パラメータ: 文字列: タグキーの永続 ID。例: tagKeys/123456789012

例:

resource.hasTagKeyId('tagKeys/123456789012')
リクエストのリソースにキー tagKeys/123456789012 を含むタグがある場合、true を返します。

resource.matchTag (String, String) --> bool

関数:

リクエストのリソースに、指定されたリソースと値を含むタグが存在するかどうかを確認します。名前空間名でキーの検索が行われ、省略名で値が検索されます。永続 ID を使用してタグキーと値を確認するには、関数 resource.matchTagId() を使用します。

パラメータ:

文字列の第 1 パラメータは、タグキーの名前空間名で、組織の数値 ID とスラッシュを接頭辞として含みます。例: 123456789012/env

文字列の第 2 パラメータは、タグ値の略称です。例: prod

例:

resource.matchTag('123456789012/env', 'prod')
リクエストのリソースにキー 123456789012/env と値 prod のタグが含まれている場合、true を返します。

resource.matchTagId (String, String) --> bool

関数:

リクエストのリソースに、指定されたリソースと値を含むタグが存在するかどうかを確認します。キーと値は、永続 ID を使用して検索されます。名前空間名を使用してタグキー、略称を使用して値を確認するには、関数 resource.matchTag() を使用します。

パラメータ:

文字列の第 1 パラメータは、タグキーの永続 ID です。例: tagKeys/123456789012

文字列の第 2 パラメータは、タグ値の永続 ID です。例: tagValues/567890123456

例:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')
リクエストのリソースにキー tagKeys/123456789012 と値 tagValues/567890123456 のタグが含まれている場合、true を返します。

リクエストの属性

リクエストの属性では、アクセスレベル、日時、宛先 IP アドレスとポート(IAP TCP トンネリングの場合)、想定 URL ホスト / パス(IAP の場合)など、リクエストの詳細情報を評価する条件を作成できます。

アクセスレベル属性

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

アクセスレベル属性は、発信元 IP アドレス、デバイス属性、時刻などのリクエストの属性から取得されます。たとえば、fullyTrusted というアクセスレベルでは、リクエストを送信したデバイスが会社の所有物であること、画面ロック機能を搭載していることが必須になるかもしれません。onNetwork というアクセスレベルでは、リクエストを送信したデバイスが特定の IP アドレス範囲から発信していることが必須になるかもしれません。アクセスレベルの詳細については、Access Context Manager のドキュメントをご覧ください。

アクセスレベル属性は、Identity-Aware Proxy を使用してトンネル インスタンスにアクセスする場合、または App Engine あるいは Compute Engine のバックエンド サービスで実行されているウェブ アプリケーションにアクセスする場合にのみ使用できます。より具体的には、アクセスレベル属性は、次の権限の 1 つを確認するリクエストでのみ使用できます。

  • iap.tunnelInstances.accessViaIAP
  • iap.webServiceVersions.accessViaIAP

次の事前定義ロールを条件付きで付与する場合は、アクセスレベル属性を使用できます。

  • IAP で保護されたトンネル ユーザー(roles/iap.tunnelResourceAccessor

    単一の権限 iap.tunnelInstances.accessViaIAP が含まれています。

  • IAP で保護されたウェブアプリ ユーザー(roles/iap.httpsResourceAccessor

    単一の権限 iap.webServiceVersions.accessViaIAP が含まれています。

アクセスレベル属性を使用して、これらの権限を含むカスタムロールを条件付きで付与することもできます。カスタムロールに他の権限を含めることはできません。

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
サポートされるリソースタイプ Identity-Aware Proxy を使用してトンネル インスタンスまたは App Engine で走行するウェブ アプリケーションにアクセスするリクエストで使用可能

API 属性

API 属性は、Google Cloud の特定の API またはサービスから提供されるデータに基づいてアクセスを管理するのに役立ちます。

たとえば、Cloud Storage を使用してバケット内のオブジェクトを一覧表示する場合に、リクエストの prefix パラメータを使用して、名前が特定の接頭辞で始まるオブジェクトだけが含まれるよう指定できます。認証情報のアクセス境界を使用して有効期限の短い認証情報の範囲を限定する場合は、権限を制限する認証情報のアクセス境界を作成し、API 属性 storage.googleapis.com/objectListPrefix を確認してオブジェクトのリストを取得できます。この API 属性には、リクエストの prefix パラメータの値が含まれます。

条件で API 属性を使用する必要がある場合の例については、次のページをご覧ください。

API 属性を認識するサービスについては、以下のセクションをご覧ください。

API 属性の関数

次の関数を使用して、API 属性を操作できます。

関数 説明
api.getAttribute (String, T) --> T

関数: リクエストされた API 属性を取得します。

パラメータ:

文字列: 取得する API 属性。サポートされている値については、このページの Cloud Storage API 属性IAM API 属性をご覧ください。

T: API 属性が取得できない場合に使用されるデフォルト値。API 属性の値と同じ型を使用します。たとえば API 属性の値が文字列の場合は、空の文字列、または undefined などのプレースホルダ文字列を使用できます。

例:

api.getAttribute("storage.googleapis.com/objectListPrefix", "")
Cloud Storage バケットのオブジェクトの一覧表示で使用された prefix パラメータの値。prefix パラメータを省略したリクエストと、他のタイプのリクエストでは、空の文字列が返されます。

hasOnly List<T>.(List<T>) --> bool

関数: リストに含まれるのが許可された項目またはそのサブセットのみであることを確認します。

パラメータ:

List<T>: 型 T の項目のリストです。api.getAttribute() によって返されたリストで、関数を呼び出します。パラメータは、API 属性に含めることができる項目のリストです。

例:

api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
    .hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

リクエストが、Pub/Sub 編集者(roles/pubsub.editor)または Pub/Sub パブリッシャー(roles/pubsub.publisher)以外のロールを付与または取り消すかどうかを確認します。次の表に、さまざまなリクエスト値の結果を示します。

付与または取り消されるロール 結果
なし

true

ロールが変更されない場合、api.getAttribute() はデフォルト値を返します。この属性のデフォルト値は常に空のリストです。定義上、空のリストには、許可リストに登録されていない値は含まれません。

roles/pubsub.editor

true

ロールが許可リストに登録されています。

roles/pubsub.editor
roles/pubsub.publisher

true

どちらのロールも許可リストに登録されます。

roles/billing.admin

false

ロールが許可リストに登録されていません。

roles/billing.admin
roles/pubsub.editor

false

1 つは許可リストに登録されていますが、もう 1 つのロールは登録されていません。

Cloud Storage API の属性

Cloud Storage には、次の API 属性があります。

属性 説明
storage.googleapis.com/objectListPrefix 文字列

バケット内のオブジェクトを一覧表示するリクエストの場合、リクエストの prefix パラメータの値が含まれます。リクエストの prefix パラメータが省略されている場合、この属性は定義されません。

他のタイプのリクエストでは、属性は定義されません。

この属性を認識するサービス:

この属性は Cloud Storage でのみ認識されます。

IAM API 属性

IAM では、次の API 属性を使用できます。

属性 説明
iam.googleapis.com/modifiedGrantsByRole 配列

リソースの IAM ポリシーを設定するリクエストの場合、この属性には、リクエストによって変更されるロール バインディングのロール名が含まれます。

他のタイプのリクエストでは、属性は定義されません。

この属性を受け入れるリソース:

次のリソースは、IAM ポリシーの modifiedGrantsByRole 属性で条件を受け入れます。

  • プロジェクト
  • フォルダ
  • 組織

この属性を認識するサービス:

次のサービスは、modifiedGrantsByRole 属性を認識します。

  • AI Platform Notebooks
  • API ゲートウェイ
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • Cloud Healthcare API
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • Cloud Runtime Configuration API
  • Compute Engine
  • Container Analysis
  • Dataproc
  • Earth Engine
  • Game Servers
  • Identity and Access Management
  • Identity-Aware Proxy
  • Managed Service for Microsoft Active Directory
  • Resource Manager
  • Secret Manager
  • Service Management

日時属性

日時属性は、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 インスタンスが、外部 IP アドレスとポート 132.168.42.21:3001 を、一般的な使用を目的として内部 IP アドレスとポート 10.0.0.1:2300 にマッピングする場合に、一方で内部 IP アドレスとポート 10.0.0.1:22 は、内部の管理用途でのみ使用可能な場合があります。この際に宛先 IP / ポート属性を使用することで、内部 IP アドレスとポートに基づいて異なる数のアクセス権を付与できます。

TCP 転送の詳細については、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"
サポートされるリソースタイプ Identity-Aware Proxy を使用してトンネル インスタンスにアクセスするリクエストで使用可能

destination.port 属性

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

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


destination.port == 21

destination.port < 3001
サポートされるリソースタイプ Identity-Aware Proxy を使用してトンネル インスタンスにアクセスするリクエストで使用可能

転送ルールの属性

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

Cloud Load Balancing の場合、転送ルール属性は、バックエンド サービス、ターゲット プロキシ、ヘルスチェック、URL マップなど、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 の負荷分散スキームに影響を与える場合にのみロールを付与します。

サポートされるリソースタイプ

この属性は、次のいずれかのリソースタイプを作成するリクエストに使用できます。

サービス リソースタイプ
Cloud Load Balancing 転送ルール
Cloud VPN 転送ルール(グローバルとリージョン)
Compute Engine 転送ルール(プロトコル転送用)
Traffic Director1 転送ルール

1 Compute Engine のリソース属性を使用します。

URL パス / ホスト属性

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

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 パスの接尾辞を表す文字列が関数で使用されます。

サポートされるリソースタイプ

Identity-Aware Proxy アプリのサービス バージョン(App Engine)

Identity-Aware Proxy を使用して App Engine または Compute Engine で実行されているウェブ アプリケーションにアクセスするリクエストに対して使用可能

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")

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

サポートされるリソースタイプ

Identity-Aware Proxy アプリのサービス バージョン(App Engine)

Identity-Aware Proxy を使用してアプリのサービス バージョンにアクセスするリクエストで使用できます。

属性から値を抽出する

extract() 関数を使用して、属性から値を抽出できます。たとえば、リソース名の任意の部分を抽出し、抽出したテキストを参照する条件式を記述できます。

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

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

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

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

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

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

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

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

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

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

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

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

抽出テンプレート 出力
/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

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