parent
9c7eb1f9a7
commit
31d2d3432d
7 changed files with 541 additions and 22 deletions
@ -0,0 +1,74 @@ |
|||||||
|
// Copyright 2021 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.osconfig.v1; |
||||||
|
|
||||||
|
import "google/api/annotations.proto"; |
||||||
|
import "google/api/client.proto"; |
||||||
|
import "google/api/resource.proto"; |
||||||
|
import "google/cloud/osconfig/v1/inventory.proto"; |
||||||
|
import "google/cloud/osconfig/v1/vulnerability.proto"; |
||||||
|
|
||||||
|
option csharp_namespace = "Google.Cloud.OsConfig.V1"; |
||||||
|
option go_package = "google.golang.org/genproto/googleapis/cloud/osconfig/v1;osconfig"; |
||||||
|
option java_multiple_files = true; |
||||||
|
option java_outer_classname = "OsConfigZonalServiceProto"; |
||||||
|
option java_package = "com.google.cloud.osconfig.v1"; |
||||||
|
option php_namespace = "Google\\Cloud\\OsConfig\\V1"; |
||||||
|
option ruby_package = "Google::Cloud::OsConfig::V1"; |
||||||
|
|
||||||
|
// Zonal OS Config API |
||||||
|
// |
||||||
|
// The OS Config service is the server-side component that allows users to |
||||||
|
// manage package installations and patch jobs for Compute Engine VM instances. |
||||||
|
service OsConfigZonalService { |
||||||
|
option (google.api.default_host) = "osconfig.googleapis.com"; |
||||||
|
option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; |
||||||
|
|
||||||
|
// Get inventory data for the specified VM instance. If the VM has no |
||||||
|
// associated inventory, the message `NOT_FOUND` is returned. |
||||||
|
rpc GetInventory(GetInventoryRequest) returns (Inventory) { |
||||||
|
option (google.api.http) = { |
||||||
|
get: "/v1/{name=projects/*/locations/*/instances/*/inventory}" |
||||||
|
}; |
||||||
|
option (google.api.method_signature) = "name"; |
||||||
|
} |
||||||
|
|
||||||
|
// List inventory data for all VM instances in the specified zone. |
||||||
|
rpc ListInventories(ListInventoriesRequest) returns (ListInventoriesResponse) { |
||||||
|
option (google.api.http) = { |
||||||
|
get: "/v1/{parent=projects/*/locations/*/instances/*}/inventories" |
||||||
|
}; |
||||||
|
option (google.api.method_signature) = "parent"; |
||||||
|
} |
||||||
|
|
||||||
|
// Gets the vulnerability report for the specified VM instance. Only VMs with |
||||||
|
// inventory data have vulnerability reports associated with them. |
||||||
|
rpc GetVulnerabilityReport(GetVulnerabilityReportRequest) returns (VulnerabilityReport) { |
||||||
|
option (google.api.http) = { |
||||||
|
get: "/v1/{name=projects/*/locations/*/instances/*/vulnerabilityReport}" |
||||||
|
}; |
||||||
|
option (google.api.method_signature) = "name"; |
||||||
|
} |
||||||
|
|
||||||
|
// List vulnerability reports for all VM instances in the specified zone. |
||||||
|
rpc ListVulnerabilityReports(ListVulnerabilityReportsRequest) returns (ListVulnerabilityReportsResponse) { |
||||||
|
option (google.api.http) = { |
||||||
|
get: "/v1/{parent=projects/*/locations/*/instances/*}/vulnerabilityReports" |
||||||
|
}; |
||||||
|
option (google.api.method_signature) = "parent"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,336 @@ |
|||||||
|
// Copyright 2021 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.osconfig.v1; |
||||||
|
|
||||||
|
import "google/api/field_behavior.proto"; |
||||||
|
import "google/api/resource.proto"; |
||||||
|
import "google/protobuf/timestamp.proto"; |
||||||
|
|
||||||
|
option csharp_namespace = "Google.Cloud.OsConfig.V1"; |
||||||
|
option go_package = "google.golang.org/genproto/googleapis/cloud/osconfig/v1;osconfig"; |
||||||
|
option java_multiple_files = true; |
||||||
|
option java_outer_classname = "VulnerabilityProto"; |
||||||
|
option java_package = "com.google.cloud.osconfig.v1"; |
||||||
|
option php_namespace = "Google\\Cloud\\OsConfig\\V1"; |
||||||
|
option ruby_package = "Google::Cloud::OsConfig::V1"; |
||||||
|
|
||||||
|
// This API resource represents the vulnerability report for a specified |
||||||
|
// Compute Engine virtual machine (VM) instance at a given point in time. |
||||||
|
// |
||||||
|
// For more information, see [Vulnerability |
||||||
|
// reports](https://cloud.google.com/compute/docs/instances/os-inventory-management#vulnerability-reports). |
||||||
|
message VulnerabilityReport { |
||||||
|
option (google.api.resource) = { |
||||||
|
type: "osconfig.googleapis.com/VulnerabilityReport" |
||||||
|
pattern: "projects/{project}/locations/{location}/instances/{instance}/vulnerabilityReport" |
||||||
|
}; |
||||||
|
|
||||||
|
// A vulnerability affecting the VM instance. |
||||||
|
message Vulnerability { |
||||||
|
// Contains metadata information for the vulnerability. This information is |
||||||
|
// collected from the upstream feed of the operating system. |
||||||
|
message Details { |
||||||
|
// A reference for this vulnerability. |
||||||
|
message Reference { |
||||||
|
// The url of the reference. |
||||||
|
string url = 1; |
||||||
|
|
||||||
|
// The source of the reference e.g. NVD. |
||||||
|
string source = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// The CVE of the vulnerability. CVE cannot be |
||||||
|
// empty and the combination of <cve, classification> should be unique |
||||||
|
// across vulnerabilities for a VM. |
||||||
|
string cve = 1; |
||||||
|
|
||||||
|
// The CVSS V2 score of this vulnerability. CVSS V2 score is on a scale of |
||||||
|
// 0 - 10 where 0 indicates low severity and 10 indicates high severity. |
||||||
|
float cvss_v2_score = 2; |
||||||
|
|
||||||
|
// The full description of the CVSSv3 for this vulnerability from NVD. |
||||||
|
CVSSv3 cvss_v3 = 3; |
||||||
|
|
||||||
|
// Assigned severity/impact ranking from the distro. |
||||||
|
string severity = 4; |
||||||
|
|
||||||
|
// The note or description describing the vulnerability from the distro. |
||||||
|
string description = 5; |
||||||
|
|
||||||
|
// Corresponds to the references attached to the `VulnerabilityDetails`. |
||||||
|
repeated Reference references = 6; |
||||||
|
} |
||||||
|
|
||||||
|
// Contains metadata as per the upstream feed of the operating system and |
||||||
|
// NVD. |
||||||
|
Details details = 1; |
||||||
|
|
||||||
|
// Corresponds to the `INSTALLED_PACKAGE` inventory item on the VM. |
||||||
|
// This field displays the inventory items affected by this vulnerability. |
||||||
|
// If the vulnerability report was not updated after the VM inventory |
||||||
|
// update, these values might not display in VM inventory. For some distros, |
||||||
|
// this field may be empty. |
||||||
|
repeated string installed_inventory_item_ids = 2; |
||||||
|
|
||||||
|
// Corresponds to the `AVAILABLE_PACKAGE` inventory item on the VM. |
||||||
|
// If the vulnerability report was not updated after the VM inventory |
||||||
|
// update, these values might not display in VM inventory. If there is no |
||||||
|
// available fix, the field is empty. The `inventory_item` value specifies |
||||||
|
// the latest `SoftwarePackage` available to the VM that fixes the |
||||||
|
// vulnerability. |
||||||
|
repeated string available_inventory_item_ids = 3; |
||||||
|
|
||||||
|
// The timestamp for when the vulnerability was first detected. |
||||||
|
google.protobuf.Timestamp create_time = 4; |
||||||
|
|
||||||
|
// The timestamp for when the vulnerability was last modified. |
||||||
|
google.protobuf.Timestamp update_time = 5; |
||||||
|
} |
||||||
|
|
||||||
|
// Output only. The `vulnerabilityReport` API resource name. |
||||||
|
// |
||||||
|
// Format: |
||||||
|
// `projects/{project_number}/locations/{location}/instances/{instance_id}/vulnerabilityReport` |
||||||
|
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; |
||||||
|
|
||||||
|
// Output only. List of vulnerabilities affecting the VM. |
||||||
|
repeated Vulnerability vulnerabilities = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; |
||||||
|
|
||||||
|
// Output only. The timestamp for when the last vulnerability report was generated for the |
||||||
|
// VM. |
||||||
|
google.protobuf.Timestamp update_time = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; |
||||||
|
} |
||||||
|
|
||||||
|
// A request message for getting the vulnerability report for the specified VM. |
||||||
|
message GetVulnerabilityReportRequest { |
||||||
|
// Required. API resource name for vulnerability resource. |
||||||
|
// |
||||||
|
// Format: |
||||||
|
// `projects/{project}/locations/{location}/instances/{instance}/vulnerabilityReport` |
||||||
|
// |
||||||
|
// For `{project}`, either `project-number` or `project-id` can be provided. |
||||||
|
// For `{instance}`, either Compute Engine `instance-id` or `instance-name` |
||||||
|
// can be provided. |
||||||
|
string name = 1 [ |
||||||
|
(google.api.field_behavior) = REQUIRED, |
||||||
|
(google.api.resource_reference) = { |
||||||
|
type: "osconfig.googleapis.com/VulnerabilityReport" |
||||||
|
} |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
// A request message for listing vulnerability reports for all VM instances in |
||||||
|
// the specified location. |
||||||
|
message ListVulnerabilityReportsRequest { |
||||||
|
// Required. The parent resource name. |
||||||
|
// |
||||||
|
// Format: `projects/{project}/locations/{location}/instances/-` |
||||||
|
// |
||||||
|
// For `{project}`, either `project-number` or `project-id` can be provided. |
||||||
|
string parent = 1 [ |
||||||
|
(google.api.field_behavior) = REQUIRED, |
||||||
|
(google.api.resource_reference) = { |
||||||
|
type: "compute.googleapis.com/Instance" |
||||||
|
} |
||||||
|
]; |
||||||
|
|
||||||
|
// The maximum number of results to return. |
||||||
|
int32 page_size = 2; |
||||||
|
|
||||||
|
// A pagination token returned from a previous call to |
||||||
|
// `ListVulnerabilityReports` that indicates where this listing |
||||||
|
// should continue from. |
||||||
|
string page_token = 3; |
||||||
|
|
||||||
|
// If provided, this field specifies the criteria that must be met by a |
||||||
|
// `vulnerabilityReport` API resource to be included in the response. |
||||||
|
string filter = 4; |
||||||
|
} |
||||||
|
|
||||||
|
// A response message for listing vulnerability reports for all VM instances in |
||||||
|
// the specified location. |
||||||
|
message ListVulnerabilityReportsResponse { |
||||||
|
// List of vulnerabilityReport objects. |
||||||
|
repeated VulnerabilityReport vulnerability_reports = 1; |
||||||
|
|
||||||
|
// The pagination token to retrieve the next page of vulnerabilityReports |
||||||
|
// object. |
||||||
|
string next_page_token = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// Common Vulnerability Scoring System version 3. |
||||||
|
// For details, see https://www.first.org/cvss/specification-document |
||||||
|
message CVSSv3 { |
||||||
|
// This metric reflects the context by which vulnerability exploitation is |
||||||
|
// possible. |
||||||
|
enum AttackVector { |
||||||
|
// Invalid value. |
||||||
|
ATTACK_VECTOR_UNSPECIFIED = 0; |
||||||
|
|
||||||
|
// The vulnerable component is bound to the network stack and the set of |
||||||
|
// possible attackers extends beyond the other options listed below, up to |
||||||
|
// and including the entire Internet. |
||||||
|
ATTACK_VECTOR_NETWORK = 1; |
||||||
|
|
||||||
|
// The vulnerable component is bound to the network stack, but the attack is |
||||||
|
// limited at the protocol level to a logically adjacent topology. |
||||||
|
ATTACK_VECTOR_ADJACENT = 2; |
||||||
|
|
||||||
|
// The vulnerable component is not bound to the network stack and the |
||||||
|
// attacker's path is via read/write/execute capabilities. |
||||||
|
ATTACK_VECTOR_LOCAL = 3; |
||||||
|
|
||||||
|
// The attack requires the attacker to physically touch or manipulate the |
||||||
|
// vulnerable component. |
||||||
|
ATTACK_VECTOR_PHYSICAL = 4; |
||||||
|
} |
||||||
|
|
||||||
|
// This metric describes the conditions beyond the attacker's control that |
||||||
|
// must exist in order to exploit the vulnerability. |
||||||
|
enum AttackComplexity { |
||||||
|
// Invalid value. |
||||||
|
ATTACK_COMPLEXITY_UNSPECIFIED = 0; |
||||||
|
|
||||||
|
// Specialized access conditions or extenuating circumstances do not exist. |
||||||
|
// An attacker can expect repeatable success when attacking the vulnerable |
||||||
|
// component. |
||||||
|
ATTACK_COMPLEXITY_LOW = 1; |
||||||
|
|
||||||
|
// A successful attack depends on conditions beyond the attacker's control. |
||||||
|
// That is, a successful attack cannot be accomplished at will, but requires |
||||||
|
// the attacker to invest in some measurable amount of effort in preparation |
||||||
|
// or execution against the vulnerable component before a successful attack |
||||||
|
// can be expected. |
||||||
|
ATTACK_COMPLEXITY_HIGH = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// This metric describes the level of privileges an attacker must possess |
||||||
|
// before successfully exploiting the vulnerability. |
||||||
|
enum PrivilegesRequired { |
||||||
|
// Invalid value. |
||||||
|
PRIVILEGES_REQUIRED_UNSPECIFIED = 0; |
||||||
|
|
||||||
|
// The attacker is unauthorized prior to attack, and therefore does not |
||||||
|
// require any access to settings or files of the vulnerable system to |
||||||
|
// carry out an attack. |
||||||
|
PRIVILEGES_REQUIRED_NONE = 1; |
||||||
|
|
||||||
|
// The attacker requires privileges that provide basic user capabilities |
||||||
|
// that could normally affect only settings and files owned by a user. |
||||||
|
// Alternatively, an attacker with Low privileges has the ability to access |
||||||
|
// only non-sensitive resources. |
||||||
|
PRIVILEGES_REQUIRED_LOW = 2; |
||||||
|
|
||||||
|
// The attacker requires privileges that provide significant (e.g., |
||||||
|
// administrative) control over the vulnerable component allowing access to |
||||||
|
// component-wide settings and files. |
||||||
|
PRIVILEGES_REQUIRED_HIGH = 3; |
||||||
|
} |
||||||
|
|
||||||
|
// This metric captures the requirement for a human user, other than the |
||||||
|
// attacker, to participate in the successful compromise of the vulnerable |
||||||
|
// component. |
||||||
|
enum UserInteraction { |
||||||
|
// Invalid value. |
||||||
|
USER_INTERACTION_UNSPECIFIED = 0; |
||||||
|
|
||||||
|
// The vulnerable system can be exploited without interaction from any user. |
||||||
|
USER_INTERACTION_NONE = 1; |
||||||
|
|
||||||
|
// Successful exploitation of this vulnerability requires a user to take |
||||||
|
// some action before the vulnerability can be exploited. |
||||||
|
USER_INTERACTION_REQUIRED = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// The Scope metric captures whether a vulnerability in one vulnerable |
||||||
|
// component impacts resources in components beyond its security scope. |
||||||
|
enum Scope { |
||||||
|
// Invalid value. |
||||||
|
SCOPE_UNSPECIFIED = 0; |
||||||
|
|
||||||
|
// An exploited vulnerability can only affect resources managed by the same |
||||||
|
// security authority. |
||||||
|
SCOPE_UNCHANGED = 1; |
||||||
|
|
||||||
|
// An exploited vulnerability can affect resources beyond the security scope |
||||||
|
// managed by the security authority of the vulnerable component. |
||||||
|
SCOPE_CHANGED = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// The Impact metrics capture the effects of a successfully exploited |
||||||
|
// vulnerability on the component that suffers the worst outcome that is most |
||||||
|
// directly and predictably associated with the attack. |
||||||
|
enum Impact { |
||||||
|
// Invalid value. |
||||||
|
IMPACT_UNSPECIFIED = 0; |
||||||
|
|
||||||
|
// High impact. |
||||||
|
IMPACT_HIGH = 1; |
||||||
|
|
||||||
|
// Low impact. |
||||||
|
IMPACT_LOW = 2; |
||||||
|
|
||||||
|
// No impact. |
||||||
|
IMPACT_NONE = 3; |
||||||
|
} |
||||||
|
|
||||||
|
// The base score is a function of the base metric scores. |
||||||
|
// https://www.first.org/cvss/specification-document#Base-Metrics |
||||||
|
float base_score = 1; |
||||||
|
|
||||||
|
// The Exploitability sub-score equation is derived from the Base |
||||||
|
// Exploitability metrics. |
||||||
|
// https://www.first.org/cvss/specification-document#2-1-Exploitability-Metrics |
||||||
|
float exploitability_score = 2; |
||||||
|
|
||||||
|
// The Impact sub-score equation is derived from the Base Impact metrics. |
||||||
|
float impact_score = 3; |
||||||
|
|
||||||
|
// This metric reflects the context by which vulnerability exploitation is |
||||||
|
// possible. |
||||||
|
AttackVector attack_vector = 5; |
||||||
|
|
||||||
|
// This metric describes the conditions beyond the attacker's control that |
||||||
|
// must exist in order to exploit the vulnerability. |
||||||
|
AttackComplexity attack_complexity = 6; |
||||||
|
|
||||||
|
// This metric describes the level of privileges an attacker must possess |
||||||
|
// before successfully exploiting the vulnerability. |
||||||
|
PrivilegesRequired privileges_required = 7; |
||||||
|
|
||||||
|
// This metric captures the requirement for a human user, other than the |
||||||
|
// attacker, to participate in the successful compromise of the vulnerable |
||||||
|
// component. |
||||||
|
UserInteraction user_interaction = 8; |
||||||
|
|
||||||
|
// The Scope metric captures whether a vulnerability in one vulnerable |
||||||
|
// component impacts resources in components beyond its security scope. |
||||||
|
Scope scope = 9; |
||||||
|
|
||||||
|
// This metric measures the impact to the confidentiality of the information |
||||||
|
// resources managed by a software component due to a successfully exploited |
||||||
|
// vulnerability. |
||||||
|
Impact confidentiality_impact = 10; |
||||||
|
|
||||||
|
// This metric measures the impact to integrity of a successfully exploited |
||||||
|
// vulnerability. |
||||||
|
Impact integrity_impact = 11; |
||||||
|
|
||||||
|
// This metric measures the impact to the availability of the impacted |
||||||
|
// component resulting from a successfully exploited vulnerability. |
||||||
|
Impact availability_impact = 12; |
||||||
|
} |
Loading…
Reference in new issue