xref: /aosp_15_r20/external/googleapis/google/cloud/secretmanager/v1/service.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2024 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.secretmanager.v1;
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/secretmanager/v1/resources.proto";
24import "google/iam/v1/iam_policy.proto";
25import "google/iam/v1/policy.proto";
26import "google/protobuf/empty.proto";
27import "google/protobuf/field_mask.proto";
28
29option cc_enable_arenas = true;
30option csharp_namespace = "Google.Cloud.SecretManager.V1";
31option go_package = "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb;secretmanagerpb";
32option java_multiple_files = true;
33option java_outer_classname = "ServiceProto";
34option java_package = "com.google.cloud.secretmanager.v1";
35option objc_class_prefix = "GSM";
36option php_namespace = "Google\\Cloud\\SecretManager\\V1";
37option ruby_package = "Google::Cloud::SecretManager::V1";
38
39// Secret Manager Service
40//
41// Manages secrets and operations using those secrets. Implements a REST
42// model with the following objects:
43//
44// * [Secret][google.cloud.secretmanager.v1.Secret]
45// * [SecretVersion][google.cloud.secretmanager.v1.SecretVersion]
46service SecretManagerService {
47  option (google.api.default_host) = "secretmanager.googleapis.com";
48  option (google.api.oauth_scopes) =
49      "https://www.googleapis.com/auth/cloud-platform";
50
51  // Lists [Secrets][google.cloud.secretmanager.v1.Secret].
52  rpc ListSecrets(ListSecretsRequest) returns (ListSecretsResponse) {
53    option (google.api.http) = {
54      get: "/v1/{parent=projects/*}/secrets"
55      additional_bindings { get: "/v1/{parent=projects/*/locations/*}/secrets" }
56    };
57    option (google.api.method_signature) = "parent";
58  }
59
60  // Creates a new [Secret][google.cloud.secretmanager.v1.Secret] containing no
61  // [SecretVersions][google.cloud.secretmanager.v1.SecretVersion].
62  rpc CreateSecret(CreateSecretRequest) returns (Secret) {
63    option (google.api.http) = {
64      post: "/v1/{parent=projects/*}/secrets"
65      body: "secret"
66      additional_bindings {
67        post: "/v1/{parent=projects/*/locations/*}/secrets"
68        body: "secret"
69      }
70    };
71    option (google.api.method_signature) = "parent,secret_id,secret";
72  }
73
74  // Creates a new [SecretVersion][google.cloud.secretmanager.v1.SecretVersion]
75  // containing secret data and attaches it to an existing
76  // [Secret][google.cloud.secretmanager.v1.Secret].
77  rpc AddSecretVersion(AddSecretVersionRequest) returns (SecretVersion) {
78    option (google.api.http) = {
79      post: "/v1/{parent=projects/*/secrets/*}:addVersion"
80      body: "*"
81      additional_bindings {
82        post: "/v1/{parent=projects/*/locations/*/secrets/*}:addVersion"
83        body: "*"
84      }
85    };
86    option (google.api.method_signature) = "parent,payload";
87  }
88
89  // Gets metadata for a given [Secret][google.cloud.secretmanager.v1.Secret].
90  rpc GetSecret(GetSecretRequest) returns (Secret) {
91    option (google.api.http) = {
92      get: "/v1/{name=projects/*/secrets/*}"
93      additional_bindings { get: "/v1/{name=projects/*/locations/*/secrets/*}" }
94    };
95    option (google.api.method_signature) = "name";
96  }
97
98  // Updates metadata of an existing
99  // [Secret][google.cloud.secretmanager.v1.Secret].
100  rpc UpdateSecret(UpdateSecretRequest) returns (Secret) {
101    option (google.api.http) = {
102      patch: "/v1/{secret.name=projects/*/secrets/*}"
103      body: "secret"
104      additional_bindings {
105        patch: "/v1/{secret.name=projects/*/locations/*/secrets/*}"
106        body: "secret"
107      }
108    };
109    option (google.api.method_signature) = "secret,update_mask";
110  }
111
112  // Deletes a [Secret][google.cloud.secretmanager.v1.Secret].
113  rpc DeleteSecret(DeleteSecretRequest) returns (google.protobuf.Empty) {
114    option (google.api.http) = {
115      delete: "/v1/{name=projects/*/secrets/*}"
116      additional_bindings {
117        delete: "/v1/{name=projects/*/locations/*/secrets/*}"
118      }
119    };
120    option (google.api.method_signature) = "name";
121  }
122
123  // Lists [SecretVersions][google.cloud.secretmanager.v1.SecretVersion]. This
124  // call does not return secret data.
125  rpc ListSecretVersions(ListSecretVersionsRequest)
126      returns (ListSecretVersionsResponse) {
127    option (google.api.http) = {
128      get: "/v1/{parent=projects/*/secrets/*}/versions"
129      additional_bindings {
130        get: "/v1/{parent=projects/*/locations/*/secrets/*}/versions"
131      }
132    };
133    option (google.api.method_signature) = "parent";
134  }
135
136  // Gets metadata for a
137  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
138  //
139  // `projects/*/secrets/*/versions/latest` is an alias to the most recently
140  // created [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
141  rpc GetSecretVersion(GetSecretVersionRequest) returns (SecretVersion) {
142    option (google.api.http) = {
143      get: "/v1/{name=projects/*/secrets/*/versions/*}"
144      additional_bindings {
145        get: "/v1/{name=projects/*/locations/*/secrets/*/versions/*}"
146      }
147    };
148    option (google.api.method_signature) = "name";
149  }
150
151  // Accesses a [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
152  // This call returns the secret data.
153  //
154  // `projects/*/secrets/*/versions/latest` is an alias to the most recently
155  // created [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
156  rpc AccessSecretVersion(AccessSecretVersionRequest)
157      returns (AccessSecretVersionResponse) {
158    option (google.api.http) = {
159      get: "/v1/{name=projects/*/secrets/*/versions/*}:access"
160      additional_bindings {
161        get: "/v1/{name=projects/*/locations/*/secrets/*/versions/*}:access"
162      }
163    };
164    option (google.api.method_signature) = "name";
165  }
166
167  // Disables a [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
168  //
169  // Sets the [state][google.cloud.secretmanager.v1.SecretVersion.state] of the
170  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] to
171  // [DISABLED][google.cloud.secretmanager.v1.SecretVersion.State.DISABLED].
172  rpc DisableSecretVersion(DisableSecretVersionRequest)
173      returns (SecretVersion) {
174    option (google.api.http) = {
175      post: "/v1/{name=projects/*/secrets/*/versions/*}:disable"
176      body: "*"
177      additional_bindings {
178        post: "/v1/{name=projects/*/locations/*/secrets/*/versions/*}:disable"
179        body: "*"
180      }
181    };
182    option (google.api.method_signature) = "name";
183  }
184
185  // Enables a [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
186  //
187  // Sets the [state][google.cloud.secretmanager.v1.SecretVersion.state] of the
188  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] to
189  // [ENABLED][google.cloud.secretmanager.v1.SecretVersion.State.ENABLED].
190  rpc EnableSecretVersion(EnableSecretVersionRequest) returns (SecretVersion) {
191    option (google.api.http) = {
192      post: "/v1/{name=projects/*/secrets/*/versions/*}:enable"
193      body: "*"
194      additional_bindings {
195        post: "/v1/{name=projects/*/locations/*/secrets/*/versions/*}:enable"
196        body: "*"
197      }
198    };
199    option (google.api.method_signature) = "name";
200  }
201
202  // Destroys a [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
203  //
204  // Sets the [state][google.cloud.secretmanager.v1.SecretVersion.state] of the
205  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] to
206  // [DESTROYED][google.cloud.secretmanager.v1.SecretVersion.State.DESTROYED]
207  // and irrevocably destroys the secret data.
208  rpc DestroySecretVersion(DestroySecretVersionRequest)
209      returns (SecretVersion) {
210    option (google.api.http) = {
211      post: "/v1/{name=projects/*/secrets/*/versions/*}:destroy"
212      body: "*"
213      additional_bindings {
214        post: "/v1/{name=projects/*/locations/*/secrets/*/versions/*}:destroy"
215        body: "*"
216      }
217    };
218    option (google.api.method_signature) = "name";
219  }
220
221  // Sets the access control policy on the specified secret. Replaces any
222  // existing policy.
223  //
224  // Permissions on
225  // [SecretVersions][google.cloud.secretmanager.v1.SecretVersion] are enforced
226  // according to the policy set on the associated
227  // [Secret][google.cloud.secretmanager.v1.Secret].
228  rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest)
229      returns (google.iam.v1.Policy) {
230    option (google.api.http) = {
231      post: "/v1/{resource=projects/*/secrets/*}:setIamPolicy"
232      body: "*"
233      additional_bindings {
234        post: "/v1/{resource=projects/*/locations/*/secrets/*}:setIamPolicy"
235        body: "*"
236      }
237    };
238  }
239
240  // Gets the access control policy for a secret.
241  // Returns empty policy if the secret exists and does not have a policy set.
242  rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest)
243      returns (google.iam.v1.Policy) {
244    option (google.api.http) = {
245      get: "/v1/{resource=projects/*/secrets/*}:getIamPolicy"
246      additional_bindings {
247        get: "/v1/{resource=projects/*/locations/*/secrets/*}:getIamPolicy"
248      }
249    };
250  }
251
252  // Returns permissions that a caller has for the specified secret.
253  // If the secret does not exist, this call returns an empty set of
254  // permissions, not a NOT_FOUND error.
255  //
256  // Note: This operation is designed to be used for building permission-aware
257  // UIs and command-line tools, not for authorization checking. This operation
258  // may "fail open" without warning.
259  rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest)
260      returns (google.iam.v1.TestIamPermissionsResponse) {
261    option (google.api.http) = {
262      post: "/v1/{resource=projects/*/secrets/*}:testIamPermissions"
263      body: "*"
264      additional_bindings {
265        post: "/v1/{resource=projects/*/locations/*/secrets/*}:testIamPermissions"
266        body: "*"
267      }
268    };
269  }
270}
271
272// Request message for
273// [SecretManagerService.ListSecrets][google.cloud.secretmanager.v1.SecretManagerService.ListSecrets].
274message ListSecretsRequest {
275  // Required. The resource name of the project associated with the
276  // [Secrets][google.cloud.secretmanager.v1.Secret], in the format `projects/*`
277  // or `projects/*/locations/*`
278  string parent = 1 [
279    (google.api.field_behavior) = REQUIRED,
280    (google.api.resource_reference) = {
281      child_type: "secretmanager.googleapis.com/Secret"
282    }
283  ];
284
285  // Optional. The maximum number of results to be returned in a single page. If
286  // set to 0, the server decides the number of results to return. If the
287  // number is greater than 25000, it is capped at 25000.
288  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
289
290  // Optional. Pagination token, returned earlier via
291  // [ListSecretsResponse.next_page_token][google.cloud.secretmanager.v1.ListSecretsResponse.next_page_token].
292  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
293
294  // Optional. Filter string, adhering to the rules in
295  // [List-operation
296  // filtering](https://cloud.google.com/secret-manager/docs/filtering). List
297  // only secrets matching the filter. If filter is empty, all secrets are
298  // listed.
299  string filter = 4 [(google.api.field_behavior) = OPTIONAL];
300}
301
302// Response message for
303// [SecretManagerService.ListSecrets][google.cloud.secretmanager.v1.SecretManagerService.ListSecrets].
304message ListSecretsResponse {
305  // The list of [Secrets][google.cloud.secretmanager.v1.Secret] sorted in
306  // reverse by create_time (newest first).
307  repeated Secret secrets = 1;
308
309  // A token to retrieve the next page of results. Pass this value in
310  // [ListSecretsRequest.page_token][google.cloud.secretmanager.v1.ListSecretsRequest.page_token]
311  // to retrieve the next page.
312  string next_page_token = 2;
313
314  // The total number of [Secrets][google.cloud.secretmanager.v1.Secret] but 0
315  // when the
316  // [ListSecretsRequest.filter][google.cloud.secretmanager.v1.ListSecretsRequest.filter]
317  // field is set.
318  int32 total_size = 3;
319}
320
321// Request message for
322// [SecretManagerService.CreateSecret][google.cloud.secretmanager.v1.SecretManagerService.CreateSecret].
323message CreateSecretRequest {
324  // Required. The resource name of the project to associate with the
325  // [Secret][google.cloud.secretmanager.v1.Secret], in the format `projects/*`
326  // or `projects/*/locations/*`.
327  string parent = 1 [
328    (google.api.field_behavior) = REQUIRED,
329    (google.api.resource_reference) = {
330      child_type: "secretmanager.googleapis.com/Secret"
331    }
332  ];
333
334  // Required. This must be unique within the project.
335  //
336  // A secret ID is a string with a maximum length of 255 characters and can
337  // contain uppercase and lowercase letters, numerals, and the hyphen (`-`) and
338  // underscore (`_`) characters.
339  string secret_id = 2 [(google.api.field_behavior) = REQUIRED];
340
341  // Required. A [Secret][google.cloud.secretmanager.v1.Secret] with initial
342  // field values.
343  Secret secret = 3 [(google.api.field_behavior) = REQUIRED];
344}
345
346// Request message for
347// [SecretManagerService.AddSecretVersion][google.cloud.secretmanager.v1.SecretManagerService.AddSecretVersion].
348message AddSecretVersionRequest {
349  // Required. The resource name of the
350  // [Secret][google.cloud.secretmanager.v1.Secret] to associate with the
351  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] in the format
352  // `projects/*/secrets/*` or `projects/*/locations/*/secrets/*`.
353  string parent = 1 [
354    (google.api.field_behavior) = REQUIRED,
355    (google.api.resource_reference) = {
356      type: "secretmanager.googleapis.com/Secret"
357    }
358  ];
359
360  // Required. The secret payload of the
361  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
362  SecretPayload payload = 2 [(google.api.field_behavior) = REQUIRED];
363}
364
365// Request message for
366// [SecretManagerService.GetSecret][google.cloud.secretmanager.v1.SecretManagerService.GetSecret].
367message GetSecretRequest {
368  // Required. The resource name of the
369  // [Secret][google.cloud.secretmanager.v1.Secret], in the format
370  // `projects/*/secrets/*` or `projects/*/locations/*/secrets/*`.
371  string name = 1 [
372    (google.api.field_behavior) = REQUIRED,
373    (google.api.resource_reference) = {
374      type: "secretmanager.googleapis.com/Secret"
375    }
376  ];
377}
378
379// Request message for
380// [SecretManagerService.ListSecretVersions][google.cloud.secretmanager.v1.SecretManagerService.ListSecretVersions].
381message ListSecretVersionsRequest {
382  // Required. The resource name of the
383  // [Secret][google.cloud.secretmanager.v1.Secret] associated with the
384  // [SecretVersions][google.cloud.secretmanager.v1.SecretVersion] to list, in
385  // the format `projects/*/secrets/*` or `projects/*/locations/*/secrets/*`.
386  string parent = 1 [
387    (google.api.field_behavior) = REQUIRED,
388    (google.api.resource_reference) = {
389      type: "secretmanager.googleapis.com/Secret"
390    }
391  ];
392
393  // Optional. The maximum number of results to be returned in a single page. If
394  // set to 0, the server decides the number of results to return. If the
395  // number is greater than 25000, it is capped at 25000.
396  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
397
398  // Optional. Pagination token, returned earlier via
399  // ListSecretVersionsResponse.next_page_token][].
400  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
401
402  // Optional. Filter string, adhering to the rules in
403  // [List-operation
404  // filtering](https://cloud.google.com/secret-manager/docs/filtering). List
405  // only secret versions matching the filter. If filter is empty, all secret
406  // versions are listed.
407  string filter = 4 [(google.api.field_behavior) = OPTIONAL];
408}
409
410// Response message for
411// [SecretManagerService.ListSecretVersions][google.cloud.secretmanager.v1.SecretManagerService.ListSecretVersions].
412message ListSecretVersionsResponse {
413  // The list of [SecretVersions][google.cloud.secretmanager.v1.SecretVersion]
414  // sorted in reverse by create_time (newest first).
415  repeated SecretVersion versions = 1;
416
417  // A token to retrieve the next page of results. Pass this value in
418  // [ListSecretVersionsRequest.page_token][google.cloud.secretmanager.v1.ListSecretVersionsRequest.page_token]
419  // to retrieve the next page.
420  string next_page_token = 2;
421
422  // The total number of
423  // [SecretVersions][google.cloud.secretmanager.v1.SecretVersion] but 0 when
424  // the
425  // [ListSecretsRequest.filter][google.cloud.secretmanager.v1.ListSecretsRequest.filter]
426  // field is set.
427  int32 total_size = 3;
428}
429
430// Request message for
431// [SecretManagerService.GetSecretVersion][google.cloud.secretmanager.v1.SecretManagerService.GetSecretVersion].
432message GetSecretVersionRequest {
433  // Required. The resource name of the
434  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] in the format
435  // `projects/*/secrets/*/versions/*` or
436  // `projects/*/locations/*/secrets/*/versions/*`.
437  //
438  // `projects/*/secrets/*/versions/latest` or
439  // `projects/*/locations/*/secrets/*/versions/latest` is an alias to the most
440  // recently created
441  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
442  string name = 1 [
443    (google.api.field_behavior) = REQUIRED,
444    (google.api.resource_reference) = {
445      type: "secretmanager.googleapis.com/SecretVersion"
446    }
447  ];
448}
449
450// Request message for
451// [SecretManagerService.UpdateSecret][google.cloud.secretmanager.v1.SecretManagerService.UpdateSecret].
452message UpdateSecretRequest {
453  // Required. [Secret][google.cloud.secretmanager.v1.Secret] with updated field
454  // values.
455  Secret secret = 1 [(google.api.field_behavior) = REQUIRED];
456
457  // Required. Specifies the fields to be updated.
458  google.protobuf.FieldMask update_mask = 2
459      [(google.api.field_behavior) = REQUIRED];
460}
461
462// Request message for
463// [SecretManagerService.AccessSecretVersion][google.cloud.secretmanager.v1.SecretManagerService.AccessSecretVersion].
464message AccessSecretVersionRequest {
465  // Required. The resource name of the
466  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] in the format
467  // `projects/*/secrets/*/versions/*` or
468  // `projects/*/locations/*/secrets/*/versions/*`.
469  //
470  // `projects/*/secrets/*/versions/latest` or
471  // `projects/*/locations/*/secrets/*/versions/latest` is an alias to the most
472  // recently created
473  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion].
474  string name = 1 [
475    (google.api.field_behavior) = REQUIRED,
476    (google.api.resource_reference) = {
477      type: "secretmanager.googleapis.com/SecretVersion"
478    }
479  ];
480}
481
482// Response message for
483// [SecretManagerService.AccessSecretVersion][google.cloud.secretmanager.v1.SecretManagerService.AccessSecretVersion].
484message AccessSecretVersionResponse {
485  // The resource name of the
486  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] in the format
487  // `projects/*/secrets/*/versions/*` or
488  // `projects/*/locations/*/secrets/*/versions/*`.
489  string name = 1 [(google.api.resource_reference) = {
490    type: "secretmanager.googleapis.com/SecretVersion"
491  }];
492
493  // Secret payload
494  SecretPayload payload = 2;
495}
496
497// Request message for
498// [SecretManagerService.DeleteSecret][google.cloud.secretmanager.v1.SecretManagerService.DeleteSecret].
499message DeleteSecretRequest {
500  // Required. The resource name of the
501  // [Secret][google.cloud.secretmanager.v1.Secret] to delete in the format
502  // `projects/*/secrets/*`.
503  string name = 1 [
504    (google.api.field_behavior) = REQUIRED,
505    (google.api.resource_reference) = {
506      type: "secretmanager.googleapis.com/Secret"
507    }
508  ];
509
510  // Optional. Etag of the [Secret][google.cloud.secretmanager.v1.Secret]. The
511  // request succeeds if it matches the etag of the currently stored secret
512  // object. If the etag is omitted, the request succeeds.
513  string etag = 2 [(google.api.field_behavior) = OPTIONAL];
514}
515
516// Request message for
517// [SecretManagerService.DisableSecretVersion][google.cloud.secretmanager.v1.SecretManagerService.DisableSecretVersion].
518message DisableSecretVersionRequest {
519  // Required. The resource name of the
520  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] to disable in
521  // the format `projects/*/secrets/*/versions/*` or
522  // `projects/*/locations/*/secrets/*/versions/*`.
523  string name = 1 [
524    (google.api.field_behavior) = REQUIRED,
525    (google.api.resource_reference) = {
526      type: "secretmanager.googleapis.com/SecretVersion"
527    }
528  ];
529
530  // Optional. Etag of the
531  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion]. The request
532  // succeeds if it matches the etag of the currently stored secret version
533  // object. If the etag is omitted, the request succeeds.
534  string etag = 2 [(google.api.field_behavior) = OPTIONAL];
535}
536
537// Request message for
538// [SecretManagerService.EnableSecretVersion][google.cloud.secretmanager.v1.SecretManagerService.EnableSecretVersion].
539message EnableSecretVersionRequest {
540  // Required. The resource name of the
541  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] to enable in
542  // the format `projects/*/secrets/*/versions/*` or
543  // `projects/*/locations/*/secrets/*/versions/*`.
544  string name = 1 [
545    (google.api.field_behavior) = REQUIRED,
546    (google.api.resource_reference) = {
547      type: "secretmanager.googleapis.com/SecretVersion"
548    }
549  ];
550
551  // Optional. Etag of the
552  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion]. The request
553  // succeeds if it matches the etag of the currently stored secret version
554  // object. If the etag is omitted, the request succeeds.
555  string etag = 2 [(google.api.field_behavior) = OPTIONAL];
556}
557
558// Request message for
559// [SecretManagerService.DestroySecretVersion][google.cloud.secretmanager.v1.SecretManagerService.DestroySecretVersion].
560message DestroySecretVersionRequest {
561  // Required. The resource name of the
562  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion] to destroy in
563  // the format `projects/*/secrets/*/versions/*` or
564  // `projects/*/locations/*/secrets/*/versions/*`.
565  string name = 1 [
566    (google.api.field_behavior) = REQUIRED,
567    (google.api.resource_reference) = {
568      type: "secretmanager.googleapis.com/SecretVersion"
569    }
570  ];
571
572  // Optional. Etag of the
573  // [SecretVersion][google.cloud.secretmanager.v1.SecretVersion]. The request
574  // succeeds if it matches the etag of the currently stored secret version
575  // object. If the etag is omitted, the request succeeds.
576  string etag = 2 [(google.api.field_behavior) = OPTIONAL];
577}
578