// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.cloud.asset.v1p4beta1; import "google/iam/v1/policy.proto"; import "google/rpc/code.proto"; import "google/api/annotations.proto"; option cc_enable_arenas = true; option csharp_namespace = "Google.Cloud.Asset.V1P4Beta1"; option go_package = "google.golang.org/genproto/googleapis/cloud/asset/v1p4beta1;asset"; option java_multiple_files = true; option java_outer_classname = "AssetProto"; option java_package = "com.google.cloud.asset.v1p4beta1"; option php_namespace = "Google\\Cloud\\Asset\\V1p4beta1"; // IAM Policy analysis result, consisting of one IAM policy binding and derived // access control lists. message IamPolicyAnalysisResult { // Represents analysis state of each node in the result graph or non-critical // errors in the response. message AnalysisState { // The Google standard error code that best describes the state. // For example: // - OK means the node has been successfully explored; // - PERMISSION_DENIED means an access denied error is encountered; // - DEADLINE_EXCEEDED means the node hasn't been explored in time; google.rpc.Code code = 1; // The human-readable description of the cause of failure. string cause = 2; } // A GCP resource that appears in an access control list. message Resource { // The [full resource name](https://aip.dev/122#full-resource-names). string full_resource_name = 1; // The analysis state of this resource node. AnalysisState analysis_state = 2; } // A role or permission that appears in an access control list. message Access { oneof oneof_access { // The role. string role = 1; // The permission. string permission = 2; } // The analysis state of this access node. AnalysisState analysis_state = 3; } // A directional edge. message Edge { // The source node of the edge. string source_node = 1; // The target node of the edge. string target_node = 2; } // An identity that appears in an access control list. message Identity { // The identity name in any form of members appear in // [IAM policy // binding](https://cloud.google.com/iam/reference/rest/v1/Binding), such // as: // - user:foo@google.com // - group:group1@google.com // - serviceAccount:s1@prj1.iam.gserviceaccount.com // - projectOwner:some_project_id // - domain:google.com // - allUsers // - etc. string name = 1; // The analysis state of this identity node. AnalysisState analysis_state = 2; } // An access control list, derived from the above IAM policy binding, which // contains a set of resources and accesses. May include one // item from each set to compose an access control entry. // // NOTICE that there could be multiple access control lists for one IAM policy // binding. The access control lists are created based on resource and access // combinations. // // For example, assume we have the following cases in one IAM policy binding: // - Permission P1 and P2 apply to resource R1 and R2; // - Permission P3 applies to resource R2 and R3; // // This will result in the following access control lists: // - AccessControlList 1: [R1, R2], [P1, P2] // - AccessControlList 2: [R2, R3], [P3] message AccessControlList { // The resources that match one of the following conditions: // - The resource_selector, if it is specified in request; // - Otherwise, resources reachable from the policy attached resource. repeated Resource resources = 1; // The accesses that match one of the following conditions: // - The access_selector, if it is specified in request; // - Otherwise, access specifiers reachable from the policy binding's role. repeated Access accesses = 2; // Resource edges of the graph starting from the policy attached // resource to any descendant resources. The [Edge.source_node][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.Edge.source_node] contains // the full resource name of a parent resource and [Edge.target_node][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.Edge.target_node] // contains the full resource name of a child resource. This field is // present only if the output_resource_edges option is enabled in request. repeated Edge resource_edges = 3; } message IdentityList { // Only the identities that match one of the following conditions will be // presented: // - The identity_selector, if it is specified in request; // - Otherwise, identities reachable from the policy binding's members. repeated Identity identities = 1; // Group identity edges of the graph starting from the binding's // group members to any node of the [identities][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.IdentityList.identities]. The [Edge.source_node][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.Edge.source_node] // contains a group, such as "group:parent@google.com". The // [Edge.target_node][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.Edge.target_node] contains a member of the group, // such as "group:child@google.com" or "user:foo@google.com". // This field is present only if the output_group_edges option is enabled in // request. repeated Edge group_edges = 2; } // The full name of the resource to which the [iam_binding][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.iam_binding] policy attaches. string attached_resource_full_name = 1; // The Cloud IAM policy binding under analysis. google.iam.v1.Binding iam_binding = 2; // The access control lists derived from the [iam_binding][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.iam_binding] that match or // potentially match resource and access selectors specified in the request. repeated AccessControlList access_control_lists = 3; // The identity list derived from members of the [iam_binding][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.iam_binding] that match or // potentially match identity selector specified in the request. IdentityList identity_list = 4; // Represents whether all nodes in the transitive closure of the // [iam_binding][google.cloud.asset.v1p4beta1.IamPolicyAnalysisResult.iam_binding] node have been explored. bool fully_explored = 5; }