IAM Conditions 属性のリファレンス

このドキュメントでは、条件式でサポートされる属性について説明します。

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

以降のセクションでは、サポートされている属性の概要と、各属性を認識するTrusted Cloud by S3NS サービスについて説明します。

リソースの属性

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

属性 使用方法 サポート対象の Trusted Cloud サービス
リソース サービス属性

使用する Trusted Cloud サービスに基づいてアクセスを管理します。

この属性は、許可ポリシーのロール バインディングで使用できます。

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager
リソースタイプ属性

リソースタイプに基づいてアクセスを管理します。

この属性は、許可ポリシーのロール バインディングで使用できます。

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager
リソース名属性

リソースの名前に基づいてアクセスを管理します。

この属性は、許可ポリシーのロール バインディングで使用できます。

  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
リソースタグ

リソースに付加されたタグに基づいてアクセスを管理します。

この属性は次の場所で使用できます。

  • 許可ポリシーのロール バインディング
  • 拒否ポリシーの拒否ルール

すべての Trusted Cloud サービス(継承条件のサポートをご覧ください)

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

リクエストの属性

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

属性 使用方法 サポート対象の Trusted Cloud サービス

API 属性

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

この属性は、許可ポリシーのロール バインディングで使用できます。

  • Cloud Key Management Service
  • Cloud Storage
  • Compute Engine
  • Identity and Access Management
  • Resource Manager

日時属性

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

これらの属性は、許可ポリシーのロール バインディングで使用できます。

すべての Trusted Cloud サービス(継承条件のサポートをご覧ください)

転送ルールの属性

プリンシパルが作成できる転送ルールのタイプを指定します。たとえば、 Trusted Cloud ネットワーク内で発生するトラフィックを処理する内部 Trusted Cloud by S3NS ロードバランサの転送ルールの作成をプリンシパルに許可し、インターネットから発生するトラフィックを処理する外部 Trusted Cloud ロードバランサの転送ルールの作成は許可しないように設定します。

これらの属性は、許可ポリシーのロール バインディングで使用できます。

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

条件の継承のサポート

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

組織、フォルダ、プロジェクト レベルで属性を使用する場合、ほとんどの属性は特定のリソースタイプに対してのみ使用できることに注意してください。利用できない属性を条件の一部が使用している場合、条件のその部分はアクセス権の付与として解釈されなくなります。たとえば、IAM リソースはリソース名を提供しないため、条件 resource.name.endsWith == devResource は IAM リソースにアクセス権を付与しません。

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

resource.type != 'compute.googleapis.com/Disk' ||
    resource.name.endsWith('devResource')

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

リソースの属性

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

resource.service 属性

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

resource.service 属性は、許可ポリシーのロール バインディングで使用できます。

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

string

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

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

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

resource.service == "compute.googleapis.com"
サポート対象のサービス
  • BigQuery
  • BigQuery Reservation API
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager

resource.type 属性

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

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

resource.type 属性は、許可ポリシーのロール バインディングで使用できます。

属性の変数 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")
サポートされるリソースタイプ
BigQuery
  • データセット
  • モデル
  • ルーティン
  • テーブル
BigQuery Reservation API
  • アサインメント
  • BI 予約
  • 容量コミットメント
  • ロケーション
  • 予約
Cloud Key Management Service
  • 暗号鍵バージョン
  • 暗号鍵
  • キーリング
  • ロケーション
Cloud Logging
  • ログバケット
  • ログビュー
Cloud SQL
  • バックアップ実行
  • インスタンス
Cloud Storage
  • バケット
  • マネージド フォルダ
  • オブジェクト
Compute Engine
  • バックエンド サービス(グローバルとリージョン)
  • ファイアウォール
  • 転送ルール(グローバルとリージョン)
  • イメージ
  • インスタンス テンプレート
  • インスタンス
  • 永続ディスク(リージョンとゾーン)
  • スナップショット
  • ターゲット HTTP(S) プロキシ(グローバルとリージョン)
  • ターゲット SSL プロキシ
  • ターゲット TCP プロキシ
Trusted Cloud by S3NS
  • ロケーション1
Google Kubernetes Engine
  • クラスタ
Firestore
  • データベース
Resource Manager
  • プロジェクト

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 属性は、許可ポリシーのロール バインディングで使用できます。

