IAM Conditions 属性のリファレンス

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

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

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

リソースの属性

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

属性 使用量の概要 サポートされる Google Cloud サービス
リソース サービス属性 使用する Google Cloud サービスに基づいてアクセスを管理します。
  • Apigee
  • Application Integration
  • BigQuery
  • Binary Authorization
  • Bigtable
  • Cloud Key Management Service
  • Cloud Logging
  • Spanner
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Google Kubernetes Engine
  • Identity-Aware Proxy
  • Integration Connectors
  • Pub/Sub Lite
  • Resource Manager
  • Secret Manager
リソースタイプ属性 リソースタイプに基づいてアクセスを管理します。
リソース名属性 リソースの名前に基づいてアクセスを管理します。
  • Apigee
  • Application Integration
  • BigQuery
  • Binary Authorization
  • Bigtable
  • Cloud Key Management Service
  • Cloud Logging
  • Spanner
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Google Kubernetes Engine
  • Integration Connectors
  • Pub/Sub Lite
  • Secret Manager
リソースタグ リソースに付加されたタグに基づいてアクセスを管理します。 すべての Google Cloud サービス(継承条件のサポートをご覧ください)

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

リクエストの属性

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

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

アクセスレベル属性

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

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

Identity-Aware Proxy

API 属性

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

  • Identity and Access Management
  • API ゲートウェイ
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • Cloud Healthcare API
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • Cloud Runtime Configuration API
  • Cloud Storage
  • Compute Engine
  • Artifact Analysis
  • Dataproc
  • Earth Engine
  • Game Servers
  • Identity and Access Management
  • Identity-Aware Proxy
  • Managed Service for Microsoft Active Directory
  • ユーザー管理のノートブック
  • Resource Manager
  • Secret Manager
  • サービス管理

日時属性

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
  • Cloud Run

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

条件の継承のサポート

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

組織、フォルダ、プロジェクト レベルで属性を使用する場合、ほとんどの属性は特定のリソースタイプに対してのみ使用できることに注意してください。利用できない属性を条件の一部が使用している場合、条件のその部分はアクセス権の付与として解釈されなくなります。たとえば、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
属性タイプ

string

サポートされている値の一覧については、リソース サービスの値をご覧ください。

サポートされている演算子 ,
詳細 条件で resource.type 属性を使用する場合は、属性と一致するのか()一致しないのか()を確認してください。接頭辞や接尾辞のチェックなどの他の比較では、予期しない結果が生じることがあります。

Compute Engine リソースの場合は true を返します。


resource.service == "compute.googleapis.com"
サポート対象のサービス
  • Apigee
  • Application Integration
  • BigQuery
  • Binary Authorization
  • Bigtable
  • Cloud Key Management Service
  • Cloud Logging
  • Spanner
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Google Kubernetes Engine
  • Identity-Aware Proxy
  • Integration Connectors
  • Pub/Sub Lite
  • Resource Manager
  • Secret Manager

resource.type 属性

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

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

属性の変数 resource.type
属性タイプ

string

サポートされている値の一覧については、リソースタイプの値をご覧ください。

サポートされている演算子 ,
詳細 条件で resource.type 属性を使用する場合は、属性と一致するのか()一致しないのか()を確認してください。接頭辞や接尾辞のチェックなどの他の比較では、予期しない結果が生じることがあります。

リソースが Compute Engine イメージでない限り、true を返します。


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

リソースが Compute Engine イメージまたは永続ディスクである場合にのみ、true を返します。


(resource.type == "compute.googleapis.com/Image" ||
 resource.type == "compute.googleapis.com/Disk")
サポートされるリソースタイプ
Apigee
  • API プロダクトの属性
  • API プロダクト
  • API プロキシ
  • API プロキシの Key-Value マップエントリ
  • API プロキシの Key-Value マップ
  • API プロキシ リビジョン
  • キャッシュ
  • デベロッパー アプリ属性
  • デベロッパー アプリ
  • デベロッパー属性
  • デベロッパー
  • 環境 Key-Value マップエントリ
  • 環境 Key-Value マップ
  • エクスポート
  • フローフック
  • キーストア エイリアス
  • キーストア
  • クエリ
  • 料金プラン
  • リファレンス
  • 共有フローのリビジョン
  • 共有フロー
  • ターゲット サーバー
  • トレース(デバッグ)セッション
