// Copyright 2024 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.securitycenter.v2;

option csharp_namespace = "Google.Cloud.SecurityCenter.V2";
option go_package = "cloud.google.com/go/securitycenter/apiv2/securitycenterpb;securitycenterpb";
option java_multiple_files = true;
option java_outer_classname = "AccessProto";
option java_package = "com.google.cloud.securitycenter.v2";
option php_namespace = "Google\\Cloud\\SecurityCenter\\V2";
option ruby_package = "Google::Cloud::SecurityCenter::V2";

// Represents an access event.
message Access {
  // Associated email, such as "foo@google.com".
  //
  // The email address of the authenticated user or a service account acting on
  // behalf of a third party principal making the request. For third party
  // identity callers, the `principal_subject` field is populated instead of
  // this field. For privacy reasons, the principal email address is sometimes
  // redacted. For more information, see [Caller identities in audit
  // logs](https://cloud.google.com/logging/docs/audit#user-id).
  string principal_email = 1;

  // Caller's IP address, such as "1.1.1.1".
  string caller_ip = 2;

  // The caller IP's geolocation, which identifies where the call came from.
  Geolocation caller_ip_geo = 3;

  // Type of user agent associated with the finding. For example, an operating
  // system shell or an embedded or standalone application.
  string user_agent_family = 4;

  // The caller's user agent string associated with the finding.
  string user_agent = 5;

  // This is the API service that the service account made a call to, e.g.
  // "iam.googleapis.com"
  string service_name = 6;

  // The method that the service account called, e.g. "SetIamPolicy".
  string method_name = 7;

  // A string that represents the principal_subject that is associated with the
  // identity. Unlike `principal_email`, `principal_subject` supports principals
  // that aren't associated with email addresses, such as third party
  // principals. For most identities, the format is
  // `principal://iam.googleapis.com/{identity pool name}/subject/{subject}`.
  // Some GKE identities, such as GKE_WORKLOAD, FREEFORM, and GKE_HUB_WORKLOAD,
  // still use the legacy format `serviceAccount:{identity pool
  // name}[{subject}]`.
  string principal_subject = 8;

  // The name of the service account key that was used to create or exchange
  // credentials when authenticating the service account that made the request.
  // This is a scheme-less URI full resource name. For example:
  //
  // "//iam.googleapis.com/projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}".
  //
  string service_account_key_name = 9;

  // The identity delegation history of an authenticated service account that
  // made the request. The `serviceAccountDelegationInfo[]` object contains
  // information about the real authorities that try to access Google Cloud
  // resources by delegating on a service account. When multiple authorities are
  // present, they are guaranteed to be sorted based on the original ordering of
  // the identity delegation events.
  repeated ServiceAccountDelegationInfo service_account_delegation_info = 10;

  // A string that represents a username. The username provided depends on the
  // type of the finding and is likely not an IAM principal. For example, this
  // can be a system username if the finding is related to a virtual machine, or
  // it can be an application login username.
  string user_name = 11;
}

// Identity delegation history of an authenticated service account.
message ServiceAccountDelegationInfo {
  // The email address of a Google account.
  string principal_email = 1;

  // A string representing the principal_subject associated with the identity.
  // As compared to `principal_email`, supports principals that aren't
  // associated with email addresses, such as third party principals. For most
  // identities, the format will be `principal://iam.googleapis.com/{identity
  // pool name}/subjects/{subject}` except for some GKE identities
  // (GKE_WORKLOAD, FREEFORM, GKE_HUB_WORKLOAD) that are still in the legacy
  // format `serviceAccount:{identity pool name}[{subject}]`
  string principal_subject = 2;
}

// Represents a geographical location for a given access.
message Geolocation {
  // A CLDR.
  string region_code = 1;
}
