• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2020 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.settings.v1beta1;
18
19import "google/api/annotations.proto";
20import "google/api/client.proto";
21import "google/api/field_behavior.proto";
22import "google/api/resource.proto";
23import "google/cloud/securitycenter/settings/v1beta1/component_settings.proto";
24import "google/cloud/securitycenter/settings/v1beta1/detector.proto";
25import "google/cloud/securitycenter/settings/v1beta1/settings.proto";
26import "google/protobuf/empty.proto";
27import "google/protobuf/field_mask.proto";
28
29option cc_enable_arenas = true;
30option csharp_namespace = "Google.Cloud.SecurityCenter.Settings.V1Beta1";
31option go_package = "cloud.google.com/go/securitycenter/settings/apiv1beta1/settingspb;settingspb";
32option java_multiple_files = true;
33option java_outer_classname = "SettingsServiceProto";
34option java_package = "com.google.cloud.securitycenter.settings.v1beta1";
35option php_namespace = "Google\\Cloud\\SecurityCenter\\Settings\\V1beta1";
36option ruby_package = "Google::Cloud::SecurityCenter::Settings::V1beta1";
37
38// ## API Overview
39//
40// The SecurityCenterSettingsService is a sub-api of
41// `securitycenter.googleapis.com`. The service provides methods to manage
42// Security Center Settings, and Component Settings for GCP organizations,
43// folders, projects, and clusters.
44service SecurityCenterSettingsService {
45  option (google.api.default_host) = "securitycenter.googleapis.com";
46  option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform";
47
48  // Retrieves the organizations service account, if it exists, otherwise it
49  // creates the organization service account. This API is idempotent and
50  // will only create a service account once. On subsequent calls it will
51  // return the previously created service account.  SHA, SCC and CTD Infra
52  // Automation will use this SA.  This SA will not have any permissions when
53  // created.  The UI will provision this via IAM or the user will using
54  // their own internal process. This API only creates SAs on the organization.
55  // Folders are not supported and projects will use per-project SAs associated
56  // with APIs enabled on a project. This API will be called by the UX
57  // onboarding workflow.
58  rpc GetServiceAccount(GetServiceAccountRequest) returns (ServiceAccount) {
59    option (google.api.http) = {
60      get: "/settings/v1beta1/{name=organizations/*/serviceAccount}"
61    };
62    option (google.api.method_signature) = "name";
63  }
64
65  // Gets the Settings.
66  rpc GetSettings(GetSettingsRequest) returns (Settings) {
67    option (google.api.http) = {
68      get: "/settings/v1beta1/{name=organizations/*/settings}"
69      additional_bindings {
70        get: "/settings/v1beta1/{name=folders/*/settings}"
71      }
72      additional_bindings {
73        get: "/settings/v1beta1/{name=projects/*/settings}"
74      }
75      additional_bindings {
76        get: "/settings/v1beta1/{name=projects/*/locations/*/clusters/*/settings}"
77      }
78      additional_bindings {
79        get: "/settings/v1beta1/{name=projects/*/regions/*/clusters/*/settings}"
80      }
81      additional_bindings {
82        get: "/settings/v1beta1/{name=projects/*/zones/*/clusters/*/settings}"
83      }
84    };
85    option (google.api.method_signature) = "name";
86  }
87
88  // Updates the Settings.
89  rpc UpdateSettings(UpdateSettingsRequest) returns (Settings) {
90    option (google.api.http) = {
91      patch: "/settings/v1beta1/{settings.name=organizations/*/settings}"
92      body: "settings"
93      additional_bindings {
94        patch: "/settings/v1beta1/{settings.name=folders/*/settings}"
95        body: "settings"
96      }
97      additional_bindings {
98        patch: "/settings/v1beta1/{settings.name=projects/*/settings}"
99        body: "settings"
100      }
101      additional_bindings {
102        patch: "/settings/v1beta1/{settings.name=projects/*/locations/*/clusters/*/settings}"
103        body: "settings"
104      }
105      additional_bindings {
106        patch: "/settings/v1beta1/{settings.name=projects/*/regions/*/clusters/*/settings}"
107        body: "settings"
108      }
109      additional_bindings {
110        patch: "/settings/v1beta1/{settings.name=projects/*/zones/*/clusters/*/settings}"
111        body: "settings"
112      }
113    };
114    option (google.api.method_signature) = "settings,update_mask";
115  }
116
117  // Reset the organization, folder or project's settings and return
118  // the settings of just that resource to the default.
119  //
120  // Settings are present at the organization, folder, project, and cluster
121  // levels. Using Reset on a sub-organization level will remove that resource's
122  // override and result in the parent's settings being used (eg: if Reset on a
123  // cluster, project settings will be used).
124  //
125  // Using Reset on organization will remove the override that was set and
126  // result in default settings being used.
127  rpc ResetSettings(ResetSettingsRequest) returns (google.protobuf.Empty) {
128    option (google.api.http) = {
129      post: "/settings/v1beta1/{name=organizations/*/settings}:reset"
130      body: "*"
131      additional_bindings {
132        post: "/settings/v1beta1/{name=folders/*/settings}:reset"
133        body: "*"
134      }
135      additional_bindings {
136        post: "/settings/v1beta1/{name=projects/*/settings}:reset"
137        body: "*"
138      }
139      additional_bindings {
140        post: "/settings/v1beta1/{name=projects/*/locations/*/clusters/*/settings}:reset"
141        body: "*"
142      }
143      additional_bindings {
144        post: "/settings/v1beta1/{name=projects/*/regions/*/clusters/*/settings}:reset"
145        body: "*"
146      }
147      additional_bindings {
148        post: "/settings/v1beta1/{name=projects/*/zones/*/clusters/*/settings}:reset"
149        body: "*"
150      }
151    };
152  }
153
154  // Gets a list of settings.
155  rpc BatchGetSettings(BatchGetSettingsRequest) returns (BatchGetSettingsResponse) {
156    option (google.api.http) = {
157      get: "/settings/v1beta1/{parent=organizations/*}/settings:batchGet"
158    };
159  }
160
161  // CalculateEffectiveSettings looks up all of the Security Center
162  // Settings resources in the GCP resource hierarchy, and calculates the
163  // effective settings on that resource by applying the following rules:
164  //  * Settings provided closer to the target resource take precedence over
165  //    those further away (e.g. folder will override organization level
166  //    settings).
167  //  * Product defaults can be overridden at org, folder, project, and cluster
168  //  levels.
169  //  * Detectors will be filtered out if they belong to a billing tier the
170  //  customer
171  //    has not configured.
172  rpc CalculateEffectiveSettings(CalculateEffectiveSettingsRequest) returns (Settings) {
173    option (google.api.http) = {
174      get: "/settings/v1beta1/{name=organizations/*/effectiveSettings}:calculate"
175      additional_bindings {
176        get: "/settings/v1beta1/{name=folders/*/effectiveSettings}:calculate"
177      }
178      additional_bindings {
179        get: "/settings/v1beta1/{name=projects/*/effectiveSettings}:calculate"
180      }
181      additional_bindings {
182        get: "/settings/v1beta1/{name=projects/*/locations/*/clusters/*/effectiveSettings}:calculate"
183      }
184      additional_bindings {
185        get: "/settings/v1beta1/{name=projects/*/regions/*/clusters/*/effectiveSettings}:calculate"
186      }
187      additional_bindings {
188        get: "/settings/v1beta1/{name=projects/*/zones/*/clusters/*/effectiveSettings}:calculate"
189      }
190    };
191    option (google.api.method_signature) = "name";
192  }
193
194  // Gets a list of effective settings.
195  rpc BatchCalculateEffectiveSettings(BatchCalculateEffectiveSettingsRequest) returns (BatchCalculateEffectiveSettingsResponse) {
196    option (google.api.http) = {
197      post: "/settings/v1beta1/{parent=organizations/*}/effectiveSettings:batchCalculate"
198      body: "*"
199    };
200  }
201
202  // Gets the Component Settings.
203  rpc GetComponentSettings(GetComponentSettingsRequest) returns (ComponentSettings) {
204    option (google.api.http) = {
205      get: "/settings/v1beta1/{name=organizations/*/components/*/settings}"
206      additional_bindings {
207        get: "/settings/v1beta1/{name=folders/*/components/*/settings}"
208      }
209      additional_bindings {
210        get: "/settings/v1beta1/{name=projects/*/components/*/settings}"
211      }
212      additional_bindings {
213        get: "/settings/v1beta1/{name=projects/*/locations/*/clusters/*/components/*/settings}"
214      }
215      additional_bindings {
216        get: "/settings/v1beta1/{name=projects/*/regions/*/clusters/*/components/*/settings}"
217      }
218      additional_bindings {
219        get: "/settings/v1beta1/{name=projects/*/zones/*/clusters/*/components/*/settings}"
220      }
221    };
222    option (google.api.method_signature) = "name";
223  }
224
225  // Updates the Component Settings.
226  rpc UpdateComponentSettings(UpdateComponentSettingsRequest) returns (ComponentSettings) {
227    option (google.api.http) = {
228      patch: "/settings/v1beta1/{component_settings.name=organizations/*/components/*/settings}"
229      body: "component_settings"
230      additional_bindings {
231        patch: "/settings/v1beta1/{component_settings.name=folders/*/components/*/settings}"
232        body: "component_settings"
233      }
234      additional_bindings {
235        patch: "/settings/v1beta1/{component_settings.name=projects/*/components/*/settings}"
236        body: "component_settings"
237      }
238      additional_bindings {
239        patch: "/settings/v1beta1/{component_settings.name=projects/*/locations/*/clusters/*/components/*/settings}"
240        body: "component_settings"
241      }
242      additional_bindings {
243        patch: "/settings/v1beta1/{component_settings.name=projects/*/regions/*/clusters/*/components/*/settings}"
244        body: "component_settings"
245      }
246      additional_bindings {
247        patch: "/settings/v1beta1/{component_settings.name=projects/*/zones/*/clusters/*/components/*/settings}"
248        body: "component_settings"
249      }
250    };
251    option (google.api.method_signature) = "component_settings,update_mask";
252  }
253
254  // Reset the organization, folder or project's component settings and return
255  // the settings to the default. Settings are present at the
256  // organization, folder and project levels. Using Reset for a folder or
257  // project will remove the override that was set and result in the
258  // organization-level settings being used.
259  rpc ResetComponentSettings(ResetComponentSettingsRequest) returns (google.protobuf.Empty) {
260    option (google.api.http) = {
261      post: "/settings/v1beta1/{name=organizations/*/components/*/settings}:reset"
262      body: "*"
263      additional_bindings {
264        post: "/settings/v1beta1/{name=folders/*/components/*/settings}:reset"
265        body: "*"
266      }
267      additional_bindings {
268        post: "/settings/v1beta1/{name=projects/*/components/*/settings}:reset"
269        body: "*"
270      }
271      additional_bindings {
272        post: "/settings/v1beta1/{name=projects/*/locations/*/clusters/*/components/*/settings}:reset"
273        body: "*"
274      }
275      additional_bindings {
276        post: "/settings/v1beta1/{name=projects/*/regions/*/clusters/*/components/*/settings}:reset"
277        body: "*"
278      }
279      additional_bindings {
280        post: "/settings/v1beta1/{name=projects/*/zones/*/clusters/*/components/*/settings}:reset"
281        body: "*"
282      }
283    };
284  }
285
286  // Gets the Effective Component Settings.
287  rpc CalculateEffectiveComponentSettings(CalculateEffectiveComponentSettingsRequest) returns (ComponentSettings) {
288    option (google.api.http) = {
289      get: "/settings/v1beta1/{name=organizations/*/components/*/effectiveSettings}:calculate"
290      additional_bindings {
291        get: "/settings/v1beta1/{name=folders/*/components/*/effectiveSettings}:calculate"
292      }
293      additional_bindings {
294        get: "/settings/v1beta1/{name=projects/*/components/*/effectiveSettings}:calculate"
295      }
296      additional_bindings {
297        get: "/settings/v1beta1/{name=projects/*/locations/*/clusters/*/components/*/effectiveSettings}:calculate"
298      }
299      additional_bindings {
300        get: "/settings/v1beta1/{name=projects/*/regions/*/clusters/*/components/*/effectiveSettings}:calculate"
301      }
302      additional_bindings {
303        get: "/settings/v1beta1/{name=projects/*/zones/*/clusters/*/components/*/effectiveSettings}:calculate"
304      }
305    };
306    option (google.api.method_signature) = "name";
307  }
308
309  // Retrieves an unordered list of available detectors.
310  rpc ListDetectors(ListDetectorsRequest) returns (ListDetectorsResponse) {
311    option (google.api.http) = {
312      get: "/settings/v1beta1/{parent=organizations/*}/detectors"
313    };
314    option (google.api.method_signature) = "parent";
315  }
316
317  // Retrieves an unordered list of available SCC components.
318  rpc ListComponents(ListComponentsRequest) returns (ListComponentsResponse) {
319    option (google.api.http) = {
320      get: "/settings/v1beta1/{parent=organizations/*}/components"
321    };
322    option (google.api.method_signature) = "parent";
323  }
324}
325
326// Request message for GetServiceAccount.
327message GetServiceAccountRequest {
328  // Required. The relative resource name of the service account resource.
329  // Format:
330  //  * `organizations/{organization}/serviceAccount`
331  string name = 1 [
332    (google.api.field_behavior) = REQUIRED,
333    (google.api.resource_reference) = {
334      type: "securitycenter.googleapis.com/ServiceAccount"
335    }
336  ];
337}
338
339// An organization-level service account to be used by threat detection
340// components.
341message ServiceAccount {
342  option (google.api.resource) = {
343    type: "securitycenter.googleapis.com/ServiceAccount"
344    pattern: "organizations/{organization}/serviceAccount"
345  };
346
347  // The relative resource name of the service account resource.
348  // Format:
349  //  * `organizations/{organization}/serviceAccount`
350  string name = 1;
351
352  // Security Center managed service account for the organization
353  // example service-org-1234@scc.iam.gserviceaccount.com
354  // This service_account will be stored in the ComponentSettings field for the
355  // SCC, SHA, and Infra Automation components.
356  string service_account = 2;
357}
358
359// Request message for GetSettings.
360message GetSettingsRequest {
361  // Required. The name of the settings to retrieve.
362  // Formats:
363  //  * `organizations/{organization}/settings`
364  //  * `folders/{folder}/settings`
365  //  * `projects/{project}/settings`
366  //  * `projects/{project}/locations/{location}/clusters/{cluster}/settings`
367  //  * `projects/{project}/regions/{region}/clusters/{cluster}/settings`
368  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/settings`
369  string name = 1 [
370    (google.api.field_behavior) = REQUIRED,
371    (google.api.resource_reference) = {
372      type: "securitycenter.googleapis.com/Settings"
373    }
374  ];
375}
376
377// Request message for UpdateSettings.
378message UpdateSettingsRequest {
379  // Required. The settings to update.
380  //
381  // The settings' `name` field is used to identify the settings to be updated.
382  // Formats:
383  //  * `organizations/{organization}/settings`
384  //  * `folders/{folder}/settings`
385  //  * `projects/{project}/settings`
386  //  * `projects/{project}/locations/{location}/clusters/{cluster}/settings`
387  //  * `projects/{project}/regions/{region}/clusters/{cluster}/settings`
388  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/settings`
389  Settings settings = 1 [(google.api.field_behavior) = REQUIRED];
390
391  // The list of fields to be updated on the settings.
392  google.protobuf.FieldMask update_mask = 2;
393}
394
395// Request message for ResetSettings.
396message ResetSettingsRequest {
397  // Required. The name of the settings to reset.
398  // Formats:
399  //  * `organizations/{organization}/settings`
400  //  * `folders/{folder}/settings`
401  //  * `projects/{project}/settings`
402  //  * `projects/{project}/locations/{location}/clusters/{cluster}/settings`
403  //  * `projects/{project}/regions/{region}/clusters/{cluster}/settings`
404  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/settings`
405  string name = 1 [
406    (google.api.field_behavior) = REQUIRED,
407    (google.api.resource_reference) = {
408      type: "securitycenter.googleapis.com/Settings"
409    }
410  ];
411
412  // A fingerprint used for optimistic concurrency. If none is provided,
413  // then the existing settings will be blindly overwritten.
414  string etag = 2;
415}
416
417// Request message for BatchGetSettings.
418message BatchGetSettingsRequest {
419  // Required. The relative resource name of the organization shared by all of the
420  // settings being retrieved.
421  // Format:
422  //  * `organizations/{organization}`
423  string parent = 1 [
424    (google.api.field_behavior) = REQUIRED,
425    (google.api.resource_reference) = {
426      type: "cloudresourcemanager.googleapis.com/Organization"
427    }
428  ];
429
430  // The names of the settings to retrieve.
431  // A maximum of 1000 settings can be retrieved in a batch.
432  // Formats:
433  //  * `organizations/{organization}/settings`
434  //  * `folders/{folder}/settings`
435  //  * `projects/{project}/settings`
436  //  * `projects/{project}/locations/{location}/clusters/{cluster}/settings`
437  //  * `projects/{project}/regions/{region}/clusters/{cluster}/settings`
438  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/settings`
439  repeated string names = 2;
440}
441
442// Response message for BatchGetSettings.
443message BatchGetSettingsResponse {
444  // Settings requested.
445  repeated Settings settings = 1;
446}
447
448// Request message for CalculateEffectiveSettings.
449message CalculateEffectiveSettingsRequest {
450  // Required. The name of the effective settings to retrieve.
451  // Formats:
452  //  * `organizations/{organization}/effectiveSettings`
453  //  * `folders/{folder}/effectiveSettings`
454  //  * `projects/{project}/effectiveSettings`
455  //  * `projects/{project}/locations/{location}/clusters/{cluster}/effectiveSettings`
456  //  * `projects/{project}/regions/{region}/clusters/{cluster}/effectiveSettings`
457  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/effectiveSettings`
458  string name = 1 [
459    (google.api.field_behavior) = REQUIRED,
460    (google.api.resource_reference) = {
461      type: "securitycenter.googleapis.com/Settings"
462    }
463  ];
464}
465
466// Request message for BatchGetEffectiveSettings.
467message BatchCalculateEffectiveSettingsRequest {
468  // Required. The relative resource name of the organization shared by all of the
469  // settings being retrieved.
470  // Format:
471  //  * `organizations/{organization}`
472  string parent = 1 [
473    (google.api.field_behavior) = REQUIRED,
474    (google.api.resource_reference) = {
475      type: "cloudresourcemanager.googleapis.com/Organization"
476    }
477  ];
478
479  // The requests specifying the effective settings to retrieve.
480  // A maximum of 1000 effective settings can be retrieved in a batch.
481  repeated CalculateEffectiveSettingsRequest requests = 2;
482}
483
484// Response message for BatchGetEffectiveSettings.
485message BatchCalculateEffectiveSettingsResponse {
486  // Settings requested.
487  repeated Settings settings = 1;
488}
489
490// Request message for GetComponentSettings.
491message GetComponentSettingsRequest {
492  // Required. The component settings to retrieve.
493  //
494  // Formats:
495  //  * `organizations/{organization}/components/{component}/settings`
496  //  * `folders/{folder}/components/{component}/settings`
497  //  * `projects/{project}/components/{component}/settings`
498  //  * `projects/{project}/locations/{location}/clusters/{cluster}/components/{component}/settings`
499  //  * `projects/{project}/regions/{region}/clusters/{cluster}/components/{component}/settings`
500  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/components/{component}/settings`
501  string name = 1 [
502    (google.api.field_behavior) = REQUIRED,
503    (google.api.resource_reference) = {
504      type: "securitycenter.googleapis.com/ComponentSettings"
505    }
506  ];
507}
508
509// Request message for UpdateComponentSettings.
510message UpdateComponentSettingsRequest {
511  // Required. The component settings to update.
512  //
513  // The component settings' `name` field is used to identify the component
514  // settings to be updated. Formats:
515  //  * `organizations/{organization}/components/{component}/settings`
516  //  * `folders/{folder}/components/{component}/settings`
517  //  * `projects/{project}/components/{component}/settings`
518  //  * `projects/{project}/locations/{location}/clusters/{cluster}/components/{component}/settings`
519  //  * `projects/{project}/regions/{region}/clusters/{cluster}/components/{component}/settings`
520  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/components/{component}/settings`
521  ComponentSettings component_settings = 1 [(google.api.field_behavior) = REQUIRED];
522
523  // The list of fields to be updated on the component settings resource.
524  google.protobuf.FieldMask update_mask = 2;
525}
526
527// Request message for ResetComponentSettings.
528message ResetComponentSettingsRequest {
529  // Required. The component settings to reset.
530  //
531  // Formats:
532  //  * `organizations/{organization}/components/{component}/settings`
533  //  * `folders/{folder}/components/{component}/settings`
534  //  * `projects/{project}/components/{component}/settings`
535  //  * `projects/{project}/locations/{location}/clusters/{cluster}/components/{component}/settings`
536  //  * `projects/{project}/regions/{region}/clusters/{cluster}/components/{component}/settings`
537  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/components/{component}/settings`
538  string name = 1 [
539    (google.api.field_behavior) = REQUIRED,
540    (google.api.resource_reference) = {
541      type: "securitycenter.googleapis.com/ComponentSettings"
542    }
543  ];
544
545  // An fingerprint used for optimistic concurrency. If none is provided,
546  // then the existing settings will be blindly overwritten.
547  string etag = 2;
548}
549
550// Request message for CalculateEffectiveComponentSettings.
551message CalculateEffectiveComponentSettingsRequest {
552  // Required. The effective component settings to retrieve.
553  //
554  // Formats:
555  //  * `organizations/{organization}/components/{component}/settings`
556  //  * `folders/{folder}/components/{component}/settings`
557  //  * `projects/{project}/components/{component}/settings`
558  //  * `projects/{project}/locations/{location}/clusters/{cluster}/components/{component}/settings`
559  //  * `projects/{project}/regions/{region}/clusters/{cluster}/components/{component}/settings`
560  //  * `projects/{project}/zones/{zone}/clusters/{cluster}/components/{component}/settings`
561  string name = 1 [
562    (google.api.field_behavior) = REQUIRED,
563    (google.api.resource_reference) = {
564      type: "securitycenter.googleapis.com/ComponentSettings"
565    }
566  ];
567}
568
569// Request message for ListDetectors.
570message ListDetectorsRequest {
571  // Required. The parent, which owns this collection of detectors.
572  // Format:
573  //  * `organizations/{organization}`
574  string parent = 1 [
575    (google.api.field_behavior) = REQUIRED,
576    (google.api.resource_reference) = {
577      type: "cloudresourcemanager.googleapis.com/Organization"
578    }
579  ];
580
581  // Filters to apply on the response. Filters can be applied on:
582  //  * components
583  //  * labels
584  //  * billing tiers
585  //
586  // Component filters will retrieve only detectors for the components
587  // specified. Label filters will retrieve only detectors that match one of the
588  // labels specified. Billing tier filters will retrieve only detectors for
589  // that billing tier.
590  //
591  // The filters
592  string filter = 2;
593
594  // The maximum number of detectors to return. The service may return fewer
595  // than this value. If unspecified, at most 100 detectors will be returned.
596  // The maximum value is 1000; values above 1000 will be coerced to 1000.
597  int32 page_size = 3;
598
599  // A page token, received from a previous `ListDetectors` call.
600  // Provide this to retrieve the subsequent page.
601  //
602  // When paginating, all other parameters provided to `ListDetectors` must
603  // match the call that provided the page token.
604  string page_token = 4;
605}
606
607// Response message for ListDetectors.
608message ListDetectorsResponse {
609  // The detectors from the specified organization.
610  repeated Detector detectors = 1;
611
612  // A token that can be sent as `page_token` to retrieve the next page.
613  // If this field is omitted, there are no subsequent pages.
614  string next_page_token = 2;
615}
616
617// Request message for ListComponents.
618message ListComponentsRequest {
619  // Required. The parent, which owns this collection of components.
620  // Format:
621  //  * `organizations/{organization}`
622  string parent = 1 [
623    (google.api.field_behavior) = REQUIRED,
624    (google.api.resource_reference) = {
625      type: "cloudresourcemanager.googleapis.com/Organization"
626    }
627  ];
628
629  // The maximum number of components to return. The service may return fewer
630  // than this value. If unspecified, at most 100 components will be returned.
631  // The maximum value is 1000; values above 1000 will be coerced to 1000.
632  int32 page_size = 2;
633
634  // A page token, received from a previous `ListComponents` call.
635  // Provide this to retrieve the subsequent page.
636  //
637  // When paginating, all other parameters provided to `ListComponents` must
638  // match the call that provided the page token.
639  string page_token = 3;
640}
641
642// Response message for ListComponents.
643message ListComponentsResponse {
644  // The components from the specified organization.
645  repeated string components = 1;
646
647  // A token that can be sent as `page_token` to retrieve the next page.
648  // If this field is omitted, there are no subsequent pages.
649  string next_page_token = 2;
650}
651