BigQuery
  • データセット
  • モデル
  • ルーティン
  • テーブル
Application Integration
  • 認証構成
  • 実行
  • 統合のバージョン
  • 統合
  • ロケーション
  • 停止
Binary Authorization
  • 認証者
  • 継続的検証の構成
  • ポリシー
Bigtable
  • クラスタ
  • インスタンス
  • テーブル
Cloud Key Management Service
  • 暗号鍵バージョン
  • 暗号鍵
  • キーリング
Cloud Logging
  • ログバケット
  • ログビュー
Spanner
  • バックアップ
  • データベース
  • インスタンス
Cloud SQL
  • バックアップ実行
  • インスタンス
Cloud Storage
  • バケット
  • マネージド フォルダ
  • オブジェクト
Compute Engine
  • バックエンド サービス(グローバルとリージョン)
  • ファイアウォール
  • 転送ルール(グローバルとリージョン)
  • イメージ
  • インスタンス テンプレート
  • インスタンス
  • 永続ディスク(リージョンとゾーン)
  • スナップショット
  • ターゲット HTTP(S) プロキシ(グローバルとリージョン)
  • ターゲット SSL プロキシ
  • ターゲット TCP プロキシ
Dataform
  • コンパイル結果
  • ロケーション
  • リリース構成
  • リポジトリ
  • ワークフロー構成
  • ワークフローの呼び出し
  • ワークスペース
Google Cloud
  • ロケーション1
Google Kubernetes Engine
  • クラスタ
Firestore
  • データベース
Identity-Aware Proxy
  • すべてのバックエンド サービスと App Engine アプリ
  • すべてのトンネル リソース
  • すべてのトンネルゾーン
  • すべてのウェブサービス
  • App Engine アプリのサービスのバージョン
  • App Engine アプリのサービス
  • Compute Engine バックエンド サービス
  • トンネル インスタンス
Integration Connectors
  • 接続
  • 接続スキーマ メタデータ
  • エンドポイント アタッチメント
  • イベント サブスクリプション
  • マネージド ゾーン
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 インスタンス以外のすべてのリソースタイプを除外するのが適切です。
  • こうすることで、今後サービスによって新しいリソースタイプが追加された場合に、条件の範囲が変更されることを防止できます。

最後に、条件でリソース名を評価する際に、 演算子で等価性をチェックするのではなく、startsWith() 関数を使用することに注意してください。条件はリソース名の先頭を確認するため、バケットとそのバケット内のオブジェクトにも一致します。等価性が確認された場合は、バケットにのみ一致します。

複数のリソース名の照合に * などのワイルドカード文字を使用することはできません。以下の方法を検討してください。

  • リソース名から値を抽出するには、extract() 関数を使用します。たとえば、Compute Engine VM インスタンスのリソース名からプロジェクト ID を抽出し、そのプロジェクト ID を参照する条件式を記述できます。

    詳しくは、このページの属性から値を抽出するをご覧ください。

  • startsWith() 関数または endsWith() 関数を使用して、リソース名の開始または終了を評価する条件を記述します。

属性の変数 resource.name
属性タイプ

string

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

サポートされる関数と演算子 startsWith(), endsWith(), extract(), ,
詳細

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

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

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

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

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

リソース名が secret-bucket-123 という名前の Cloud Storage バケットを識別しない限り、true を返します。


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

リソース名が指定された接頭辞で始まる場合は、Compute Engine VM インスタンスで使用されている形式で true を返します。


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

リソース名が指定された接頭辞で始まる場合は、Cloud Storage バケットで使用されている形式で true を返します。


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

リソース名が指定された接尾辞で終わる場合、true を返します(例: Cloud Storage オブジェクトのファイル拡張子)。


resource.name.endsWith(".jpg")

プロジェクト名または番号が存在する場合は、それを返します。


resource.name.extract("projects/{project}/")
サポートされるリソースタイプ
Apigee
  • API プロダクトの属性
  • API プロダクト
  • API プロキシ
  • API プロキシの Key-Value マップエントリ
  • API プロキシの Key-Value マップ
  • API プロキシ リビジョン
  • キャッシュ
  • デベロッパー アプリ属性
  • デベロッパー アプリ
  • デベロッパー属性
  • デベロッパー
  • 環境 Key-Value マップエントリ
  • 環境 Key-Value マップ
  • エクスポート
  • フローフック
  • キーストア エイリアス
  • キーストア
  • クエリ
  • 料金プラン
  • リファレンス
  • 共有フローのリビジョン
  • 共有フロー
  • ターゲット サーバー
  • トレース(デバッグ)セッション
