xref: /aosp_15_r20/external/googleapis/google/cloud/securitycenter/v2/securitycenter_service.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2023 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15syntax = "proto3";
16
17package google.cloud.securitycenter.v2;
18
19import "google/api/annotations.proto";
20import "google/api/client.proto";
21import "google/api/field_behavior.proto";
22import "google/api/resource.proto";
23import "google/api/routing.proto";
24import "google/cloud/securitycenter/v2/attack_path.proto";
25import "google/cloud/securitycenter/v2/bigquery_export.proto";
26import "google/cloud/securitycenter/v2/external_system.proto";
27import "google/cloud/securitycenter/v2/finding.proto";
28import "google/cloud/securitycenter/v2/mute_config.proto";
29import "google/cloud/securitycenter/v2/notification_config.proto";
30import "google/cloud/securitycenter/v2/resource_value_config.proto";
31import "google/cloud/securitycenter/v2/security_marks.proto";
32import "google/cloud/securitycenter/v2/simulation.proto";
33import "google/cloud/securitycenter/v2/source.proto";
34import "google/cloud/securitycenter/v2/valued_resource.proto";
35import "google/iam/v1/iam_policy.proto";
36import "google/iam/v1/policy.proto";
37import "google/longrunning/operations.proto";
38import "google/protobuf/empty.proto";
39import "google/protobuf/field_mask.proto";
40import "google/protobuf/struct.proto";
41
42option csharp_namespace = "Google.Cloud.SecurityCenter.V2";
43option go_package = "cloud.google.com/go/securitycenter/apiv2/securitycenterpb;securitycenterpb";
44option java_multiple_files = true;
45option java_outer_classname = "SecuritycenterServiceProto";
46option java_package = "com.google.cloud.securitycenter.v2";
47option php_namespace = "Google\\Cloud\\SecurityCenter\\V2";
48option ruby_package = "Google::Cloud::SecurityCenter::V2";
49option (google.api.resource_definition) = {
50  type: "securitycenter.googleapis.com/OrganizationLocation"
51  pattern: "organizations/{organization}/locations/{location}"
52};
53option (google.api.resource_definition) = {
54  type: "securitycenter.googleapis.com/FolderLocation"
55  pattern: "folders/{folder}/locations/{location}"
56};
57
58// V2 APIs for Security Center service.
59service SecurityCenter {
60  option (google.api.default_host) = "securitycenter.googleapis.com";
61  option (google.api.oauth_scopes) =
62      "https://www.googleapis.com/auth/cloud-platform";
63
64  // Creates a ResourceValueConfig for an organization. Maps user's tags to
65  // difference resource values for use by the attack path simulation.
66  rpc BatchCreateResourceValueConfigs(BatchCreateResourceValueConfigsRequest)
67      returns (BatchCreateResourceValueConfigsResponse) {
68    option (google.api.http) = {
69      post: "/v2/{parent=organizations/*}/resourceValueConfigs:batchCreate"
70      body: "*"
71    };
72    option (google.api.method_signature) = "parent,requests";
73  }
74
75  // Kicks off an LRO to bulk mute findings for a parent based on a filter. If
76  // no location is specified, findings are muted in global. The parent
77  // can be either an organization, folder, or project. The findings matched by
78  // the filter will be muted after the LRO is done.
79  rpc BulkMuteFindings(BulkMuteFindingsRequest)
80      returns (google.longrunning.Operation) {
81    option (google.api.http) = {
82      post: "/v2/{parent=organizations/*}/findings:bulkMute"
83      body: "*"
84      additional_bindings {
85        post: "/v2/{parent=organizations/*/locations/*}/findings:bulkMute"
86        body: "*"
87      }
88      additional_bindings {
89        post: "/v2/{parent=folders/*}/findings:bulkMute"
90        body: "*"
91      }
92      additional_bindings {
93        post: "/v2/{parent=folders/*/locations/*}/findings:bulkMute"
94        body: "*"
95      }
96      additional_bindings {
97        post: "/v2/{parent=projects/*}/findings:bulkMute"
98        body: "*"
99      }
100      additional_bindings {
101        post: "/v2/{parent=projects/*/locations/*}/findings:bulkMute"
102        body: "*"
103      }
104    };
105    option (google.api.method_signature) = "parent";
106    option (google.longrunning.operation_info) = {
107      response_type: "google.cloud.securitycenter.v2.BulkMuteFindingsResponse"
108      metadata_type: "google.protobuf.Empty"
109    };
110  }
111
112  // Creates a BigQuery export.
113  rpc CreateBigQueryExport(CreateBigQueryExportRequest)
114      returns (BigQueryExport) {
115    option (google.api.http) = {
116      post: "/v2/{parent=organizations/*/locations/*}/bigQueryExports"
117      body: "big_query_export"
118      additional_bindings {
119        post: "/v2/{parent=folders/*/locations/*}/bigQueryExports"
120        body: "big_query_export"
121      }
122      additional_bindings {
123        post: "/v2/{parent=projects/*/locations/*}/bigQueryExports"
124        body: "big_query_export"
125      }
126    };
127    option (google.api.method_signature) =
128        "parent,big_query_export,big_query_export_id";
129  }
130
131  // Creates a finding in a location. The corresponding source must exist for
132  // finding creation to succeed.
133  rpc CreateFinding(CreateFindingRequest) returns (Finding) {
134    option (google.api.http) = {
135      post: "/v2/{parent=organizations/*/sources/*/locations/*}/findings"
136      body: "finding"
137      additional_bindings {
138        post: "/v2/{parent=organizations/*/sources/*}/findings"
139        body: "finding"
140      }
141    };
142    option (google.api.method_signature) = "parent,finding,finding_id";
143  }
144
145  // Creates a mute config.
146  rpc CreateMuteConfig(CreateMuteConfigRequest) returns (MuteConfig) {
147    option (google.api.http) = {
148      post: "/v2/{parent=organizations/*/locations/*}/muteConfigs"
149      body: "mute_config"
150      additional_bindings {
151        post: "/v2/{parent=folders/*/locations/*}/muteConfigs"
152        body: "mute_config"
153      }
154      additional_bindings {
155        post: "/v2/{parent=projects/*/locations/*}/muteConfigs"
156        body: "mute_config"
157      }
158      additional_bindings {
159        post: "/v2/{parent=organizations/*}/muteConfigs"
160        body: "mute_config"
161      }
162      additional_bindings {
163        post: "/v2/{parent=folders/*}/muteConfigs"
164        body: "mute_config"
165      }
166      additional_bindings {
167        post: "/v2/{parent=projects/*}/muteConfigs"
168        body: "mute_config"
169      }
170    };
171    option (google.api.routing) = {
172      routing_parameters {
173        field: "parent"
174        path_template: "projects/*/locations/{location=*}"
175      }
176      routing_parameters {
177        field: "parent"
178        path_template: "organizations/*/locations/{location=*}"
179      }
180      routing_parameters {
181        field: "parent"
182        path_template: "folders/*/locations/{location=*}"
183      }
184    };
185    option (google.api.method_signature) = "parent,mute_config,mute_config_id";
186  }
187
188  // Creates a notification config.
189  rpc CreateNotificationConfig(CreateNotificationConfigRequest)
190      returns (NotificationConfig) {
191    option (google.api.http) = {
192      post: "/v2/{parent=organizations/*/locations/*}/notificationConfigs"
193      body: "notification_config"
194      additional_bindings {
195        post: "/v2/{parent=folders/*/locations/*}/notificationConfigs"
196        body: "notification_config"
197      }
198      additional_bindings {
199        post: "/v2/{parent=projects/*/locations/*}/notificationConfigs"
200        body: "notification_config"
201      }
202    };
203    option (google.api.method_signature) =
204        "parent,notification_config,config_id";
205  }
206
207  // Creates a source.
208  rpc CreateSource(CreateSourceRequest) returns (Source) {
209    option (google.api.http) = {
210      post: "/v2/{parent=organizations/*}/sources"
211      body: "source"
212    };
213    option (google.api.method_signature) = "parent,source";
214  }
215
216  // Deletes an existing BigQuery export.
217  rpc DeleteBigQueryExport(DeleteBigQueryExportRequest)
218      returns (google.protobuf.Empty) {
219    option (google.api.http) = {
220      delete: "/v2/{name=organizations/*/locations/*/bigQueryExports/*}"
221      additional_bindings {
222        delete: "/v2/{name=folders/*/locations/*/bigQueryExports/*}"
223      }
224      additional_bindings {
225        delete: "/v2/{name=projects/*/locations/*/bigQueryExports/*}"
226      }
227    };
228    option (google.api.method_signature) = "name";
229  }
230
231  // Deletes an existing mute config. If no location is specified, default is
232  // global.
233  rpc DeleteMuteConfig(DeleteMuteConfigRequest)
234      returns (google.protobuf.Empty) {
235    option (google.api.http) = {
236      delete: "/v2/{name=organizations/*/muteConfigs/*}"
237      additional_bindings {
238        delete: "/v2/{name=organizations/*/locations/*/muteConfigs/*}"
239      }
240      additional_bindings { delete: "/v2/{name=folders/*/muteConfigs/*}" }
241      additional_bindings {
242        delete: "/v2/{name=folders/*/locations/*/muteConfigs/*}"
243      }
244      additional_bindings { delete: "/v2/{name=projects/*/muteConfigs/*}" }
245      additional_bindings {
246        delete: "/v2/{name=projects/*/locations/*/muteConfigs/*}"
247      }
248    };
249    option (google.api.routing) = {
250      routing_parameters {
251        field: "name"
252        path_template: "projects/*/locations/{location=*}/muteConfigs/*"
253      }
254      routing_parameters {
255        field: "name"
256        path_template: "organizations/*/locations/{location=*}/muteConfigs/*"
257      }
258      routing_parameters {
259        field: "name"
260        path_template: "folders/*/locations/{location=*}/muteConfigs/*"
261      }
262    };
263    option (google.api.method_signature) = "name";
264  }
265
266  // Deletes a notification config.
267  rpc DeleteNotificationConfig(DeleteNotificationConfigRequest)
268      returns (google.protobuf.Empty) {
269    option (google.api.http) = {
270      delete: "/v2/{name=organizations/*/locations/*/notificationConfigs/*}"
271      additional_bindings {
272        delete: "/v2/{name=folders/*/locations/*/notificationConfigs/*}"
273      }
274      additional_bindings {
275        delete: "/v2/{name=projects/*/locations/*/notificationConfigs/*}"
276      }
277    };
278    option (google.api.method_signature) = "name";
279  }
280
281  // Deletes a ResourceValueConfig.
282  rpc DeleteResourceValueConfig(DeleteResourceValueConfigRequest)
283      returns (google.protobuf.Empty) {
284    option (google.api.http) = {
285      delete: "/v2/{name=organizations/*/resourceValueConfigs/*}"
286    };
287    option (google.api.method_signature) = "name";
288  }
289
290  // Gets a BigQuery export.
291  rpc GetBigQueryExport(GetBigQueryExportRequest) returns (BigQueryExport) {
292    option (google.api.http) = {
293      get: "/v2/{name=organizations/*/locations/*/bigQueryExports/*}"
294      additional_bindings {
295        get: "/v2/{name=folders/*/locations/*/bigQueryExports/*}"
296      }
297      additional_bindings {
298        get: "/v2/{name=projects/*/locations/*/bigQueryExports/*}"
299      }
300    };
301    option (google.api.method_signature) = "name";
302  }
303
304  // Get the simulation by name or the latest simulation for the given
305  // organization.
306  rpc GetSimulation(GetSimulationRequest) returns (Simulation) {
307    option (google.api.http) = {
308      get: "/v2/{name=organizations/*/simulations/*}"
309    };
310    option (google.api.method_signature) = "name";
311  }
312
313  // Get the valued resource by name
314  rpc GetValuedResource(GetValuedResourceRequest) returns (ValuedResource) {
315    option (google.api.http) = {
316      get: "/v2/{name=organizations/*/simulations/*/valuedResources/*}"
317    };
318    option (google.api.method_signature) = "name";
319  }
320
321  // Gets the access control policy on the specified Source.
322  rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest)
323      returns (google.iam.v1.Policy) {
324    option (google.api.http) = {
325      post: "/v2/{resource=organizations/*/sources/*}:getIamPolicy"
326      body: "*"
327    };
328    option (google.api.method_signature) = "resource";
329  }
330
331  // Gets a mute config. If no location is specified, default is
332  // global.
333  rpc GetMuteConfig(GetMuteConfigRequest) returns (MuteConfig) {
334    option (google.api.http) = {
335      get: "/v2/{name=organizations/*/muteConfigs/*}"
336      additional_bindings {
337        get: "/v2/{name=organizations/*/locations/*/muteConfigs/*}"
338      }
339      additional_bindings { get: "/v2/{name=folders/*/muteConfigs/*}" }
340      additional_bindings {
341        get: "/v2/{name=folders/*/locations/*/muteConfigs/*}"
342      }
343      additional_bindings { get: "/v2/{name=projects/*/muteConfigs/*}" }
344      additional_bindings {
345        get: "/v2/{name=projects/*/locations/*/muteConfigs/*}"
346      }
347    };
348    option (google.api.routing) = {
349      routing_parameters {
350        field: "name"
351        path_template: "projects/*/locations/{location=*}/muteConfigs/*"
352      }
353      routing_parameters {
354        field: "name"
355        path_template: "organizations/*/locations/{location=*}/muteConfigs/*"
356      }
357      routing_parameters {
358        field: "name"
359        path_template: "folders/*/locations/{location=*}/muteConfigs/*"
360      }
361    };
362    option (google.api.method_signature) = "name";
363  }
364
365  // Gets a notification config.
366  rpc GetNotificationConfig(GetNotificationConfigRequest)
367      returns (NotificationConfig) {
368    option (google.api.http) = {
369      get: "/v2/{name=organizations/*/locations/*/notificationConfigs/*}"
370      additional_bindings {
371        get: "/v2/{name=folders/*/locations/*/notificationConfigs/*}"
372      }
373      additional_bindings {
374        get: "/v2/{name=projects/*/locations/*/notificationConfigs/*}"
375      }
376    };
377    option (google.api.method_signature) = "name";
378  }
379
380  // Gets a ResourceValueConfig.
381  rpc GetResourceValueConfig(GetResourceValueConfigRequest)
382      returns (ResourceValueConfig) {
383    option (google.api.http) = {
384      get: "/v2/{name=organizations/*/resourceValueConfigs/*}"
385    };
386    option (google.api.method_signature) = "name";
387  }
388
389  // Gets a source.
390  rpc GetSource(GetSourceRequest) returns (Source) {
391    option (google.api.http) = {
392      get: "/v2/{name=organizations/*/sources/*}"
393    };
394    option (google.api.method_signature) = "name";
395  }
396
397  // Filters an organization or source's findings and groups them by their
398  // specified properties in a location. If no location is specified, findings
399  // are assumed to be in global
400  //
401  // To group across all sources provide a `-` as the source id.
402  // The following list shows some examples:
403  //
404  // + `/v2/organizations/{organization_id}/sources/-/findings`
405  // +
406  // `/v2/organizations/{organization_id}/sources/-/locations/{location_id}/findings`
407  // + `/v2/folders/{folder_id}/sources/-/findings`
408  // + `/v2/folders/{folder_id}/sources/-/locations/{location_id}/findings`
409  // + `/v2/projects/{project_id}/sources/-/findings`
410  // + `/v2/projects/{project_id}/sources/-/locations/{location_id}/findings`
411  rpc GroupFindings(GroupFindingsRequest) returns (GroupFindingsResponse) {
412    option (google.api.http) = {
413      post: "/v2/{parent=organizations/*/sources/*}/findings:group"
414      body: "*"
415      additional_bindings {
416        post: "/v2/{parent=organizations/*/sources/*/locations/*}/findings:group"
417        body: "*"
418      }
419      additional_bindings {
420        post: "/v2/{parent=folders/*/sources/*}/findings:group"
421        body: "*"
422      }
423      additional_bindings {
424        post: "/v2/{parent=folders/*/sources/*/locations/*}/findings:group"
425        body: "*"
426      }
427      additional_bindings {
428        post: "/v2/{parent=projects/*/sources/*}/findings:group"
429        body: "*"
430      }
431      additional_bindings {
432        post: "/v2/{parent=projects/*/sources/*/locations/*}/findings:group"
433        body: "*"
434      }
435    };
436    option (google.api.method_signature) = "parent,group_by";
437  }
438
439  // Lists the attack paths for a set of simulation results or valued resources
440  // and filter.
441  rpc ListAttackPaths(ListAttackPathsRequest)
442      returns (ListAttackPathsResponse) {
443    option (google.api.http) = {
444      get: "/v2/{parent=organizations/*/simulations/*}/attackPaths"
445      additional_bindings {
446        get: "/v2/{parent=organizations/*/simulations/*/valuedResources/*}/attackPaths"
447      }
448      additional_bindings {
449        get: "/v2/{parent=organizations/*/simulations/*/attackExposureResults/*}/attackPaths"
450      }
451    };
452    option (google.api.method_signature) = "parent";
453  }
454
455  // Lists BigQuery exports. Note that when requesting BigQuery exports at a
456  // given level all exports under that level are also returned e.g. if
457  // requesting BigQuery exports under a folder, then all BigQuery exports
458  // immediately under the folder plus the ones created under the projects
459  // within the folder are returned.
460  rpc ListBigQueryExports(ListBigQueryExportsRequest)
461      returns (ListBigQueryExportsResponse) {
462    option (google.api.http) = {
463      get: "/v2/{parent=organizations/*/locations/*}/bigQueryExports"
464      additional_bindings {
465        get: "/v2/{parent=folders/*/locations/*}/bigQueryExports"
466      }
467      additional_bindings {
468        get: "/v2/{parent=projects/*/locations/*}/bigQueryExports"
469      }
470    };
471    option (google.api.method_signature) = "parent";
472  }
473
474  // Lists an organization or source's findings.
475  //
476  // To list across all sources for a given location provide a `-` as the source
477  // id. If no location is specified, finding are assumed to be in global.
478  // The following list shows some examples:
479  //
480  // + `/v2/organizations/{organization_id}/sources/-/findings`
481  // +
482  // `/v2/organizations/{organization_id}/sources/-/locations/{location_id}/findings`
483  rpc ListFindings(ListFindingsRequest) returns (ListFindingsResponse) {
484    option (google.api.http) = {
485      get: "/v2/{parent=organizations/*/sources/*}/findings"
486      additional_bindings {
487        get: "/v2/{parent=organizations/*/sources/*/locations/*}/findings"
488      }
489      additional_bindings { get: "/v2/{parent=folders/*/sources/*}/findings" }
490      additional_bindings {
491        get: "/v2/{parent=folders/*/sources/*/locations/*}/findings"
492      }
493      additional_bindings { get: "/v2/{parent=projects/*/sources/*}/findings" }
494      additional_bindings {
495        get: "/v2/{parent=projects/*/sources/*/locations/*}/findings"
496      }
497    };
498    option (google.api.method_signature) = "parent";
499  }
500
501  // Lists mute configs. If no location is specified, default is
502  // global.
503  rpc ListMuteConfigs(ListMuteConfigsRequest)
504      returns (ListMuteConfigsResponse) {
505    option (google.api.http) = {
506      get: "/v2/{parent=organizations/*}/muteConfigs"
507      additional_bindings {
508        get: "/v2/{parent=organizations/*/locations/*}/muteConfigs"
509      }
510      additional_bindings { get: "/v2/{parent=folders/*}/muteConfigs" }
511      additional_bindings {
512        get: "/v2/{parent=folders/*/locations/*}/muteConfigs"
513      }
514      additional_bindings { get: "/v2/{parent=projects/*}/muteConfigs" }
515      additional_bindings {
516        get: "/v2/{parent=projects/*/locations/*}/muteConfigs"
517      }
518    };
519    option (google.api.routing) = {
520      routing_parameters {
521        field: "parent"
522        path_template: "projects/*/locations/{location=*}/muteConfigs"
523      }
524      routing_parameters {
525        field: "parent"
526        path_template: "organizations/*/locations/{location=*}/muteConfigs"
527      }
528      routing_parameters {
529        field: "parent"
530        path_template: "folders/*/locations/{location=*}/muteConfigs"
531      }
532    };
533    option (google.api.method_signature) = "parent";
534  }
535
536  // Lists notification configs.
537  rpc ListNotificationConfigs(ListNotificationConfigsRequest)
538      returns (ListNotificationConfigsResponse) {
539    option (google.api.http) = {
540      get: "/v2/{parent=organizations/*/locations/*}/notificationConfigs"
541      additional_bindings {
542        get: "/v2/{parent=folders/*/locations/*}/notificationConfigs"
543      }
544      additional_bindings {
545        get: "/v2/{parent=projects/*/locations/*}/notificationConfigs"
546      }
547    };
548    option (google.api.method_signature) = "parent";
549  }
550
551  // Lists all ResourceValueConfigs.
552  rpc ListResourceValueConfigs(ListResourceValueConfigsRequest)
553      returns (ListResourceValueConfigsResponse) {
554    option (google.api.http) = {
555      get: "/v2/{parent=organizations/*}/resourceValueConfigs"
556    };
557    option (google.api.method_signature) = "parent";
558  }
559
560  // Lists all sources belonging to an organization.
561  rpc ListSources(ListSourcesRequest) returns (ListSourcesResponse) {
562    option (google.api.http) = {
563      get: "/v2/{parent=organizations/*}/sources"
564      additional_bindings { get: "/v2/{parent=folders/*}/sources" }
565      additional_bindings { get: "/v2/{parent=projects/*}/sources" }
566    };
567    option (google.api.method_signature) = "parent";
568  }
569
570  // Lists the valued resources for a set of simulation results and filter.
571  rpc ListValuedResources(ListValuedResourcesRequest)
572      returns (ListValuedResourcesResponse) {
573    option (google.api.http) = {
574      get: "/v2/{parent=organizations/*/simulations/*}/valuedResources"
575      additional_bindings {
576        get: "/v2/{parent=organizations/*/simulations/*/attackExposureResults/*}/valuedResources"
577      }
578    };
579    option (google.api.method_signature) = "parent";
580  }
581
582  // Updates the state of a finding. If no location is specified, finding is
583  // assumed to be in global
584  rpc SetFindingState(SetFindingStateRequest) returns (Finding) {
585    option (google.api.http) = {
586      post: "/v2/{name=organizations/*/sources/*/findings/*}:setState"
587      body: "*"
588      additional_bindings {
589        post: "/v2/{name=organizations/*/sources/*/locations/*/findings/*}:setState"
590        body: "*"
591      }
592      additional_bindings {
593        post: "/v2/{name=folders/*/sources/*/findings/*}:setState"
594        body: "*"
595      }
596      additional_bindings {
597        post: "/v2/{name=folders/*/sources/*/locations/*/findings/*}:setState"
598        body: "*"
599      }
600      additional_bindings {
601        post: "/v2/{name=projects/*/sources/*/findings/*}:setState"
602        body: "*"
603      }
604      additional_bindings {
605        post: "/v2/{name=projects/*/sources/*/locations/*/findings/*}:setState"
606        body: "*"
607      }
608    };
609    option (google.api.method_signature) = "name,state";
610  }
611
612  // Sets the access control policy on the specified Source.
613  rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest)
614      returns (google.iam.v1.Policy) {
615    option (google.api.http) = {
616      post: "/v2/{resource=organizations/*/sources/*}:setIamPolicy"
617      body: "*"
618    };
619    option (google.api.method_signature) = "resource,policy";
620  }
621
622  // Updates the mute state of a finding. If no location is specified, finding
623  // is assumed to be in global
624  rpc SetMute(SetMuteRequest) returns (Finding) {
625    option (google.api.http) = {
626      post: "/v2/{name=organizations/*/sources/*/findings/*}:setMute"
627      body: "*"
628      additional_bindings {
629        post: "/v2/{name=organizations/*/sources/*/locations/*/findings/*}:setMute"
630        body: "*"
631      }
632      additional_bindings {
633        post: "/v2/{name=folders/*/sources/*/findings/*}:setMute"
634        body: "*"
635      }
636      additional_bindings {
637        post: "/v2/{name=folders/*/sources/*/locations/*/findings/*}:setMute"
638        body: "*"
639      }
640      additional_bindings {
641        post: "/v2/{name=projects/*/sources/*/findings/*}:setMute"
642        body: "*"
643      }
644      additional_bindings {
645        post: "/v2/{name=projects/*/sources/*/locations/*/findings/*}:setMute"
646        body: "*"
647      }
648    };
649    option (google.api.method_signature) = "name,mute";
650  }
651
652  // Returns the permissions that a caller has on the specified source.
653  rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest)
654      returns (google.iam.v1.TestIamPermissionsResponse) {
655    option (google.api.http) = {
656      post: "/v2/{resource=organizations/*/sources/*}:testIamPermissions"
657      body: "*"
658    };
659    option (google.api.method_signature) = "resource,permissions";
660  }
661
662  // Updates a BigQuery export.
663  rpc UpdateBigQueryExport(UpdateBigQueryExportRequest)
664      returns (BigQueryExport) {
665    option (google.api.http) = {
666      patch: "/v2/{big_query_export.name=organizations/*/locations/*/bigQueryExports/*}"
667      body: "big_query_export"
668      additional_bindings {
669        patch: "/v2/{big_query_export.name=folders/*/locations/*/bigQueryExports/*}"
670        body: "big_query_export"
671      }
672      additional_bindings {
673        patch: "/v2/{big_query_export.name=projects/*/locations/*/bigQueryExports/*}"
674        body: "big_query_export"
675      }
676    };
677    option (google.api.method_signature) = "big_query_export,update_mask";
678  }
679
680  // Updates external system. This is for a given finding. If no location is
681  // specified, finding is assumed to be in global
682  rpc UpdateExternalSystem(UpdateExternalSystemRequest)
683      returns (ExternalSystem) {
684    option (google.api.http) = {
685      patch: "/v2/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}"
686      body: "external_system"
687      additional_bindings {
688        patch: "/v2/{external_system.name=organizations/*/sources/*/locations/*/findings/*/externalSystems/*}"
689        body: "external_system"
690      }
691      additional_bindings {
692        patch: "/v2/{external_system.name=folders/*/sources/*/findings/*/externalSystems/*}"
693        body: "external_system"
694      }
695      additional_bindings {
696        patch: "/v2/{external_system.name=folders/*/sources/*/locations/*/findings/*/externalSystems/*}"
697        body: "external_system"
698      }
699      additional_bindings {
700        patch: "/v2/{external_system.name=projects/*/sources/*/findings/*/externalSystems/*}"
701        body: "external_system"
702      }
703      additional_bindings {
704        patch: "/v2/{external_system.name=projects/*/sources/*/locations/*/findings/*/externalSystems/*}"
705        body: "external_system"
706      }
707    };
708    option (google.api.method_signature) = "external_system,update_mask";
709  }
710
711  // Creates or updates a finding. If no location is specified, finding is
712  // assumed to be in global. The corresponding source must exist for a finding
713  // creation to succeed.
714  rpc UpdateFinding(UpdateFindingRequest) returns (Finding) {
715    option (google.api.http) = {
716      patch: "/v2/{finding.name=organizations/*/sources/*/findings/*}"
717      body: "finding"
718      additional_bindings {
719        patch: "/v2/{finding.name=organizations/*/sources/*/locations/*/findings/*}"
720        body: "finding"
721      }
722      additional_bindings {
723        patch: "/v2/{finding.name=folders/*/sources/*/findings/*}"
724        body: "finding"
725      }
726      additional_bindings {
727        patch: "/v2/{finding.name=folders/*/sources/*/locations/*/findings/*}"
728        body: "finding"
729      }
730      additional_bindings {
731        patch: "/v2/{finding.name=projects/*/sources/*/findings/*}"
732        body: "finding"
733      }
734      additional_bindings {
735        patch: "/v2/{finding.name=projects/*/sources/*/locations/*/findings/*}"
736        body: "finding"
737      }
738    };
739    option (google.api.method_signature) = "finding,update_mask";
740  }
741
742  // Updates a mute config. If no location is specified, default is
743  // global.
744  rpc UpdateMuteConfig(UpdateMuteConfigRequest) returns (MuteConfig) {
745    option (google.api.http) = {
746      patch: "/v2/{mute_config.name=organizations/*/muteConfigs/*}"
747      body: "mute_config"
748      additional_bindings {
749        patch: "/v2/{mute_config.name=organizations/*/locations/*/muteConfigs/*}"
750        body: "mute_config"
751      }
752      additional_bindings {
753        patch: "/v2/{mute_config.name=folders/*/muteConfigs/*}"
754        body: "mute_config"
755      }
756      additional_bindings {
757        patch: "/v2/{mute_config.name=folders/*/locations/*/muteConfigs/*}"
758        body: "mute_config"
759      }
760      additional_bindings {
761        patch: "/v2/{mute_config.name=projects/*/muteConfigs/*}"
762        body: "mute_config"
763      }
764      additional_bindings {
765        patch: "/v2/{mute_config.name=projects/*/locations/*/muteConfigs/*}"
766        body: "mute_config"
767      }
768    };
769    option (google.api.routing) = {
770      routing_parameters {
771        field: "mute_config.name"
772        path_template: "projects/*/locations/{location=*}/muteConfigs/*"
773      }
774      routing_parameters {
775        field: "mute_config.name"
776        path_template: "organizations/*/locations/{location=*}/muteConfigs/*"
777      }
778      routing_parameters {
779        field: "mute_config.name"
780        path_template: "folders/*/locations/{location=*}/muteConfigs/*"
781      }
782    };
783    option (google.api.method_signature) = "mute_config,update_mask";
784  }
785
786  // Updates a notification config. The following update
787  // fields are allowed: description, pubsub_topic, streaming_config.filter
788  rpc UpdateNotificationConfig(UpdateNotificationConfigRequest)
789      returns (NotificationConfig) {
790    option (google.api.http) = {
791      patch: "/v2/{notification_config.name=organizations/*/locations/*/notificationConfigs/*}"
792      body: "notification_config"
793      additional_bindings {
794        patch: "/v2/{notification_config.name=folders/*/locations/*/notificationConfigs/*}"
795        body: "notification_config"
796      }
797      additional_bindings {
798        patch: "/v2/{notification_config.name=projects/*/locations/*/notificationConfigs/*}"
799        body: "notification_config"
800      }
801    };
802    option (google.api.method_signature) = "notification_config,update_mask";
803  }
804
805  // Updates an existing ResourceValueConfigs with new rules.
806  rpc UpdateResourceValueConfig(UpdateResourceValueConfigRequest)
807      returns (ResourceValueConfig) {
808    option (google.api.http) = {
809      patch: "/v2/{resource_value_config.name=organizations/*/resourceValueConfigs/*}"
810      body: "resource_value_config"
811    };
812    option (google.api.method_signature) = "resource_value_config,update_mask";
813  }
814
815  // Updates security marks. For Finding Security marks, if no location is
816  // specified, finding is assumed to be in global. Assets Security Marks can
817  // only be accessed through global endpoint.
818  rpc UpdateSecurityMarks(UpdateSecurityMarksRequest) returns (SecurityMarks) {
819    option (google.api.http) = {
820      patch: "/v2/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}"
821      body: "security_marks"
822      additional_bindings {
823        patch: "/v2/{security_marks.name=organizations/*/assets/*/securityMarks}"
824        body: "security_marks"
825      }
826      additional_bindings {
827        patch: "/v2/{security_marks.name=organizations/*/sources/*/locations/*/findings/*/securityMarks}"
828        body: "security_marks"
829      }
830      additional_bindings {
831        patch: "/v2/{security_marks.name=folders/*/sources/*/findings/*/securityMarks}"
832        body: "security_marks"
833      }
834      additional_bindings {
835        patch: "/v2/{security_marks.name=folders/*/assets/*/securityMarks}"
836        body: "security_marks"
837      }
838      additional_bindings {
839        patch: "/v2/{security_marks.name=folders/*/sources/*/locations/*/findings/*/securityMarks}"
840        body: "security_marks"
841      }
842      additional_bindings {
843        patch: "/v2/{security_marks.name=projects/*/sources/*/findings/*/securityMarks}"
844        body: "security_marks"
845      }
846      additional_bindings {
847        patch: "/v2/{security_marks.name=projects/*/assets/*/securityMarks}"
848        body: "security_marks"
849      }
850      additional_bindings {
851        patch: "/v2/{security_marks.name=projects/*/sources/*/locations/*/findings/*/securityMarks}"
852        body: "security_marks"
853      }
854    };
855    option (google.api.method_signature) = "security_marks,update_mask";
856  }
857
858  // Updates a source.
859  rpc UpdateSource(UpdateSourceRequest) returns (Source) {
860    option (google.api.http) = {
861      patch: "/v2/{source.name=organizations/*/sources/*}"
862      body: "source"
863    };
864    option (google.api.method_signature) = "source,update_mask";
865  }
866}
867
868// Request message to create multiple resource value configs
869message BatchCreateResourceValueConfigsRequest {
870  // Required. Resource name of the new ResourceValueConfig's parent.
871  // The parent field in the CreateResourceValueConfigRequest
872  // messages must either be empty or match this field.
873  string parent = 1 [
874    (google.api.field_behavior) = REQUIRED,
875    (google.api.resource_reference) = {
876      child_type: "securitycenter.googleapis.com/ResourceValueConfig"
877    }
878  ];
879
880  // Required. The resource value configs to be created.
881  repeated CreateResourceValueConfigRequest requests = 2
882      [(google.api.field_behavior) = REQUIRED];
883}
884
885// Response message for BatchCreateResourceValueConfigs
886message BatchCreateResourceValueConfigsResponse {
887  // The resource value configs created
888  repeated ResourceValueConfig resource_value_configs = 1;
889}
890
891// Request message for bulk findings update.
892//
893// Note:
894// 1. If multiple bulk update requests match the same resource, the order in
895// which they get executed is not defined.
896// 2. Once a bulk operation is started, there is no way to stop it.
897message BulkMuteFindingsRequest {
898  // Required. The parent, at which bulk action needs to be applied. If no
899  // location is specified, findings are updated in global. The following list
900  // shows some examples:
901  //
902  // + `organizations/[organization_id]`
903  // + `organizations/[organization_id]/locations/[location_id]`
904  // + `folders/[folder_id]`
905  // + `folders/[folder_id]/locations/[location_id]`
906  // + `projects/[project_id]`
907  // + `projects/[project_id]/locations/[location_id]`
908  string parent = 1 [
909    (google.api.field_behavior) = REQUIRED,
910    (google.api.resource_reference) = { type: "*" }
911  ];
912
913  // Expression that identifies findings that should be updated.
914  // The expression is a list of zero or more restrictions combined
915  // via logical operators `AND` and `OR`. Parentheses are supported, and `OR`
916  // has higher precedence than `AND`.
917  //
918  // Restrictions have the form `<field> <operator> <value>` and may have a
919  // `-` character in front of them to indicate negation. The fields map to
920  // those defined in the corresponding resource.
921  //
922  // The supported operators are:
923  //
924  // * `=` for all value types.
925  // * `>`, `<`, `>=`, `<=` for integer values.
926  // * `:`, meaning substring matching, for strings.
927  //
928  // The supported value types are:
929  //
930  // * string literals in quotes.
931  // * integer literals without quotes.
932  // * boolean literals `true` and `false` without quotes.
933  string filter = 2;
934}
935
936// The response to a BulkMute request. Contains the LRO information.
937message BulkMuteFindingsResponse {}
938
939// Request message for creating a BigQuery export.
940message CreateBigQueryExportRequest {
941  // Required. The name of the parent resource of the new BigQuery export. Its
942  // format is "organizations/[organization_id]/locations/[location_id]",
943  // "folders/[folder_id]/locations/[location_id]", or
944  // "projects/[project_id]/locations/[location_id]".
945  string parent = 1 [
946    (google.api.field_behavior) = REQUIRED,
947    (google.api.resource_reference) = {
948      child_type: "securitycenter.googleapis.com/BigQueryExport"
949    }
950  ];
951
952  // Required. The BigQuery export being created.
953  BigQueryExport big_query_export = 2 [(google.api.field_behavior) = REQUIRED];
954
955  // Required. Unique identifier provided by the client within the parent scope.
956  // It must consist of only lowercase letters, numbers, and hyphens, must start
957  // with a letter, must end with either a letter or a number, and must be 63
958  // characters or less.
959  string big_query_export_id = 3 [(google.api.field_behavior) = REQUIRED];
960}
961
962// Request message for creating a finding.
963message CreateFindingRequest {
964  // Required. Resource name of the new finding's parent. The following list
965  // shows some examples of the format:
966  // +
967  // `organizations/[organization_id]/sources/[source_id]`
968  // +
969  // `organizations/[organization_id]/sources/[source_id]/locations/[location_id]`
970  string parent = 1 [
971    (google.api.field_behavior) = REQUIRED,
972    (google.api.resource_reference) = {
973      type: "securitycenter.googleapis.com/Source"
974    }
975  ];
976
977  // Required. Unique identifier provided by the client within the parent scope.
978  // It must be alphanumeric and less than or equal to 32 characters and
979  // greater than 0 characters in length.
980  string finding_id = 2 [(google.api.field_behavior) = REQUIRED];
981
982  // Required. The Finding being created. The name and security_marks will be
983  // ignored as they are both output only fields on this resource.
984  Finding finding = 3 [(google.api.field_behavior) = REQUIRED];
985}
986
987// Request message for creating a mute config.
988message CreateMuteConfigRequest {
989  // Required. Resource name of the new mute configs's parent. Its format is
990  // "organizations/[organization_id]/locations/[location_id]",
991  // "folders/[folder_id]/locations/[location_id]", or
992  // "projects/[project_id]/locations/[location_id]".
993  string parent = 1 [
994    (google.api.field_behavior) = REQUIRED,
995    (google.api.resource_reference) = {
996      child_type: "securitycenter.googleapis.com/MuteConfig"
997    }
998  ];
999
1000  // Required. The mute config being created.
1001  MuteConfig mute_config = 2 [(google.api.field_behavior) = REQUIRED];
1002
1003  // Required. Unique identifier provided by the client within the parent scope.
1004  // It must consist of only lowercase letters, numbers, and hyphens, must start
1005  // with a letter, must end with either a letter or a number, and must be 63
1006  // characters or less.
1007  string mute_config_id = 3 [(google.api.field_behavior) = REQUIRED];
1008}
1009
1010// Request message for creating a notification config.
1011message CreateNotificationConfigRequest {
1012  // Required. Resource name of the new notification config's parent. Its format
1013  // is "organizations/[organization_id]/locations/[location_id]",
1014  // "folders/[folder_id]/locations/[location_id]", or
1015  // "projects/[project_id]/locations/[location_id]".
1016  string parent = 1 [
1017    (google.api.field_behavior) = REQUIRED,
1018    (google.api.resource_reference) = {
1019      child_type: "securitycenter.googleapis.com/NotificationConfig"
1020    }
1021  ];
1022
1023  // Required.
1024  // Unique identifier provided by the client within the parent scope.
1025  // It must be between 1 and 128 characters and contain alphanumeric
1026  // characters, underscores, or hyphens only.
1027  string config_id = 2 [(google.api.field_behavior) = REQUIRED];
1028
1029  // Required. The notification config being created. The name and the service
1030  // account will be ignored as they are both output only fields on this
1031  // resource.
1032  NotificationConfig notification_config = 3
1033      [(google.api.field_behavior) = REQUIRED];
1034}
1035
1036// Request message to create single resource value config
1037message CreateResourceValueConfigRequest {
1038  // Required. Resource name of the new ResourceValueConfig's parent.
1039  string parent = 1 [
1040    (google.api.field_behavior) = REQUIRED,
1041    (google.api.resource_reference) = {
1042      child_type: "securitycenter.googleapis.com/ResourceValueConfig"
1043    }
1044  ];
1045
1046  // Required. The resource value config being created.
1047  ResourceValueConfig resource_value_config = 2
1048      [(google.api.field_behavior) = REQUIRED];
1049}
1050
1051// Request message for creating a source.
1052message CreateSourceRequest {
1053  // Required. Resource name of the new source's parent. Its format should be
1054  // "organizations/[organization_id]".
1055  string parent = 1 [
1056    (google.api.field_behavior) = REQUIRED,
1057    (google.api.resource_reference) = {
1058      type: "cloudresourcemanager.googleapis.com/Organization"
1059    }
1060  ];
1061
1062  // Required. The Source being created, only the display_name and description
1063  // will be used. All other fields will be ignored.
1064  Source source = 2 [(google.api.field_behavior) = REQUIRED];
1065}
1066
1067// Request message for deleting a BigQuery export.
1068message DeleteBigQueryExportRequest {
1069  // Required. The name of the BigQuery export to delete. The following list
1070  // shows some examples of the format:
1071  //
1072  // +
1073  // `organizations/{organization}/locations/{location}/bigQueryExports/{export_id}`
1074  // + `folders/{folder}/locations/{location}/bigQueryExports/{export_id}`
1075  // + `projects/{project}/locations/{location}/bigQueryExports/{export_id}`
1076  string name = 1 [
1077    (google.api.field_behavior) = REQUIRED,
1078    (google.api.resource_reference) = {
1079      type: "securitycenter.googleapis.com/BigQueryExport"
1080    }
1081  ];
1082}
1083
1084// Request message for deleting a mute config. If no location is specified,
1085// default is global.
1086message DeleteMuteConfigRequest {
1087  // Required. Name of the mute config to delete. The following list shows some
1088  // examples of the format:
1089  //
1090  // + `organizations/{organization}/muteConfigs/{config_id}`
1091  // +
1092  // `organizations/{organization}/locations/{location}/muteConfigs/{config_id}`
1093  // + `folders/{folder}/muteConfigs/{config_id}`
1094  // + `folders/{folder}/locations/{location}/muteConfigs/{config_id}`
1095  // + `projects/{project}/muteConfigs/{config_id}`
1096  // + `projects/{project}/locations/{location}/muteConfigs/{config_id}`
1097  string name = 1 [
1098    (google.api.field_behavior) = REQUIRED,
1099    (google.api.resource_reference) = {
1100      type: "securitycenter.googleapis.com/MuteConfig"
1101    }
1102  ];
1103}
1104
1105// Request message for deleting a notification config.
1106message DeleteNotificationConfigRequest {
1107  // Required. Name of the notification config to delete. The following list
1108  // shows some examples of the format:
1109  //
1110  // +
1111  // `organizations/[organization_id]/locations/[location_id]/notificationConfigs/[config_id]`
1112  // +
1113  // `folders/[folder_id]/locations/[location_id]notificationConfigs/[config_id]`
1114  // +
1115  // `projects/[project_id]/locations/[location_id]notificationConfigs/[config_id]`
1116  string name = 1 [
1117    (google.api.field_behavior) = REQUIRED,
1118    (google.api.resource_reference) = {
1119      type: "securitycenter.googleapis.com/NotificationConfig"
1120    }
1121  ];
1122}
1123
1124// Request message to delete resource value config
1125message DeleteResourceValueConfigRequest {
1126  // Required. Name of the ResourceValueConfig to delete
1127  string name = 1 [
1128    (google.api.field_behavior) = REQUIRED,
1129    (google.api.resource_reference) = {
1130      type: "securitycenter.googleapis.com/ResourceValueConfig"
1131    }
1132  ];
1133}
1134
1135// Request message for retrieving a BigQuery export.
1136message GetBigQueryExportRequest {
1137  // Required. Name of the BigQuery export to retrieve. The following list shows
1138  // some examples of the format:
1139  //
1140  // +
1141  // `organizations/{organization}/locations/{location}/bigQueryExports/{export_id}`
1142  // + `folders/{folder}/locations/{location}/bigQueryExports/{export_id}`
1143  // + `projects/{project}locations/{location}//bigQueryExports/{export_id}`
1144  string name = 1 [
1145    (google.api.field_behavior) = REQUIRED,
1146    (google.api.resource_reference) = {
1147      type: "securitycenter.googleapis.com/BigQueryExport"
1148    }
1149  ];
1150}
1151
1152// Request message for retrieving a mute config. If no location is specified,
1153// default is global.
1154message GetMuteConfigRequest {
1155  // Required. Name of the mute config to retrieve. The following list shows
1156  // some examples of the format:
1157  //
1158  // + `organizations/{organization}/muteConfigs/{config_id}`
1159  // +
1160  // `organizations/{organization}/locations/{location}/muteConfigs/{config_id}`
1161  // + `folders/{folder}/muteConfigs/{config_id}`
1162  // + `folders/{folder}/locations/{location}/muteConfigs/{config_id}`
1163  // + `projects/{project}/muteConfigs/{config_id}`
1164  // + `projects/{project}/locations/{location}/muteConfigs/{config_id}`
1165  string name = 1 [
1166    (google.api.field_behavior) = REQUIRED,
1167    (google.api.resource_reference) = {
1168      type: "securitycenter.googleapis.com/MuteConfig"
1169    }
1170  ];
1171}
1172
1173// Request message for getting a notification config.
1174message GetNotificationConfigRequest {
1175  // Required. Name of the notification config to get. The following list shows
1176  // some examples of the format:
1177  //
1178  // +
1179  // `organizations/[organization_id]/locations/[location_id]/notificationConfigs/[config_id]`
1180  // +
1181  // `folders/[folder_id]/locations/[location_id]/notificationConfigs/[config_id]`
1182  // +
1183  // `projects/[project_id]/locations/[location_id]/notificationConfigs/[config_id]`
1184  string name = 1 [
1185    (google.api.field_behavior) = REQUIRED,
1186    (google.api.resource_reference) = {
1187      type: "securitycenter.googleapis.com/NotificationConfig"
1188    }
1189  ];
1190}
1191
1192// Request message to get resource value config
1193message GetResourceValueConfigRequest {
1194  // Required. Name of the resource value config to retrieve. Its format is
1195  // organizations/{organization}/resourceValueConfigs/{config_id}.
1196  string name = 1 [
1197    (google.api.field_behavior) = REQUIRED,
1198    (google.api.resource_reference) = {
1199      type: "securitycenter.googleapis.com/ResourceValueConfig"
1200    }
1201  ];
1202}
1203
1204// Request message for getting a source.
1205message GetSourceRequest {
1206  // Required. Relative resource name of the source. Its format is
1207  // "organizations/[organization_id]/source/[source_id]".
1208  string name = 1 [
1209    (google.api.field_behavior) = REQUIRED,
1210    (google.api.resource_reference) = {
1211      type: "securitycenter.googleapis.com/Source"
1212    }
1213  ];
1214}
1215
1216// Request message for grouping by findings.
1217message GroupFindingsRequest {
1218  // Required. Name of the source to groupBy. If no location is specified,
1219  // finding is assumed to be in global.
1220  //  The following list shows some examples:
1221  //
1222  // + `organizations/[organization_id]/sources/[source_id]`
1223  // +
1224  // `organizations/[organization_id]/sources/[source_id]/locations/[location_id]`
1225  // + `folders/[folder_id]/sources/[source_id]`
1226  // + `folders/[folder_id]/sources/[source_id]/locations/[location_id]`
1227  // + `projects/[project_id]/sources/[source_id]`
1228  // + `projects/[project_id]/sources/[source_id]/locations/[location_id]`
1229  //
1230  // To groupBy across all sources provide a source_id of `-`. The following
1231  // list shows some examples:
1232  //
1233  // + `organizations/{organization_id}/sources/-`
1234  // + `organizations/{organization_id}/sources/-/locations/[location_id]`
1235  // + `folders/{folder_id}/sources/-`
1236  // + `folders/{folder_id}/sources/-/locations/[location_id]`
1237  // + `projects/{project_id}/sources/-`
1238  // + `projects/{project_id}/sources/-/locations/[location_id]`
1239  string parent = 1 [
1240    (google.api.field_behavior) = REQUIRED,
1241    (google.api.resource_reference) = {
1242      type: "securitycenter.googleapis.com/Source"
1243    }
1244  ];
1245
1246  // Expression that defines the filter to apply across findings.
1247  // The expression is a list of one or more restrictions combined via logical
1248  // operators `AND` and `OR`.
1249  // Parentheses are supported, and `OR` has higher precedence than `AND`.
1250  //
1251  // Restrictions have the form `<field> <operator> <value>` and may have a `-`
1252  // character in front of them to indicate negation. Examples include:
1253  //
1254  //  * name
1255  //  * security_marks.marks.marka
1256  //
1257  // The supported operators are:
1258  //
1259  // * `=` for all value types.
1260  // * `>`, `<`, `>=`, `<=` for integer values.
1261  // * `:`, meaning substring matching, for strings.
1262  //
1263  // The supported value types are:
1264  //
1265  // * string literals in quotes.
1266  // * integer literals without quotes.
1267  // * boolean literals `true` and `false` without quotes.
1268  //
1269  // The following field and operator combinations are supported:
1270  //
1271  // * name: `=`
1272  // * parent: `=`, `:`
1273  // * resource_name: `=`, `:`
1274  // * state: `=`, `:`
1275  // * category: `=`, `:`
1276  // * external_uri: `=`, `:`
1277  // * event_time: `=`, `>`, `<`, `>=`, `<=`
1278  //
1279  //   Usage: This should be milliseconds since epoch or an RFC3339 string.
1280  //   Examples:
1281  //     `event_time = "2019-06-10T16:07:18-07:00"`
1282  //     `event_time = 1560208038000`
1283  //
1284  // * severity: `=`, `:`
1285  // * security_marks.marks: `=`, `:`
1286  // * resource:
1287  //   * resource.name: `=`, `:`
1288  //   * resource.parent_name: `=`, `:`
1289  //   * resource.parent_display_name: `=`, `:`
1290  //   * resource.project_name: `=`, `:`
1291  //   * resource.project_display_name: `=`, `:`
1292  //   * resource.type: `=`, `:`
1293  string filter = 2;
1294
1295  // Required. Expression that defines what assets fields to use for grouping.
1296  // The string value should follow SQL syntax: comma separated list of fields.
1297  // For example: "parent,resource_name".
1298  //
1299  // The following fields are supported:
1300  //
1301  // * resource_name
1302  // * category
1303  // * state
1304  // * parent
1305  // * severity
1306  string group_by = 3 [(google.api.field_behavior) = REQUIRED];
1307
1308  // The value returned by the last `GroupFindingsResponse`; indicates
1309  // that this is a continuation of a prior `GroupFindings` call, and
1310  // that the system should return the next page of data.
1311  string page_token = 7;
1312
1313  // The maximum number of results to return in a single response. Default is
1314  // 10, minimum is 1, maximum is 1000.
1315  int32 page_size = 8;
1316}
1317
1318// Response message for group by findings.
1319message GroupFindingsResponse {
1320  // Group results. There exists an element for each existing unique
1321  // combination of property/values. The element contains a count for the number
1322  // of times those specific property/values appear.
1323  repeated GroupResult group_by_results = 1;
1324
1325  // Token to retrieve the next page of results, or empty if there are no more
1326  // results.
1327  string next_page_token = 3;
1328
1329  // The total number of results matching the query.
1330  int32 total_size = 4;
1331}
1332
1333// Result containing the properties and count of a groupBy request.
1334message GroupResult {
1335  // Properties matching the groupBy fields in the request.
1336  map<string, google.protobuf.Value> properties = 1;
1337
1338  // Total count of resources for the given properties.
1339  int64 count = 2;
1340}
1341
1342// Request message for listing the attack paths for a given simulation or valued
1343// resource.
1344message ListAttackPathsRequest {
1345  // Required. Name of parent to list attack paths.
1346  //
1347  // Valid formats:
1348  // "organizations/{organization}",
1349  // "organizations/{organization}/simulations/{simulation}"
1350  // "organizations/{organization}/simulations/{simulation}/attackExposureResults/{attack_exposure_result_v2}"
1351  // "organizations/{organization}/simulations/{simulation}/valuedResources/{valued_resource}"
1352  string parent = 1 [
1353    (google.api.field_behavior) = REQUIRED,
1354    (google.api.resource_reference) = {
1355      child_type: "securitycenter.googleapis.com/AttackPath"
1356    }
1357  ];
1358
1359  // The filter expression that filters the attack path in the response.
1360  // Supported fields:
1361  //
1362  //   * `valued_resources` supports =
1363  string filter = 2;
1364
1365  // The value returned by the last `ListAttackPathsResponse`; indicates
1366  // that this is a continuation of a prior `ListAttackPaths` call, and
1367  // that the system should return the next page of data.
1368  string page_token = 3;
1369
1370  // The maximum number of results to return in a single response. Default is
1371  // 10, minimum is 1, maximum is 1000.
1372  int32 page_size = 4;
1373}
1374
1375// Response message for listing the attack paths for a given simulation or
1376// valued resource.
1377message ListAttackPathsResponse {
1378  // The attack paths that the attack path simulation identified.
1379  repeated AttackPath attack_paths = 1;
1380
1381  // Token to retrieve the next page of results, or empty if there are no more
1382  // results.
1383  string next_page_token = 2;
1384}
1385
1386// Request message for getting simulation.
1387// Simulation name can include "latest" to retrieve the latest simulation
1388// For example, "organizations/123/simulations/latest"
1389message GetSimulationRequest {
1390  // Required. The organization name or simulation name of this simulation
1391  //
1392  // Valid format:
1393  // "organizations/{organization}/simulations/latest"
1394  // "organizations/{organization}/simulations/{simulation}"
1395  string name = 1 [
1396    (google.api.field_behavior) = REQUIRED,
1397    (google.api.resource_reference) = {
1398      type: "securitycenter.googleapis.com/Simulation"
1399    }
1400  ];
1401}
1402
1403// Request message for getting a valued resource.
1404message GetValuedResourceRequest {
1405  // Required. The name of this valued resource
1406  //
1407  // Valid format:
1408  // "organizations/{organization}/simulations/{simulation}/valuedResources/{valued_resource}"
1409  string name = 1 [
1410    (google.api.field_behavior) = REQUIRED,
1411    (google.api.resource_reference) = {
1412      type: "securitycenter.googleapis.com/ValuedResource"
1413    }
1414  ];
1415}
1416
1417// Request message for listing BigQuery exports at a given scope e.g.
1418// organization, folder or project.
1419message ListBigQueryExportsRequest {
1420  // Required. The parent, which owns the collection of BigQuery exports. Its
1421  // format is "organizations/[organization_id]/locations/[location_id]",
1422  // "folders/[folder_id]/locations/[location_id]", or
1423  // "projects/[project_id]/locations/[location_id]".
1424  string parent = 1 [
1425    (google.api.field_behavior) = REQUIRED,
1426    (google.api.resource_reference) = {
1427      child_type: "securitycenter.googleapis.com/BigQueryExport"
1428    }
1429  ];
1430
1431  // The maximum number of configs to return. The service may return fewer than
1432  // this value.
1433  // If unspecified, at most 10 configs will be returned.
1434  // The maximum value is 1000; values above 1000 will be coerced to 1000.
1435  int32 page_size = 2;
1436
1437  // A page token, received from a previous `ListBigQueryExports` call.
1438  // Provide this to retrieve the subsequent page.
1439  // When paginating, all other parameters provided to `ListBigQueryExports`
1440  // must match the call that provided the page token.
1441  string page_token = 3;
1442}
1443
1444// Response message for listing BigQuery exports.
1445message ListBigQueryExportsResponse {
1446  // The BigQuery exports from the specified parent.
1447  repeated BigQueryExport big_query_exports = 1;
1448
1449  // A token, which can be sent as `page_token` to retrieve the next page.
1450  // If this field is omitted, there are no subsequent pages.
1451  string next_page_token = 2;
1452}
1453
1454// Request message for listing findings.
1455message ListFindingsRequest {
1456  // Required. Name of the source the findings belong to. If no location is
1457  // specified, the default is global. The following list shows some examples:
1458  //
1459  // + `organizations/[organization_id]/sources/[source_id]`
1460  // +
1461  // `organizations/[organization_id]/sources/[source_id]/locations/[location_id]`
1462  // + `folders/[folder_id]/sources/[source_id]`
1463  // + `folders/[folder_id]/sources/[source_id]/locations/[location_id]`
1464  // + `projects/[project_id]/sources/[source_id]`
1465  // + `projects/[project_id]/sources/[source_id]/locations/[location_id]`
1466  //
1467  // To list across all sources provide a source_id of `-`. The following
1468  // list shows some examples:
1469  //
1470  // + `organizations/{organization_id}/sources/-`
1471  // + `organizations/{organization_id}/sources/-/locations/{location_id}`
1472  // + `folders/{folder_id}/sources/-`
1473  // + `folders/{folder_id}/sources/-locations/{location_id}`
1474  // + `projects/{projects_id}/sources/-`
1475  // + `projects/{projects_id}/sources/-/locations/{location_id}`
1476  string parent = 1 [
1477    (google.api.field_behavior) = REQUIRED,
1478    (google.api.resource_reference) = {
1479      type: "securitycenter.googleapis.com/Source"
1480    }
1481  ];
1482
1483  // Expression that defines the filter to apply across findings.
1484  // The expression is a list of one or more restrictions combined via logical
1485  // operators `AND` and `OR`.
1486  // Parentheses are supported, and `OR` has higher precedence than `AND`.
1487  //
1488  // Restrictions have the form `<field> <operator> <value>` and may have a `-`
1489  // character in front of them to indicate negation. Examples include:
1490  //
1491  //  * name
1492  //  * security_marks.marks.marka
1493  //
1494  // The supported operators are:
1495  //
1496  // * `=` for all value types.
1497  // * `>`, `<`, `>=`, `<=` for integer values.
1498  // * `:`, meaning substring matching, for strings.
1499  //
1500  // The supported value types are:
1501  //
1502  // * string literals in quotes.
1503  // * integer literals without quotes.
1504  // * boolean literals `true` and `false` without quotes.
1505  //
1506  // The following field and operator combinations are supported:
1507  //
1508  // * name: `=`
1509  // * parent: `=`, `:`
1510  // * resource_name: `=`, `:`
1511  // * state: `=`, `:`
1512  // * category: `=`, `:`
1513  // * external_uri: `=`, `:`
1514  // * event_time: `=`, `>`, `<`, `>=`, `<=`
1515  //
1516  //   Usage: This should be milliseconds since epoch or an RFC3339 string.
1517  //   Examples:
1518  //     `event_time = "2019-06-10T16:07:18-07:00"`
1519  //     `event_time = 1560208038000`
1520  //
1521  // * severity: `=`, `:`
1522  // * security_marks.marks: `=`, `:`
1523  // * resource:
1524  //   * resource.name: `=`, `:`
1525  //   * resource.parent_name: `=`, `:`
1526  //   * resource.parent_display_name: `=`, `:`
1527  //   * resource.project_name: `=`, `:`
1528  //   * resource.project_display_name: `=`, `:`
1529  //   * resource.type: `=`, `:`
1530  //   * resource.folders.resource_folder: `=`, `:`
1531  //   * resource.display_name: `=`, `:`
1532  string filter = 2;
1533
1534  // Expression that defines what fields and order to use for sorting. The
1535  // string value should follow SQL syntax: comma separated list of fields. For
1536  // example: "name,parent". The default sorting order
1537  // is ascending. To specify descending order for a field, a suffix " desc"
1538  // should be appended to the field name. For example: "name
1539  // desc,parent". Redundant space characters in the
1540  // syntax are insignificant. "name desc,parent" and "
1541  // name     desc  ,   parent  " are equivalent.
1542  //
1543  // The following fields are supported:
1544  // name
1545  // parent
1546  // state
1547  // category
1548  // resource_name
1549  // event_time
1550  // security_marks.marks
1551  string order_by = 3;
1552
1553  // A field mask to specify the Finding fields to be listed in the response.
1554  // An empty field mask will list all fields.
1555  google.protobuf.FieldMask field_mask = 7;
1556
1557  // The value returned by the last `ListFindingsResponse`; indicates
1558  // that this is a continuation of a prior `ListFindings` call, and
1559  // that the system should return the next page of data.
1560  string page_token = 8;
1561
1562  // The maximum number of results to return in a single response. Default is
1563  // 10, minimum is 1, maximum is 1000.
1564  int32 page_size = 9;
1565}
1566
1567// Response message for listing findings.
1568message ListFindingsResponse {
1569  // Result containing the Finding.
1570  message ListFindingsResult {
1571    // Information related to the Google Cloud resource that is
1572    // associated with this finding.
1573    message Resource {
1574      // The full resource name of the resource. See:
1575      // https://cloud.google.com/apis/design/resource_names#full_resource_name
1576      string name = 1;
1577
1578      // The human readable name of the resource.
1579      string display_name = 2;
1580
1581      // The full resource type of the resource.
1582      string type = 3;
1583    }
1584
1585    // Finding matching the search request.
1586    Finding finding = 1;
1587
1588    // Output only. Resource that is associated with this finding.
1589    Resource resource = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
1590  }
1591
1592  // Findings matching the list request.
1593  repeated ListFindingsResult list_findings_results = 1;
1594
1595  // Token to retrieve the next page of results, or empty if there are no more
1596  // results.
1597  string next_page_token = 3;
1598
1599  // The total number of findings matching the query.
1600  int32 total_size = 4;
1601}
1602
1603// Request message for listing  mute configs at a given scope e.g. organization,
1604// folder or project. If no location is specified, default is
1605// global.
1606message ListMuteConfigsRequest {
1607  // Required. The parent, which owns the collection of mute configs. Its format
1608  // is "organizations/[organization_id]", "folders/[folder_id]",
1609  // "projects/[project_id]",
1610  // "organizations/[organization_id]/locations/[location_id]",
1611  // "folders/[folder_id]/locations/[location_id]",
1612  // "projects/[project_id]/locations/[location_id]".
1613  string parent = 1 [
1614    (google.api.field_behavior) = REQUIRED,
1615    (google.api.resource_reference) = {
1616      child_type: "securitycenter.googleapis.com/MuteConfig"
1617    }
1618  ];
1619
1620  // The maximum number of configs to return. The service may return fewer than
1621  // this value.
1622  // If unspecified, at most 10 configs will be returned.
1623  // The maximum value is 1000; values above 1000 will be coerced to 1000.
1624  int32 page_size = 2;
1625
1626  // A page token, received from a previous `ListMuteConfigs` call.
1627  // Provide this to retrieve the subsequent page.
1628  //
1629  // When paginating, all other parameters provided to `ListMuteConfigs` must
1630  // match the call that provided the page token.
1631  string page_token = 3;
1632}
1633
1634// Response message for listing mute configs.
1635message ListMuteConfigsResponse {
1636  // The mute configs from the specified parent.
1637  repeated MuteConfig mute_configs = 1;
1638
1639  // A token, which can be sent as `page_token` to retrieve the next page.
1640  // If this field is omitted, there are no subsequent pages.
1641  string next_page_token = 2;
1642}
1643
1644// Request message for listing notification configs.
1645message ListNotificationConfigsRequest {
1646  // Required. The name of the parent in which to list the notification
1647  // configurations. Its format is
1648  // "organizations/[organization_id]/locations/[location_id]",
1649  // "folders/[folder_id]/locations/[location_id]", or
1650  // "projects/[project_id]/locations/[location_id]".
1651  string parent = 1 [
1652    (google.api.field_behavior) = REQUIRED,
1653    (google.api.resource_reference) = {
1654      child_type: "securitycenter.googleapis.com/NotificationConfig"
1655    }
1656  ];
1657
1658  // The value returned by the last `ListNotificationConfigsResponse`; indicates
1659  // that this is a continuation of a prior `ListNotificationConfigs` call, and
1660  // that the system should return the next page of data.
1661  string page_token = 2;
1662
1663  // The maximum number of results to return in a single response. Default is
1664  // 10, minimum is 1, maximum is 1000.
1665  int32 page_size = 3;
1666}
1667
1668// Response message for listing notification configs.
1669message ListNotificationConfigsResponse {
1670  // Notification configs belonging to the requested parent.
1671  repeated NotificationConfig notification_configs = 1;
1672
1673  // Token to retrieve the next page of results, or empty if there are no more
1674  // results.
1675  string next_page_token = 2;
1676}
1677
1678// Request message to list resource value configs of a parent
1679message ListResourceValueConfigsRequest {
1680  // Required. The parent, which owns the collection of resource value configs.
1681  // Its format is
1682  // "organizations/[organization_id]"
1683  string parent = 1 [
1684    (google.api.field_behavior) = REQUIRED,
1685    (google.api.resource_reference) = {
1686      child_type: "securitycenter.googleapis.com/ResourceValueConfig"
1687    }
1688  ];
1689
1690  // The maximum number of configs to return. The service may return fewer than
1691  // this value.
1692  // If unspecified, at most 10 configs will be returned.
1693  // The maximum value is 1000; values above 1000 will be coerced to 1000.
1694  int32 page_size = 2;
1695
1696  // A page token, received from a previous `ListResourceValueConfigs` call.
1697  // Provide this to retrieve the subsequent page.
1698  //
1699  // When paginating, all other parameters provided to
1700  // `ListResourceValueConfigs` must match the call that provided the
1701  // page token.
1702  //
1703  // page_size can be specified, and the new page_size will be used.
1704  string page_token = 3;
1705}
1706
1707// Response message to list resource value configs
1708message ListResourceValueConfigsResponse {
1709  // The resource value configs from the specified parent.
1710  repeated ResourceValueConfig resource_value_configs = 1;
1711
1712  // A token, which can be sent as `page_token` to retrieve the next page.
1713  // If this field is empty, there are no subsequent pages.
1714  string next_page_token = 2;
1715}
1716
1717// Request message for listing sources.
1718message ListSourcesRequest {
1719  // Required. Resource name of the parent of sources to list. Its format should
1720  // be "organizations/[organization_id]", "folders/[folder_id]", or
1721  // "projects/[project_id]".
1722  string parent = 1 [
1723    (google.api.field_behavior) = REQUIRED,
1724    (google.api.resource_reference) = {
1725      child_type: "securitycenter.googleapis.com/Source"
1726    }
1727  ];
1728
1729  // The value returned by the last `ListSourcesResponse`; indicates
1730  // that this is a continuation of a prior `ListSources` call, and
1731  // that the system should return the next page of data.
1732  string page_token = 2;
1733
1734  // The maximum number of results to return in a single response. Default is
1735  // 10, minimum is 1, maximum is 1000.
1736  int32 page_size = 7;
1737}
1738
1739// Response message for listing sources.
1740message ListSourcesResponse {
1741  // Sources belonging to the requested parent.
1742  repeated Source sources = 1;
1743
1744  // Token to retrieve the next page of results, or empty if there are no more
1745  // results.
1746  string next_page_token = 2;
1747}
1748
1749// Request message for listing the valued resources for a given simulation.
1750message ListValuedResourcesRequest {
1751  // Required. Name of parent to list exposed resources.
1752  //
1753  // Valid formats:
1754  // "organizations/{organization}",
1755  // "organizations/{organization}/simulations/{simulation}"
1756  // "organizations/{organization}/simulations/{simulation}/attackExposureResults/{attack_exposure_result_v2}"
1757  string parent = 1 [
1758    (google.api.field_behavior) = REQUIRED,
1759    (google.api.resource_reference) = {
1760      child_type: "securitycenter.googleapis.com/ValuedResource"
1761    }
1762  ];
1763
1764  // The filter expression that filters the valued resources in the response.
1765  // Supported fields:
1766  //
1767  //   * `resource_value` supports =
1768  //   * `resource_type` supports =
1769  string filter = 2;
1770
1771  // The value returned by the last `ListValuedResourcesResponse`; indicates
1772  // that this is a continuation of a prior `ListValuedResources` call, and
1773  // that the system should return the next page of data.
1774  string page_token = 3;
1775
1776  // The maximum number of results to return in a single response. Default is
1777  // 10, minimum is 1, maximum is 1000.
1778  int32 page_size = 4;
1779
1780  // Optional. The fields by which to order the valued resources response.
1781  //
1782  // Supported fields:
1783  //
1784  //   * `exposed_score`
1785  //
1786  //   * `resource_value`
1787  //
1788  //   * `resource_type`
1789  //
1790  // Values should be a comma separated list of fields. For example:
1791  // `exposed_score,resource_value`.
1792  //
1793  // The default sorting order is descending. To specify ascending or descending
1794  // order for a field, append a " ASC" or a " DESC" suffix, respectively; for
1795  // example: `exposed_score DESC`.
1796  string order_by = 5 [(google.api.field_behavior) = OPTIONAL];
1797}
1798
1799// Response message for listing the valued resources for a given simulation.
1800message ListValuedResourcesResponse {
1801  // The valued resources that the attack path simulation identified.
1802  repeated ValuedResource valued_resources = 1;
1803
1804  // Token to retrieve the next page of results, or empty if there are no more
1805  // results.
1806  string next_page_token = 2;
1807
1808  // The estimated total number of results matching the query.
1809  int32 total_size = 3;
1810}
1811
1812// Request message for updating a finding's state.
1813message SetFindingStateRequest {
1814  // Required. The [relative resource
1815  // name](https://cloud.google.com/apis/design/resource_names#relative_resource_name)
1816  // of the finding. If no location is specified, finding is assumed to be in
1817  // global. The following list shows some examples:
1818  //
1819  // +
1820  // `organizations/{organization_id}/sources/{source_id}/findings/{finding_id}`
1821  // +
1822  // `organizations/{organization_id}/sources/{source_id}/locations/{location_id}/findings/{finding_id}`
1823  // + `folders/{folder_id}/sources/{source_id}/findings/{finding_id}`
1824  // +
1825  // `folders/{folder_id}/sources/{source_id}/locations/{location_id}/findings/{finding_id}`
1826  // + `projects/{project_id}/sources/{source_id}/findings/{finding_id}`
1827  // +
1828  // `projects/{project_id}/sources/{source_id}/locations/{location_id}/findings/{finding_id}`
1829  string name = 1 [
1830    (google.api.field_behavior) = REQUIRED,
1831    (google.api.resource_reference) = {
1832      type: "securitycenter.googleapis.com/Finding"
1833    }
1834  ];
1835
1836  // Required. The desired State of the finding.
1837  Finding.State state = 2 [(google.api.field_behavior) = REQUIRED];
1838}
1839
1840// Request message for updating a finding's mute status.
1841message SetMuteRequest {
1842  // Required. The [relative resource
1843  // name](https://cloud.google.com/apis/design/resource_names#relative_resource_name)
1844  // of the finding. If no location is specified, finding is assumed to be in
1845  // global. The following list shows some examples:
1846  //
1847  // +
1848  // `organizations/{organization_id}/sources/{source_id}/findings/{finding_id}`
1849  // +
1850  // `organizations/{organization_id}/sources/{source_id}/locations/{location_id}/findings/{finding_id}`
1851  // + `folders/{folder_id}/sources/{source_id}/findings/{finding_id}`
1852  // +
1853  // `folders/{folder_id}/sources/{source_id}/locations/{location_id}/findings/{finding_id}`
1854  // + `projects/{project_id}/sources/{source_id}/findings/{finding_id}`
1855  // +
1856  // `projects/{project_id}/sources/{source_id}/locations/{location_id}/findings/{finding_id}`
1857  string name = 1 [
1858    (google.api.field_behavior) = REQUIRED,
1859    (google.api.resource_reference) = {
1860      type: "securitycenter.googleapis.com/Finding"
1861    }
1862  ];
1863
1864  // Required. The desired state of the Mute.
1865  Finding.Mute mute = 2 [(google.api.field_behavior) = REQUIRED];
1866}
1867
1868// Request message for updating a BigQuery export.
1869message UpdateBigQueryExportRequest {
1870  // Required. The BigQuery export being updated.
1871  BigQueryExport big_query_export = 1 [(google.api.field_behavior) = REQUIRED];
1872
1873  // The list of fields to be updated.
1874  // If empty all mutable fields will be updated.
1875  google.protobuf.FieldMask update_mask = 2;
1876}
1877
1878// Request message for updating a ExternalSystem resource.
1879message UpdateExternalSystemRequest {
1880  // Required. The external system resource to update.
1881  ExternalSystem external_system = 1 [(google.api.field_behavior) = REQUIRED];
1882
1883  // The FieldMask to use when updating the external system resource.
1884  //
1885  // If empty all mutable fields will be updated.
1886  google.protobuf.FieldMask update_mask = 2;
1887}
1888
1889// Request message for updating or creating a finding.
1890message UpdateFindingRequest {
1891  // Required. The finding resource to update or create if it does not already
1892  // exist. parent, security_marks, and update_time will be ignored.
1893  //
1894  // In the case of creation, the finding id portion of the name must be
1895  // alphanumeric and less than or equal to 32 characters and greater than 0
1896  // characters in length.
1897  Finding finding = 1 [(google.api.field_behavior) = REQUIRED];
1898
1899  // The FieldMask to use when updating the finding resource. This field should
1900  // not be specified when creating a finding.
1901  //
1902  // When updating a finding, an empty mask is treated as updating all mutable
1903  // fields and replacing source_properties.  Individual source_properties can
1904  // be added/updated by using "source_properties.<property key>" in the field
1905  // mask.
1906  google.protobuf.FieldMask update_mask = 2;
1907}
1908
1909// Request message for updating a mute config.
1910message UpdateMuteConfigRequest {
1911  // Required. The mute config being updated.
1912  MuteConfig mute_config = 1 [(google.api.field_behavior) = REQUIRED];
1913
1914  // The list of fields to be updated.
1915  // If empty all mutable fields will be updated.
1916  google.protobuf.FieldMask update_mask = 2;
1917}
1918
1919// Request message for updating a notification config.
1920message UpdateNotificationConfigRequest {
1921  // Required. The notification config to update.
1922  NotificationConfig notification_config = 1
1923      [(google.api.field_behavior) = REQUIRED];
1924
1925  // The FieldMask to use when updating the notification config.
1926  //
1927  // If empty all mutable fields will be updated.
1928  google.protobuf.FieldMask update_mask = 2;
1929}
1930
1931// Request message to update resource value config
1932message UpdateResourceValueConfigRequest {
1933  // Required. The resource value config being updated.
1934  ResourceValueConfig resource_value_config = 1
1935      [(google.api.field_behavior) = REQUIRED];
1936
1937  // The list of fields to be updated.
1938  // If empty all mutable fields will be updated.
1939  google.protobuf.FieldMask update_mask = 2;
1940}
1941
1942// Request message for updating a SecurityMarks resource.
1943message UpdateSecurityMarksRequest {
1944  // Required. The security marks resource to update.
1945  SecurityMarks security_marks = 1 [(google.api.field_behavior) = REQUIRED];
1946
1947  // The FieldMask to use when updating the security marks resource.
1948  //
1949  // The field mask must not contain duplicate fields.
1950  // If empty or set to "marks", all marks will be replaced.  Individual
1951  // marks can be updated using "marks.<mark_key>".
1952  google.protobuf.FieldMask update_mask = 2;
1953}
1954
1955// Request message for updating a source.
1956message UpdateSourceRequest {
1957  // Required. The source resource to update.
1958  Source source = 1 [(google.api.field_behavior) = REQUIRED];
1959
1960  // The FieldMask to use when updating the source resource.
1961  //
1962  // If empty all mutable fields will be updated.
1963  google.protobuf.FieldMask update_mask = 2;
1964}
1965