このドキュメントでは、条件式でサポートされる属性について説明します。
サポートされている条件の属性
以下のセクションでは、サポートされる属性の概要と、どの Google Cloud サービスがそれぞれの属性を認識するかについて説明します。
リソースの属性
次の属性は、リクエストの対象のリソースに関連しています。
属性 | 使用方法 | サポートされる Google Cloud サービス |
---|---|---|
リソース サービス属性 |
使用する Google Cloud サービスに基づいてアクセスを管理します。 この属性は、許可ポリシーのロール バインディングで使用できます。 |
|
リソースタイプ属性 |
リソースタイプに基づいてアクセスを管理します。 この属性は、許可ポリシーのロール バインディングで使用できます。 |
|
リソース名属性 |
リソースの名前に基づいてアクセスを管理します。 この属性は、許可ポリシーのロール バインディングで使用できます。 |
|
リソースタグ |
リソースに付加されたタグに基づいてアクセスを管理します。 この属性は次の場所で使用できます。
|
すべての Google Cloud サービス(継承条件のサポートをご覧ください) |
リソースの属性の詳細については、このページのリソースの属性をご覧ください。
プリンシパルの属性
次の属性は、リクエストを行うプリンシパルに関連します。
属性 | 使用方法 | サポートされているプリンシパル タイプ |
---|---|---|
リクエストのプリンシパル タイプに基づいてポリシーを適用します。 この属性は、プリンシパル アクセス境界ポリシーのポリシー バインディングで使用できます。 |
|
|
リクエスト内のプリンシパルの ID に基づいてポリシーを適用します。 この属性は、プリンシパル アクセス境界ポリシーのポリシー バインディングで使用できます。 |
|
プリンシパルの属性の詳細については、このページのプリンシパルの属性をご覧ください。
リクエストの属性
次の属性は、リクエストの詳細に関連しています。
属性 | 使用方法 | サポートされる Google Cloud サービス |
---|---|---|
特定のアクセスレベルに基づいてアクセスを管理します。
アクセスレベルは、リクエストとリクエスト元に関する未加工の属性(送信元の IP アドレス、デバイス属性、時間帯など)に基づいて計算された属性です。たとえば、 この属性は、許可ポリシーのロール バインディングで使用できます。 |
Identity-Aware Proxy |
|
Google Cloud の特定の API またはサービスから提供されるデータに基づいて、アクセスを管理します。 この属性は、許可ポリシーのロール バインディングで使用できます。 |
|
|
Google Cloud リソースへの有効期限のあるアクセス権、スケジュール済みアクセス権、または期間限定のアクセス権を設定します。 これらの属性は、許可ポリシーのロール バインディングで使用できます。 |
すべての Google Cloud サービス(継承条件のサポートをご覧ください) |
|
宛先 IP アドレスやリクエストのポートに基づいてアクセスを管理します。たとえば、Compute Engine の仮想マシン(VM)インスタンスでは、外部 IP( Identity-Aware Proxy TCP 転送に使用されます。 これらの属性は、許可ポリシーのロール バインディングで使用できます。 |
Identity-Aware Proxy |
|
プリンシパルが作成できる転送ルールのタイプを指定します。たとえば、内部 Google Cloud ロードバランサ用の転送ルールの作成を許可し、外部 Google Cloud ロードバランサ用のルール作成は許可しないように設定します。この設定では、プリンシパルは、Google Cloud ネットワーク内で発生するトラフィックには転送ルールを作成できますが、インターネットから発生するトラフィックには転送ルールを作成できません。 これらの属性は、許可ポリシーのロール バインディングで使用できます。 |
|
|
リクエストの URL パスやホストに基づいてアクセスを管理します。たとえば、条件で、 これらの属性は、許可ポリシーのロール バインディングで使用できます。 |
|
リクエストの属性の詳細については、このページのリクエストの属性をご覧ください。
条件の継承のサポート
一部のタイプの 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
属性は、許可ポリシーのロール バインディングで使用できます。
属性の変数 | resource.service |
---|---|
属性タイプ |
サポートされている値の一覧については、リソース サービスの値をご覧ください。 |
サポートされている演算子 | , |
詳細 |
条件で resource.type 属性を使用する場合は、属性と一致するのか( )一致しないのか( )を確認してください。接頭辞や接尾辞のチェックなどの他の比較では、予期しない結果が生じることがあります。 |
例 |
Compute Engine リソースの場合は resource.service == "compute.googleapis.com" |
サポート対象のサービス |
|
resource.type 属性
resource.type
属性では、リソースのタイプに基づいて条件を設定できます。たとえば、タイプ storage.googleapis.com/Object
のリソースに対するユーザーのアクセスを制限する条件を設定できます。サポートされている値の一覧については、リソースタイプの値をご覧ください。
条件で resource.name
属性を使用する場合は、resource.type
属性を使用して、条件を適用するリソースタイプを管理することを強くおすすめします。詳細については、このページの resource.name
属性をご覧ください。
resource.type
属性は、許可ポリシーのロール バインディングで使用できます。
属性の変数 | resource.type |
||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
属性タイプ |
サポートされている値の一覧については、リソースタイプの値をご覧ください。 |
||||||||||||||||||||||||||||||||||||||||||||||
サポートされている演算子 | , |
||||||||||||||||||||||||||||||||||||||||||||||
詳細 |
条件で resource.type 属性を使用する場合は、属性と一致するのか( )一致しないのか( )を確認してください。接頭辞や接尾辞のチェックなどの他の比較では、予期しない結果が生じることがあります。 |
||||||||||||||||||||||||||||||||||||||||||||||
例 |
リソースが Compute Engine イメージでない限り、 resource.type != "compute.googleapis.com/Image"
リソースが Compute Engine イメージまたは永続ディスクである場合にのみ、 (resource.type == "compute.googleapis.com/Image" || resource.type == "compute.googleapis.com/Disk") |
||||||||||||||||||||||||||||||||||||||||||||||
サポートされるリソースタイプ |
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 |
||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
属性タイプ |
各リソースタイプは、リソース名に特定の形式を使用します。形式のリストについては、リソース名の形式をご覧ください。 |
||||||||||||||||||||||||||||||||||||||||||
サポートされる関数と演算子 |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||||||||||||||||||||||||||||
詳細 |
|
||||||||||||||||||||||||||||||||||||||||||
例 |
リソース名が resource.name != "projects/_/buckets/secret-bucket-123"
リソース名が指定された接頭辞で始まる場合は、Compute Engine VM インスタンスで使用されている形式で resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
リソース名が指定された接頭辞で始まる場合は、Cloud Storage バケットで使用されている形式で resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
リソース名が指定された接尾辞で終わる場合、 resource.name.endsWith(".jpg") プロジェクト名または番号が存在する場合は、それを返します。 resource.name.extract("projects/{project}/") |
||||||||||||||||||||||||||||||||||||||||||
サポートされるリソースタイプ |
|
リソースタグ
リソースタグの関数を使用すると、リソースに適用されているタグ、またはリソースによって継承されるタグに基づいて条件を設定できます。たとえば、タグ env: prod
が適用されているリソースのみのロールを付与する条件を設定できます。タグによるアクセス制御の詳細については、タグとアクセス制御をご覧ください。
各タグはキーと値で構成されます。キーと値ごとに、異なるタイプの識別子がいくつかあります。
-
永続 ID。グローバルに一意であり、再利用できません。たとえば、タグキーに永続 ID
tagKeys/123456789012
を割り当て、タグ値に永続 IDtagValues/567890123456
を持たせることができます。 -
略称。各キーの略称は、キーが定義されているプロジェクトまたは組織内で一意である必要があり、各値の略称は、関連付けられているキーに対して一意である必要があります。たとえば、タグキーに略称
env
を指定し、タグ値にprod
という略称を付けることができます。 -
名前空間名。組織の数値 ID またはプロジェクト ID をタグキーの略称に追加します。たとえば、組織用に作成されたタグキーに名前空間名
123456789012/env
を指定できます。組織 ID を取得する方法については、組織リソース ID の取得をご覧ください。プロジェクト用に作成されたタグキーには、名前空間名myproject/env
を指定できます。プロジェクト ID を取得する方法については、プロジェクトの識別をご覧ください。
条件で使用する ID の種類を選択する方法については、タグの定義と ID をご覧ください。
タグベースの条件を使用して、任意のリソースへのアクセスに条件を設定できます。これには、独自のタグを持つリソースと、他のリソースからタグを継承するリソースが含まれます。リソース階層でタグが継承される仕組みの詳細については、タグの継承をご覧ください。
タグベースの条件は、次のものに使用できます。
- 許可ポリシーのロール バインディング
- 拒否ポリシーの拒否ルール
以下の関数を使用して、タグに基づいて条件を設定できます。
関数 | 説明 |
---|---|
resource.hasTagKey(
bool
|
リクエストのリソースが、指定されたキーのタグを持つかどうかをチェックします。タグキーは、その名前空間名で調べることができます。永続 ID を使用してタグキーを確認するには、関数
|
resource.hasTagKeyId(
bool
|
リクエストのリソースが、指定されたキーのタグを持つかどうかをチェックします。永続 ID で、タグキーの検索を行います。名前空間名を使用してタグキーを確認するには、関数
|
resource.matchTag(
bool
|
リクエストのリソースに、指定されたリソースと値を含むタグが存在するかどうかを確認します。名前空間名でキーの検索が行われ、省略名で値が検索されます。永続 ID を使用してタグキーと値を確認するには、関数
|
resource.matchTagId(
bool
|
リクエストのリソースに、指定されたリソースと値を含むタグが存在するかどうかを確認します。キーと値は、永続 ID を使用して検索されます。名前空間名を使用してタグキー、略称を使用して値を確認するには、関数
|
プリンシパルの属性
プリンシパルの属性を使用すると、リクエストを発行したプリンシパルに基づいて条件を記述できます。これらの属性を使用すると、ポリシーが適用されるプリンシパルを絞り込むことができます。
プリンシパル アクセス境界ポリシーのポリシー バインディングでプリンシパルの属性を使用できます。
principal.type
属性
principal.type
属性を使用すると、リクエストを発行するプリンシパルのタイプに基づいて条件を設定できます。たとえば、プリンシパル アクセス境界ポリシーのポリシー バインディングに条件を追加して、ポリシーがサービス アカウントにのみ適用されるようにできます。
プリンシパル アクセス境界ポリシーのポリシー バインディングでプリンシパルの属性を使用できます。
属性の変数 | principal.type |
---|---|
属性タイプ |
|
サポートされている演算子 | , , in |
サポートされているプリンシパル タイプ |
|
例 |
リクエストのプリンシパルがサービス アカウントの場合は、 principal.type == "iam.googleapis.com/ServiceAccount"
リクエストのプリンシパルが Google Workspace ID または Workforce Identity プール ID の場合は、 principal.type in ["iam.googleapis.com/WorkspaceIdentity", "iam.googleapis.com/WorkforcePoolIdentity"] |
principal.subject
属性
principal.subject
属性を使用すると、リクエストを発行するプリンシパルに基づいて条件を設定できます。たとえば、プリンシパル アクセス境界ポリシーのポリシー バインディングに条件を追加して、メールアドレスの末尾が @example.com
のプリンシパルに対してのみポリシーを適用するように設定できます。
条件で principal.subject
属性を使用する場合は、principal.type
属性も使用して、条件が適用されるプリンシパル タイプを制御することをおすすめします。これは、プリンシパル ID がプリンシパル タイプ間で必ずしも一意ではないためです。たとえば、ID example-user@example.com
は、Google アカウントまたは Workforce Identity プールのユーザーを識別できます。
principal.subject
属性に加えて principal.type
属性を使用すると、条件が目的のタイプのプリンシパルにのみ一致するようにすることができます。たとえば、次の式は、メールアドレスが @example.com
で終わる Google アカウントに一致します。
principal.type == 'iam.googleapis.com/WorkspaceIdentity' &&
principal.subject.endsWith('@example.com')
プリンシパル アクセス境界ポリシーのポリシー バインディングでプリンシパルの属性を使用できます。
属性の変数 | principal.subject |
---|---|
属性タイプ |
|
サポートされている演算子 |
|
サポートされているプリンシパル サブジェクト |
|
例 |
リクエストのプリンシパルが principal.subject.endsWith("@example.com")
リクエストのプリンシパルが principal.subject == "example-service-account@example-project.iam.gserviceaccount.com" |
リクエストの属性
リクエストの属性では、アクセスレベル、日時、宛先 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 |
詳細 |
リクエストが特定のアクセスレベルを満たしているかどうかを確認するには、 ACCESS_LEVEL_FULL_NAME in request.auth.access_levels アクセスレベルの完全な名前は次の形式になります。 accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL |
例 |
リクエストが "accessPolicies/199923665455/accessLevels/CorpNet" in request.auth.access_levels |
サポートされるリソースタイプ | Identity-Aware Proxy を使用して、トンネル インスタンス、トンネル宛先グループ、Google Cloud Load Balancing で実行されているウェブ アプリケーション、または App Engine で実行されているウェブ アプリケーションにアクセスするリクエストに対して使用できます。 |
API 属性
API 属性は、Google Cloud の特定の API またはサービスから提供されるデータに基づいてアクセスを管理するのに役立ちます。API 属性は、許可ポリシーのロール バインディングで使用できます。
たとえば、Cloud Storage を使用してバケット内のオブジェクトを一覧表示する場合に、リクエストの prefix
パラメータを使用して、名前が特定の接頭辞で始まるオブジェクトだけが含まれるよう指定できます。認証情報のアクセス境界を使用して有効期限の短い認証情報の範囲を限定する場合は、権限を制限する認証情報のアクセス境界を作成し、API 属性 storage.googleapis.com/objectListPrefix
を確認してオブジェクトのリストを取得できます。この API 属性には、リクエストの prefix
パラメータの値が含まれます。
条件で API 属性を使用する必要がある場合の例については、次のページをご覧ください。
すべてのサービスが API 属性を認識するわけではありません。以降のセクションでは、各 API 属性を認識するサービスを示します。
API 属性の関数
次の関数を使用して、API 属性を操作できます。
関数 | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
api.getAttribute(
V<T>
|
リクエストされた API 属性を取得します。
|
||||||||||||
hasOnly(
bool |
リストに含まれるのが許可された項目またはそのサブセットのみであることを確認します。
|
Cloud Storage API の属性
Cloud Storage には、次の API 属性があります。
属性の変数 | storage.googleapis.com/objectListPrefix |
---|---|
属性タイプ | string |
詳細 |
バケット内のオブジェクトを一覧表示するリクエストの場合、リクエストの 他のタイプのリクエストでは、属性は定義されません。 |
この属性を認識するサービス | Cloud Storage |
IAM API 属性
IAM では、次の API 属性を使用できます。
属性の変数 | iam.googleapis.com/modifiedGrantsByRole |
---|---|
属性タイプ | list<string> |
詳細 |
リソースの許可ポリシーを設定するリクエストの場合、この属性には、リクエストによって変更されるロール バインディングのロール名が含まれます。 他のタイプのリクエストでは、属性は定義されません。 |
この属性を受け入れるリソースタイプ |
次のリソースは、許可ポリシーの
|
この属性を認識するサービス |
次のサービスは
|
日時属性
日時属性は、Google Cloud リソースに対する有効期限のあるアクセス権、スケジュール済みアクセス権、または期間限定のアクセス権を設定するために使用します。日時属性は、許可ポリシーのロール バインディングで使用できます。
この属性は、すべての Google Cloud サービスとリソースタイプでサポートされています。日時条件を直接サポートしていないリソースに日時条件を適用する方法については、このページの継承された条件のサポートをご覧ください。
request.time
属性には、リクエストのタイムスタンプが含まれます。このタイムスタンプは、別のタイムスタンプまたは期間と比較できます。
以降のセクションでは、タイムスタンプと期間に基づいて条件を設定するために使用できる関数を示します。
タイムスタンプと期間の作成、比較、変更を行う
関数または演算子 | 説明 |
---|---|
date(
Timestamp |
日付を
|
duration(
Duration |
時間を
|
timestamp(
Timestamp |
|
, , , |
2 つの
|
|
|
タイムスタンプから情報を抽出する
このセクションの関数では、タイムスタンプから情報(タイムスタンプが該当する曜日など)を抽出できます。
IAM Conditions では、すべてのタイムスタンプが UTC で示されます。ただし、別のタイムゾーンに基づいて情報を抽出することもできます。たとえば、UTC タイムスタンプがドイツのベルリンのタイムゾーンの月曜日に該当するかどうかを確認できます。
別のタイムゾーンを指定するには、タイムゾーンを関数に渡します。IETF タイムゾーン データベースの名前または UTC オフセットを使用します。たとえば、中央ヨーロッパ時間(CET)の場合は Europe/Berlin
または +01:00
を使用します。
サポートされる関数と演算子 | 説明 |
---|---|
Timestamp.getDate(
int
|
|
Timestamp.getDayOfMonth(
int
|
|
Timestamp.getDayOfWeek(
int
|
|
Timestamp.getDayOfYear(
int
|
|
Timestamp.getFullYear(
int
|
|
Timestamp.getHours(
int
|
この関数を
|
Timestamp.getMilliseconds(
int
|
|
Timestamp.getMinutes(
int
|
|
Timestamp.getMonth(
int
|
|
Timestamp.getSeconds(
int
|
|
, , , |
この表の 2 つの関数の出力を比較します。 |
宛先 IP / ポート属性
宛先 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 |
サポートされている演算子 | , |
詳細 |
変数 |
例 |
宛先 IP アドレスが destination.ip == "10.0.0.1"
宛先 IP アドレスが destination.ip != "10.0.0.1" |
サポートされるリソースタイプ | Identity-Aware Proxy を使用してトンネル インスタンスにアクセスするリクエストで使用可能 |
destination.port 属性
属性の変数 | destination.port |
---|---|
属性タイプ | int |
サポートされている演算子 | , , , , , |
詳細 |
変数 |
例 |
宛先ポートが destination.port == 21
宛先ポートが destination.port < 3001 |
サポートされるリソースタイプ | Identity-Aware Proxy を使用してトンネル インスタンスにアクセスするリクエストで使用可能 |
転送ルールの属性
転送ルールの属性を使用すると、プリンシパルが作成できる転送ルールのタイプを指定できます。たとえば、内部 Google Cloud ロードバランサ用の転送ルールの作成を許可し、外部 Google Cloud ロードバランサ用のルール作成は許可しないように設定します。この設定では、プリンシパルは、Google Cloud ネットワーク内で発生するトラフィックには転送ルールを作成できますが、インターネットから発生するトラフィックには転送ルールを作成できません。許可ポリシーのロール バインディングで転送ルールの属性を使用できます。
Cloud Load Balancing の場合、転送ルール属性は、バックエンド サービス、ターゲット プロキシ、ヘルスチェック、URL マップなど、Google Cloud ロードバランサの他のコンポーネントを作成する機能には影響しません。
サポートされる関数
関数 | 説明 |
---|---|
compute.isForwardingRule
bool
|
リクエストが転送ルールを作成しているかどうかを確認します。
|
compute.matchLoad
bool
|
指定されたタイプのロード バランシング スキームに、リクエストが影響するかどうかを確認します。各ロード バランシング スキームの識別子と詳細については、Google Cloud ロードバランサでの IAM Conditions の使用をご覧ください。
|
サポートされるリソースタイプ
この属性は、次のリソースタイプを作成するリクエストで使用できます。
サービス | リソースタイプ |
---|---|
Cloud Load Balancing | 転送ルール |
Cloud VPN | 転送ルール(グローバルとリージョン) |
Compute Engine | 転送ルール(プロトコル転送用) |
Cloud Service Mesh1 | 転送ルール |
1 Compute Engine のリソース属性を使用します。
URL パス / ホスト属性
URL パス / ホスト属性を使用すると、リクエストの URL パスやホストに基づいてアクセスを管理できます。たとえば、条件によって、https://example.com
がユーザーの一般的なドメインからアクセスできるメイン アプリケーションであり、https://hr.example.com/admin
がアプリケーション内の人事管理者のみがアクセスできるページにアクセスするために使用されることを指定します。
URL パス / ホスト属性は、許可ポリシーのロール バインディングで使用できます。
request.path 属性
属性の変数 | request.path |
---|---|
属性タイプ | string |
サポートされる関数と演算子 | , startsWith(), endsWith() |
詳細 |
この属性で 演算子を使用することはおすすめしません。request.path != "/admin" のように不等式で確認するのではなく、!request.path.startsWith("/admin") のように属性の接頭辞を確認します。接頭辞を確認して、/admin 階層内の URL パス(/admin/payroll/ など)も保護します。 |
例 |
リクエストパスが指定された URL パスと等しい場合、 request.path == "/admin" request.path == "/admin/payroll"
リクエストパスが指定された URL パスで始まる場合に request.path.startsWith("/admin")
リクエストパスが指定された URL パスで終わる場合、 request.path.endsWith("/payroll.js") |
サポートされるリソースタイプ |
|
request.host 属性
属性の変数 | request.host |
---|---|
属性タイプ | string |
サポートされる関数と演算子 | , endsWith() |
詳細 |
この属性とともに .startsWith() 関数または 演算子を使用することはおすすめしません。これらの関数と演算子を使用すると、予期しない結果が生じる可能性があります。 |
例 |
ホスト名が指定された値と等しい場合、 request.host == "www.example.com" request.host == "hr.example.com"
ホスト名が指定された値で終わる場合、 request.host.endsWith("example.com") |
サポートされるリソースタイプ |
|
属性から値を抽出する
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={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/ |
/orders/{none}/order_date= |
空の string |
/orders/order_date=2019-11-03/ |
空の string |
日付を表す文字列を抽出する場合は、このページの日時関数と演算子を使用して抽出された値を Timestamp
に変換できます。例については、リソースベースのアクセスの構成をご覧ください。