BigQuery
  • データセット
  • モデル
  • ルーティン
  • テーブル
Application Integration
  • 認証構成
  • 実行
  • 統合のバージョン
  • 統合
  • ロケーション
  • 停止
Binary Authorization
  • 認証者
  • 継続的検証の構成
  • ポリシー
Bigtable
  • クラスタ
  • インスタンス
  • テーブル
Cloud Key Management Service
  • 暗号鍵
  • 暗号鍵バージョン
  • キーリング
Cloud Logging
  • ログバケット
  • ログビュー
Spanner
  • バックアップ
  • データベース
  • インスタンス
Cloud SQL
  • バックアップ実行
  • インスタンス
Cloud Storage
  • バケット
  • マネージド フォルダ
  • オブジェクト
Compute Engine
  • バックエンド サービス(グローバルとリージョン)
  • ファイアウォール
  • 転送ルール(グローバルとリージョン)
  • イメージ
  • インスタンス テンプレート
  • インスタンス
  • 永続ディスク(リージョンとゾーン)
  • スナップショット
  • ターゲット HTTP(S) プロキシ(グローバルとリージョン)
  • ターゲット SSL プロキシ
  • ターゲット TCP プロキシ
Google Kubernetes Engine
  • クラスタ
Firestore
  • データベース
Dataform
  • コンパイル結果
  • ロケーション
  • リリース構成
  • リポジトリ
  • ワークフロー構成
  • ワークフローの呼び出し
  • ワークスペース
Integration Connectors
  • 接続
  • 接続スキーマ メタデータ
  • エンドポイント アタッチメント
  • イベント サブスクリプション
  • マネージド ゾーン
Pub/Sub Lite
  • ロケーション
  • サブスクリプション
  • トピック
Secret Manager
  • Secret のバージョン
  • Secret

リソースタグ

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

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

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

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

タグの条件は、すべての Google Cloud サービスとリソースタイプでサポートされています。タグ条件を直接サポートしていないリソースにタグ条件を適用する方法については、このページの継承された条件のサポートをご覧ください。

以下の関数を使用して、タグに基づいて条件を設定できます。

関数 説明
resource.hasTagKey(
  keyName: string
)
  bool

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

パラメータ
keyName: タグキーの名前空間名。組織の数値 ID とスラッシュを接頭辞として使用します。たとえば、123456789012/env

リクエストのリソースにキー env を含むタグがある場合、true を返します。


resource.hasTagKey('123456789012/env')
resource.hasTagKeyId(
  keyId: string
)
  bool

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

パラメータ
keyId: タグキーの永続的な ID。たとえば、tagKeys/123456789012

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


resource.hasTagKeyId('tagKeys/123456789012')
resource.matchTag(
  keyName: string,
  valueShortName: string
)
  bool

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

パラメータ
  • keyName: タグキーの名前空間名。組織の数値 ID とスラッシュを接頭辞として使用します。たとえば、123456789012/env
  • valueShortName: タグ値の短い名前。たとえば、prod

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


resource.matchTag('123456789012/env', 'prod')
resource.matchTagId(
  keyId: string,
  valueId: string
)
  bool

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

パラメータ
  • keyId: タグキーの永続的な ID。たとえば、tagKeys/123456789012
  • valueId: タグ値の永続的な ID。たとえば、tagValues/567890123456

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


resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

リクエストの属性

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

アクセスレベル属性

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

アクセスレベル属性は、発信元 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
属性タイプ list<string>
サポートされている演算子 in
詳細

リクエストが特定のアクセスレベルを満たしているかどうかを確認するには、in 演算子を使用します。


ACCESS_LEVEL_FULL_NAME in request.auth.access_levels

アクセスレベルの完全な名前は次の形式になります。


accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL

リクエストが CorpNet アクセスレベルを満たしている場合、true を返します。


"accessPolicies/199923665455/accessLevels/CorpNet"
    in request.auth.access_levels
サポートされるリソースタイプ Identity-Aware Proxy を使用して、トンネル インスタンス、トンネル宛先グループ、Google Cloud Load Balancing で実行されているウェブ アプリケーション、または App Engine で実行されているウェブ アプリケーションにアクセスするリクエストに対して使用できます。