属性の変数 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}/")
サポートされるリソースタイプ
BigQuery
  • データセット
  • モデル
  • ルーティン
  • テーブル
BigQuery Reservation API
  • アサインメント
  • BI 予約
  • 容量コミットメント
  • ロケーション
  • 予約
Cloud Key Management Service
  • 暗号鍵
  • 暗号鍵バージョン
  • キーリング
Cloud Logging
  • ログバケット
  • ログビュー
Cloud SQL
  • バックアップ実行
  • インスタンス
Cloud Storage
  • バケット
  • マネージド フォルダ
  • オブジェクト
Compute Engine
  • バックエンド サービス(グローバルとリージョン)
  • ファイアウォール
  • 転送ルール(グローバルとリージョン)
  • イメージ
  • インスタンス テンプレート
  • インスタンス
  • 永続ディスク(リージョンとゾーン)
  • スナップショット
  • ターゲット HTTP(S) プロキシ(グローバルとリージョン)
  • ターゲット SSL プロキシ
  • ターゲット TCP プロキシ
Google Kubernetes Engine
  • クラスタ

リソースタグ

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

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

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

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

タグベースの条件を使用して、任意のリソースへのアクセスに条件を設定できます。これには、独自のタグを持つリソースと、他のリソースからタグを継承するリソースが含まれます。リソース階層でタグが継承される仕組みの詳細については、タグの継承をご覧ください。

ただし、 Trusted Cloud コンソールの特定の領域では、タグベースの条件を含む許可ポリシーのロール バインディングが認識されません。そのため、タグベースの条件を含むロールがあると、 Trusted Cloud コンソールで特定のアクションが誤って禁止される可能性があります。この問題が発生した場合は、gcloud CLI などの別の方法を使用してアクションを実行します。

タグベースの条件は、次のものに使用できます。

  • 許可ポリシーのロール バインディング
  • 拒否ポリシーの拒否ルール

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

関数 説明
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')

リクエストの属性

リクエストの属性では、リクエストによって変更されたロールやリクエストの日時など、リクエストの詳細情報を評価する条件を作成できます。

API 属性

API 属性は、Trusted Cloud の特定の API またはサービスから提供されるデータに基づいてアクセスを管理するのに役立ちます。API 属性は、許可ポリシーのロール バインディングで使用できます。

条件で 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 などのプレースホルダ文字列を使用できます。

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

    • ロールの付与または取り消しのリクエストの場合、リクエストによって変更されたロールのリストを返します。
    • 他のすべてのタイプのリクエストでは、空のリストが返されます。
    api.getAttribute("iam.googleapis.com/modifiedGrantsByRole", [])
    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 つのロールは登録されていません。

    IAM API 属性

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

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

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

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

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

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

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

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

    • Cloud Key Management Service
    • Cloud Storage
    • Compute Engine
    • Identity and Access Management
    • Resource Manager

    日時属性

    日時属性は、 Trusted Cloud リソースに対する有効期限のあるアクセス権、スケジュール済みアクセス権、または期間限定のアクセス権を設定するために使用します。日時属性は、許可ポリシーのロール バインディングで使用できます。

    この属性は、すべての Trusted 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 つの関数の出力を比較します。

    転送ルールの属性

    転送ルールの属性を使用すると、プリンシパルが作成できる転送ルールのタイプを指定できます。たとえば、 Trusted Cloud ネットワーク内で発生するトラフィックを処理する内部 Trusted Cloud by S3NSロードバランサの転送ルールの作成をプリンシパルに許可し、インターネットから発生するトラフィックを処理する外部 Trusted Cloudロードバランサの転送ルールの作成は許可しないように設定します。許可ポリシーのロール バインディングで転送ルールの属性を使用できます。

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

    サポートされる関数

    関数 説明
    compute.isForwardingRuleCreationOperation()   bool

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

    compute.matchLoadBalancingSchemes() の例をご覧ください。
    compute.matchLoadBalancingSchemes(
      schemes: list<string>
    )
      bool

    指定されたタイプのロード バランシング スキームに、リクエストが影響するかどうかを確認します。各ロード バランシング スキームの識別子と詳細については、 Trusted 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 転送ルール(プロトコル転送用)
    Cloud Service Mesh1 転送ルール

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

    属性から値を抽出する

    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 に変換できます。例については、リソースベースのアクセスの構成をご覧ください。