API 属性

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

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

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

すべてのサービスが API 属性を認識するわけではありません。以降のセクションでは、各 API 属性を認識するサービスを示します。

API 属性の関数

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

関数 説明
api.getAttribute(
  attributeName: string,
  defaultValue: V<T>
)
  V<T>

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

パラメータ
  • attributeName: 取得する API 属性。サポートされている値については、このページの Cloud Storage API 属性IAM API 属性をご覧ください。
  • defaultValue: API 属性が使用できない場合に使用するデフォルト値(V)。値 VT 型です。T は API 属性の値と同じ型です。たとえば API 属性の値が文字列の場合は、空の文字列、または undefined などのプレースホルダ文字列を使用できます。

以下のいずれかを返します。

  • Cloud Storage バケット内のオブジェクトを一覧表示するリクエストの場合、リクエストに prefix パラメータが含まれていると、その値が返されます。
  • prefix パラメータを省略したオブジェクトを一覧表示するリクエストの場合、他のすべてのタイプのリクエストでは、空の文字列が返されます。

api.getAttribute("storage.googleapis.com/objectListPrefix", "")
hasOnly(
  items: list<T>
)
  bool

リストに含まれるのが許可された項目またはそのサブセットのみであることを確認します。api.getAttribute() によって返されたリストで、関数を呼び出します。

パラメータ
items: T 型の項目のリスト。各項目は、API 属性に含めることができる値です。

リクエストで Pub/Sub 編集者(roles/pubsub.editor)または Pub/Sub パブリッシャー(roles/pubsub.publisher)以外のロールの付与または取り消しを行うかどうかを確認します。


api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
    .hasOnly(['roles/pubsub.editor', '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
属性タイプ string
詳細

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

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

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

IAM API 属性

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

属性の変数 iam.googleapis.com/modifiedGrantsByRole
属性タイプ list<string>
詳細

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

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

この属性を受け入れるリソースタイプ

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

  • プロジェクト
  • フォルダ
  • 組織
この属性を認識するサービス

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

  • API ゲートウェイ
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • Cloud Healthcare API
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • Cloud Runtime Configuration API
  • Cloud Storage
  • Compute Engine
  • Artifact 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 サービスとリソースタイプでサポートされています。日時条件を直接サポートしていないリソースに日時条件を適用する方法については、このページの継承された条件のサポートをご覧ください。

request.time 属性には、リクエストのタイムスタンプが含まれます。このタイムスタンプは、別のタイムスタンプまたは期間と比較できます。

以降のセクションでは、タイムスタンプと期間に基づいて条件を設定するために使用できる関数を示します。

タイムスタンプと期間の作成、比較、変更を行う

関数または演算子 説明
date(
  value: string
)
  Timestamp

日付を string から Timestamp に変換します。

パラメータ
value: YYYY-MM-DD 形式の日付。ここで、YYYY は年、MM は 2 桁の月、DD は 2 桁の日です。結果の Timestamp には、指定された日付と時刻 00:00:00.000 UTC が含まれます。

日付 2023-02-01 と時刻 00:00:00.000 UTC を表す Timestamp を作成します。


date("2023-02-01")
duration(
  value: string
)
  Duration

時間を string から Duration に変換します。

パラメータ
value: 秒単位の Duration。その後に s が続きます。

1.5 分を表す期間を作成します。


duration("90s")

30 日を表す期間を作成します。


duration("2592000s")
timestamp(
  value: string
)
  Timestamp

stringTimestamp に変換します。

パラメータ

value: RFC 3339 に準拠する UTC タイムスタンプ。

UTC の 2023 年 4 月 12 日 23:20:50.52 を表すタイムスタンプを作成します。


timestamp("2023-04-12T23:20:50.52Z")
, , ,

2 つの Timestamp 値を比較します。

リクエスト時間が 2022 年 4 月 12 日 00:00:00 UTC より前の場合、true を返します。


request.time < timestamp("2022-04-12T00:00:00.00Z")

リクエスト時間が 2022 年 4 月 12 日 00:00:00 UTC かそれ以前の場合、true を返します。


request.time <= timestamp("2022-04-12T00:00:00.00Z")

リクエスト時間が 2022 年 4 月 12 日 00:00:00 UTC より後の場合、true を返します。


request.time > timestamp("2022-04-12T00:00:00.00Z")

リクエスト時間が 2022 年 4 月 12 日 00:00:00 UTC かそれ以降の場合、true を返します。


request.time >= timestamp("2022-04-12T00:00:00.00Z")
  • timestamp + duration   Timestamp
  • timestamp - duration   Timestamp

Timestamp に対して Duration の加算または減算を行います。

2024 年 4 月 12 日 14:30:00 UTC から 30 分後の Timestamp を返します。


timestamp("2024-04-12T14:30:00.00Z") + duration("1800s")

2024 年 4 月 12 日 14:30:00 UTC の 60 日前の Timestamp を返します。


timestamp("2024-04-12T14:30:00.00Z") - duration("5184000s")

タイムスタンプから情報を抽出する

このセクションの関数では、タイムスタンプから情報(タイムスタンプが該当する曜日など)を抽出できます。

IAM Conditions では、すべてのタイムスタンプが UTC で示されます。ただし、別のタイムゾーンに基づいて情報を抽出することもできます。たとえば、UTC タイムスタンプがドイツのベルリンのタイムゾーンの月曜日に該当するかどうかを確認できます。

別のタイムゾーンを指定するには、タイムゾーンを関数に渡します。IETF タイムゾーン データベースの名前または UTC オフセットを使用します。たとえば、中央ヨーロッパ時間(CET)の場合は Europe/Berlin または +01:00 を使用します。

サポートされる関数と演算子 説明
Timestamp.getDate(
  timeZone: string
)
  int

Timestamp から日を取得します。この値は 1 から始まるインデックスを使用します。月の初日は 1 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

リクエストが 15 日(UTC)以降に送信された場合、true を返します。


request.time.getDate() > 15
Timestamp.getDayOfMonth(
  timeZone: string
)
  int

Timestamp から日を取得します。この値はゼロから始まるインデックスを使用します。月の初日は 0 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

リクエストが 15 日(UTC)以降に送信された場合、true を返します。


request.time.getDayOfMonth() > 14
Timestamp.getDayOfWeek(
  timeZone: string
)
  int

Timestamp から曜日を取得します。この値はゼロから始まるインデックスを使用します。たとえば、日曜日は 0 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

ドイツのベルリンで月曜日から金曜日の間にリクエストが送信された場合、true を返します。


request.time.getDayOfWeek("Europe/Berlin") > 0 &&
    request.time.getDayOfWeek("Europe/Berlin") < 6
Timestamp.getDayOfYear(
  timeZone: string
)
  int

Timestamp からその年の経過日数を取得します。この値はゼロから始まるインデックスを使用します。年の初日は 0 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

カリフォルニア州のマウンテン ビューで年初の 5 日間にリクエストが送信された場合、true を返します。


request.time.getDayOfYear("America/Los_Angeles") >= 0 &&
    request.time.getDayOfYear("America/Los_Angeles") < 5
Timestamp.getFullYear(
  timeZone: string
)
  int

Timestamp から年を取得します。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

リクエストが 2023 年にカリフォルニア州マウンテンビューで送信された場合は、true を返します。


request.time.getFullYear("America/Los_Angeles") == 2023

リクエストが 2022 年(UTC)に送信された場合、true を返します。


request.time.getFullYear() == 2022
Timestamp.getHours(
  timeZone: string
)
  int

Timestamp から時間を取得します。この値はゼロから始まるインデックスを使用します。値の範囲は 023 です。

この関数を getDayofWeek() と組み合わせると、管轄地域内で許可されている業務時間にのみアクセス権を付与できます。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

ドイツのベルリンの平日の 09:00(午前 9 時)から 17:00(午後 5 時)の間に送信された場合は、true を返します。


request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
    request.time.getDayOfWeek("Europe/Berlin") <= 5 &&
    request.time.getHours("Europe/Berlin") >= 9 &&
    request.time.getHours("Europe/Berlin") <= 17
Timestamp.getMilliseconds(
  timeZone: string
)
  int

Timestamp からミリ秒数を取得します。この値はゼロから始まるインデックスを使用します。値の範囲は 0999 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。
Timestamp.getMinutes(
  timeZone: string
)
  int

Timestamp から、1 時間後の分数を取得します。この値はゼロから始まるインデックスを使用します。値の範囲は 059 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

ドイツのベルリンの 09:30(午前 9 時 30 分)以降にリクエストが送信された場合、true を返します。


request.time.getHours("Europe/Berlin") >= 9 &&
    request.time.getMinutes("Europe/Berlin") >= 30
Timestamp.getMonth(
  timeZone: string
)
  int

Timestamp から月を取得します。この値はゼロから始まるインデックスを使用します。値の範囲は 011 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは UTC です。

カリフォルニア州マウンテン ビューで 4 月にリクエストが送信された場合、true を返します。


request.time.getMonth("America/Los_Angeles") == 3
Timestamp.getSeconds(
  timeZone: string
)
  int

Timestamp から秒数を取得します。この値はゼロから始まるインデックスを使用します。値の範囲は 059 です。

パラメータ
timeZone: 結果を計算するタイムゾーン。デフォルトは 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
属性タイプ string
サポートされている演算子 ,
詳細

変数 destination.ip は、IPv4 形式の内部 IP アドレスを識別します。

宛先 IP アドレスが 10.0.0.1 の場合、true を返します。


destination.ip == "10.0.0.1"

宛先 IP アドレスが 10.0.0.1 でない限り、true を返します。


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

destination.port 属性

属性の変数 destination.port
属性タイプ int
サポートされている演算子 , , , , ,
詳細

変数 destination.port は、内部 TCP ポート番号を識別します。

true if the destination port is 21: を返します。


destination.port == 21

Returns true if the destination port is less than 3001:


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(
  schemes: list<string>
)
  bool

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

パラメータ
schemes: リクエストの影響を受けるロード バランシング スキーム。

以下のいずれかを返します。

  • リクエストが転送ルールを作成していない場合は、true を返します。
  • リクエストが転送ルールを作成している場合、転送ルールが INTERNALINTERNAL_MANAGED、または INTERNAL_SELF_MANAGED のロード バランシング スキームに影響を与える場合にのみ、true を返します。

!compute.isForwardingRuleCreationOperation() || (
  compute.isForwardingRuleCreationOperation() &&
  compute.matchLoadBalancingSchemes([
    'INTERNAL', 'INTERNAL_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
属性タイプ string
サポートされる関数と演算子 , startsWith(), endsWith()
詳細 この属性で 演算子を使用することはおすすめしません。request.path != "/admin" のように不等式で確認するのではなく、!request.path.startsWith("/admin") のように属性の接頭辞を確認します。接頭辞を確認して、/admin 階層内の URL パス(/admin/payroll/ など)も保護します。

リクエストパスが指定された URL パスと等しい場合、true を返します。


request.path == "/admin"

request.path == "/admin/payroll"

リクエストパスが指定された URL パスで始まる場合に true を返します。


request.path.startsWith("/admin")

リクエストパスが指定された URL パスで終わる場合、true を返します。


request.path.endsWith("/payroll.js")
サポートされるリソースタイプ
  • Identity-Aware Proxy アプリのサービス バージョン(App Engine): Identity-Aware Proxy を使用して App Engine または Compute Engine で実行されているウェブ アプリケーションへのアクセスをリクエストする場合に使用できます。
  • Cloud Run サービス

request.host 属性

属性の変数 request.host
属性タイプ string
サポートされる関数と演算子 , endsWith()
詳細 この属性とともに .startsWith() 関数または 演算子を使用することはおすすめしません。これらの関数と演算子を使用すると、予期しない結果が生じる可能性があります。

ホスト名が指定された値と等しい場合、true を返します。


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

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

ホスト名が指定された値で終わる場合、true を返します。


request.host.endsWith("example.com")
サポートされるリソースタイプ
  • Identity-Aware Proxy アプリのサービス バージョン(App Engine): Identity-Aware Proxy を使用してアプリサービスのバージョンへのアクセスをリクエストする場合に使用できます。
  • Cloud Run サービス

属性から値を抽出する

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

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

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

  • 識別子は、中かっこで囲まれ、抽出する部分文字列を示します。

    どのような値を抽出するかがわかるように、意味のある短い識別子にします。A から Z までの大文字と小文字、数字、アンダースコア(_)を使用できます。

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

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

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

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

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

extract() 関数が属性から抽出する部分は、抽出テンプレートに接頭辞、接尾辞、またはその両方があるかどうかによって異なります。

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

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

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

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

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