1*d5c09012SAndroid Build Coastguard Worker// Copyright 2022 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.iam.v2beta; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/annotations.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/api/client.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 22*d5c09012SAndroid Build Coastguard Workerimport "google/iam/v2beta/deny.proto"; 23*d5c09012SAndroid Build Coastguard Workerimport "google/longrunning/operations.proto"; 24*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 25*d5c09012SAndroid Build Coastguard Worker 26*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Iam.V2Beta"; 27*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/iam/apiv2beta/iampb;iampb"; 28*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 29*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "PolicyProto"; 30*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.iam.v2beta"; 31*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Iam\\V2beta"; 32*d5c09012SAndroid Build Coastguard Worker 33*d5c09012SAndroid Build Coastguard Worker// An interface for managing Identity and Access Management (IAM) policies. 34*d5c09012SAndroid Build Coastguard Workerservice Policies { 35*d5c09012SAndroid Build Coastguard Worker option (google.api.default_host) = "iam.googleapis.com"; 36*d5c09012SAndroid Build Coastguard Worker option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; 37*d5c09012SAndroid Build Coastguard Worker 38*d5c09012SAndroid Build Coastguard Worker // Retrieves the policies of the specified kind that are attached to a 39*d5c09012SAndroid Build Coastguard Worker // resource. 40*d5c09012SAndroid Build Coastguard Worker // 41*d5c09012SAndroid Build Coastguard Worker // The response lists only policy metadata. In particular, policy rules are 42*d5c09012SAndroid Build Coastguard Worker // omitted. 43*d5c09012SAndroid Build Coastguard Worker rpc ListPolicies(ListPoliciesRequest) returns (ListPoliciesResponse) { 44*d5c09012SAndroid Build Coastguard Worker option (google.api.http) = { 45*d5c09012SAndroid Build Coastguard Worker get: "/v2beta/{parent=policies/*/*}" 46*d5c09012SAndroid Build Coastguard Worker }; 47*d5c09012SAndroid Build Coastguard Worker option (google.api.method_signature) = "parent"; 48*d5c09012SAndroid Build Coastguard Worker } 49*d5c09012SAndroid Build Coastguard Worker 50*d5c09012SAndroid Build Coastguard Worker // Gets a policy. 51*d5c09012SAndroid Build Coastguard Worker rpc GetPolicy(GetPolicyRequest) returns (Policy) { 52*d5c09012SAndroid Build Coastguard Worker option (google.api.http) = { 53*d5c09012SAndroid Build Coastguard Worker get: "/v2beta/{name=policies/*/*/*}" 54*d5c09012SAndroid Build Coastguard Worker }; 55*d5c09012SAndroid Build Coastguard Worker option (google.api.method_signature) = "name"; 56*d5c09012SAndroid Build Coastguard Worker } 57*d5c09012SAndroid Build Coastguard Worker 58*d5c09012SAndroid Build Coastguard Worker // Creates a policy. 59*d5c09012SAndroid Build Coastguard Worker rpc CreatePolicy(CreatePolicyRequest) returns (google.longrunning.Operation) { 60*d5c09012SAndroid Build Coastguard Worker option (google.api.http) = { 61*d5c09012SAndroid Build Coastguard Worker post: "/v2beta/{parent=policies/*/*}" 62*d5c09012SAndroid Build Coastguard Worker body: "policy" 63*d5c09012SAndroid Build Coastguard Worker }; 64*d5c09012SAndroid Build Coastguard Worker option (google.api.method_signature) = "parent,policy,policy_id"; 65*d5c09012SAndroid Build Coastguard Worker option (google.longrunning.operation_info) = { 66*d5c09012SAndroid Build Coastguard Worker response_type: "Policy" 67*d5c09012SAndroid Build Coastguard Worker metadata_type: "PolicyOperationMetadata" 68*d5c09012SAndroid Build Coastguard Worker }; 69*d5c09012SAndroid Build Coastguard Worker } 70*d5c09012SAndroid Build Coastguard Worker 71*d5c09012SAndroid Build Coastguard Worker // Updates the specified policy. 72*d5c09012SAndroid Build Coastguard Worker // 73*d5c09012SAndroid Build Coastguard Worker // You can update only the rules and the display name for the policy. 74*d5c09012SAndroid Build Coastguard Worker // 75*d5c09012SAndroid Build Coastguard Worker // To update a policy, you should use a read-modify-write loop: 76*d5c09012SAndroid Build Coastguard Worker // 77*d5c09012SAndroid Build Coastguard Worker // 1. Use [GetPolicy][google.iam.v2beta.Policies.GetPolicy] to read the current version of the policy. 78*d5c09012SAndroid Build Coastguard Worker // 2. Modify the policy as needed. 79*d5c09012SAndroid Build Coastguard Worker // 3. Use `UpdatePolicy` to write the updated policy. 80*d5c09012SAndroid Build Coastguard Worker // 81*d5c09012SAndroid Build Coastguard Worker // This pattern helps prevent conflicts between concurrent updates. 82*d5c09012SAndroid Build Coastguard Worker rpc UpdatePolicy(UpdatePolicyRequest) returns (google.longrunning.Operation) { 83*d5c09012SAndroid Build Coastguard Worker option (google.api.http) = { 84*d5c09012SAndroid Build Coastguard Worker put: "/v2beta/{policy.name=policies/*/*/*}" 85*d5c09012SAndroid Build Coastguard Worker body: "policy" 86*d5c09012SAndroid Build Coastguard Worker }; 87*d5c09012SAndroid Build Coastguard Worker option (google.longrunning.operation_info) = { 88*d5c09012SAndroid Build Coastguard Worker response_type: "Policy" 89*d5c09012SAndroid Build Coastguard Worker metadata_type: "PolicyOperationMetadata" 90*d5c09012SAndroid Build Coastguard Worker }; 91*d5c09012SAndroid Build Coastguard Worker } 92*d5c09012SAndroid Build Coastguard Worker 93*d5c09012SAndroid Build Coastguard Worker // Deletes a policy. This action is permanent. 94*d5c09012SAndroid Build Coastguard Worker rpc DeletePolicy(DeletePolicyRequest) returns (google.longrunning.Operation) { 95*d5c09012SAndroid Build Coastguard Worker option (google.api.http) = { 96*d5c09012SAndroid Build Coastguard Worker delete: "/v2beta/{name=policies/*/*/*}" 97*d5c09012SAndroid Build Coastguard Worker }; 98*d5c09012SAndroid Build Coastguard Worker option (google.api.method_signature) = "name"; 99*d5c09012SAndroid Build Coastguard Worker option (google.longrunning.operation_info) = { 100*d5c09012SAndroid Build Coastguard Worker response_type: "Policy" 101*d5c09012SAndroid Build Coastguard Worker metadata_type: "PolicyOperationMetadata" 102*d5c09012SAndroid Build Coastguard Worker }; 103*d5c09012SAndroid Build Coastguard Worker } 104*d5c09012SAndroid Build Coastguard Worker} 105*d5c09012SAndroid Build Coastguard Worker 106*d5c09012SAndroid Build Coastguard Worker// Data for an IAM policy. 107*d5c09012SAndroid Build Coastguard Workermessage Policy { 108*d5c09012SAndroid Build Coastguard Worker // Immutable. The resource name of the `Policy`, which must be unique. Format: 109*d5c09012SAndroid Build Coastguard Worker // `policies/{attachment_point}/denypolicies/{policy_id}` 110*d5c09012SAndroid Build Coastguard Worker // 111*d5c09012SAndroid Build Coastguard Worker // 112*d5c09012SAndroid Build Coastguard Worker // The attachment point is identified by its URL-encoded full resource name, 113*d5c09012SAndroid Build Coastguard Worker // which means that the forward-slash character, `/`, must be written as 114*d5c09012SAndroid Build Coastguard Worker // `%2F`. For example, 115*d5c09012SAndroid Build Coastguard Worker // `policies/cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project/denypolicies/my-deny-policy`. 116*d5c09012SAndroid Build Coastguard Worker // 117*d5c09012SAndroid Build Coastguard Worker // For organizations and folders, use the numeric ID in the full resource 118*d5c09012SAndroid Build Coastguard Worker // name. For projects, requests can use the alphanumeric or the numeric ID. 119*d5c09012SAndroid Build Coastguard Worker // Responses always contain the numeric ID. 120*d5c09012SAndroid Build Coastguard Worker string name = 1 [(google.api.field_behavior) = IMMUTABLE]; 121*d5c09012SAndroid Build Coastguard Worker 122*d5c09012SAndroid Build Coastguard Worker // Immutable. The globally unique ID of the `Policy`. Assigned automatically when the 123*d5c09012SAndroid Build Coastguard Worker // `Policy` is created. 124*d5c09012SAndroid Build Coastguard Worker string uid = 2 [(google.api.field_behavior) = IMMUTABLE]; 125*d5c09012SAndroid Build Coastguard Worker 126*d5c09012SAndroid Build Coastguard Worker // Output only. The kind of the `Policy`. Always contains the value `DenyPolicy`. 127*d5c09012SAndroid Build Coastguard Worker string kind = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 128*d5c09012SAndroid Build Coastguard Worker 129*d5c09012SAndroid Build Coastguard Worker // A user-specified description of the `Policy`. This value can be up to 63 130*d5c09012SAndroid Build Coastguard Worker // characters. 131*d5c09012SAndroid Build Coastguard Worker string display_name = 4; 132*d5c09012SAndroid Build Coastguard Worker 133*d5c09012SAndroid Build Coastguard Worker // A key-value map to store arbitrary metadata for the `Policy`. Keys 134*d5c09012SAndroid Build Coastguard Worker // can be up to 63 characters. Values can be up to 255 characters. 135*d5c09012SAndroid Build Coastguard Worker map<string, string> annotations = 5; 136*d5c09012SAndroid Build Coastguard Worker 137*d5c09012SAndroid Build Coastguard Worker // An opaque tag that identifies the current version of the `Policy`. IAM uses 138*d5c09012SAndroid Build Coastguard Worker // this value to help manage concurrent updates, so they do not cause one 139*d5c09012SAndroid Build Coastguard Worker // update to be overwritten by another. 140*d5c09012SAndroid Build Coastguard Worker // 141*d5c09012SAndroid Build Coastguard Worker // If this field is present in a [CreatePolicy][] request, the value is 142*d5c09012SAndroid Build Coastguard Worker // ignored. 143*d5c09012SAndroid Build Coastguard Worker string etag = 6; 144*d5c09012SAndroid Build Coastguard Worker 145*d5c09012SAndroid Build Coastguard Worker // Output only. The time when the `Policy` was created. 146*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp create_time = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; 147*d5c09012SAndroid Build Coastguard Worker 148*d5c09012SAndroid Build Coastguard Worker // Output only. The time when the `Policy` was last updated. 149*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp update_time = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; 150*d5c09012SAndroid Build Coastguard Worker 151*d5c09012SAndroid Build Coastguard Worker // Output only. The time when the `Policy` was deleted. Empty if the policy is not deleted. 152*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp delete_time = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; 153*d5c09012SAndroid Build Coastguard Worker 154*d5c09012SAndroid Build Coastguard Worker // A list of rules that specify the behavior of the `Policy`. All of the rules 155*d5c09012SAndroid Build Coastguard Worker // should be of the `kind` specified in the `Policy`. 156*d5c09012SAndroid Build Coastguard Worker repeated PolicyRule rules = 10; 157*d5c09012SAndroid Build Coastguard Worker} 158*d5c09012SAndroid Build Coastguard Worker 159*d5c09012SAndroid Build Coastguard Worker// A single rule in a `Policy`. 160*d5c09012SAndroid Build Coastguard Workermessage PolicyRule { 161*d5c09012SAndroid Build Coastguard Worker oneof kind { 162*d5c09012SAndroid Build Coastguard Worker // A rule for a deny policy. 163*d5c09012SAndroid Build Coastguard Worker DenyRule deny_rule = 2; 164*d5c09012SAndroid Build Coastguard Worker } 165*d5c09012SAndroid Build Coastguard Worker 166*d5c09012SAndroid Build Coastguard Worker // A user-specified description of the rule. This value can be up to 256 167*d5c09012SAndroid Build Coastguard Worker // characters. 168*d5c09012SAndroid Build Coastguard Worker string description = 1; 169*d5c09012SAndroid Build Coastguard Worker} 170*d5c09012SAndroid Build Coastguard Worker 171*d5c09012SAndroid Build Coastguard Worker// Request message for `ListPolicies`. 172*d5c09012SAndroid Build Coastguard Workermessage ListPoliciesRequest { 173*d5c09012SAndroid Build Coastguard Worker // Required. The resource that the policy is attached to, along with the kind of policy 174*d5c09012SAndroid Build Coastguard Worker // to list. Format: 175*d5c09012SAndroid Build Coastguard Worker // `policies/{attachment_point}/denypolicies` 176*d5c09012SAndroid Build Coastguard Worker // 177*d5c09012SAndroid Build Coastguard Worker // 178*d5c09012SAndroid Build Coastguard Worker // The attachment point is identified by its URL-encoded full resource name, 179*d5c09012SAndroid Build Coastguard Worker // which means that the forward-slash character, `/`, must be written as 180*d5c09012SAndroid Build Coastguard Worker // `%2F`. For example, 181*d5c09012SAndroid Build Coastguard Worker // `policies/cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project/denypolicies`. 182*d5c09012SAndroid Build Coastguard Worker // 183*d5c09012SAndroid Build Coastguard Worker // For organizations and folders, use the numeric ID in the full resource 184*d5c09012SAndroid Build Coastguard Worker // name. For projects, you can use the alphanumeric or the numeric ID. 185*d5c09012SAndroid Build Coastguard Worker string parent = 1 [(google.api.field_behavior) = REQUIRED]; 186*d5c09012SAndroid Build Coastguard Worker 187*d5c09012SAndroid Build Coastguard Worker // The maximum number of policies to return. IAM ignores this value and uses 188*d5c09012SAndroid Build Coastguard Worker // the value 1000. 189*d5c09012SAndroid Build Coastguard Worker int32 page_size = 2; 190*d5c09012SAndroid Build Coastguard Worker 191*d5c09012SAndroid Build Coastguard Worker // A page token received in a [ListPoliciesResponse][google.iam.v2beta.ListPoliciesResponse]. Provide this token to 192*d5c09012SAndroid Build Coastguard Worker // retrieve the next page. 193*d5c09012SAndroid Build Coastguard Worker string page_token = 3; 194*d5c09012SAndroid Build Coastguard Worker} 195*d5c09012SAndroid Build Coastguard Worker 196*d5c09012SAndroid Build Coastguard Worker// Response message for `ListPolicies`. 197*d5c09012SAndroid Build Coastguard Workermessage ListPoliciesResponse { 198*d5c09012SAndroid Build Coastguard Worker // Metadata for the policies that are attached to the resource. 199*d5c09012SAndroid Build Coastguard Worker repeated Policy policies = 1; 200*d5c09012SAndroid Build Coastguard Worker 201*d5c09012SAndroid Build Coastguard Worker // A page token that you can use in a [ListPoliciesRequest][google.iam.v2beta.ListPoliciesRequest] to retrieve the 202*d5c09012SAndroid Build Coastguard Worker // next page. If this field is omitted, there are no additional pages. 203*d5c09012SAndroid Build Coastguard Worker string next_page_token = 2; 204*d5c09012SAndroid Build Coastguard Worker} 205*d5c09012SAndroid Build Coastguard Worker 206*d5c09012SAndroid Build Coastguard Worker// Request message for `GetPolicy`. 207*d5c09012SAndroid Build Coastguard Workermessage GetPolicyRequest { 208*d5c09012SAndroid Build Coastguard Worker // Required. The resource name of the policy to retrieve. Format: 209*d5c09012SAndroid Build Coastguard Worker // `policies/{attachment_point}/denypolicies/{policy_id}` 210*d5c09012SAndroid Build Coastguard Worker // 211*d5c09012SAndroid Build Coastguard Worker // 212*d5c09012SAndroid Build Coastguard Worker // Use the URL-encoded full resource name, which means that the forward-slash 213*d5c09012SAndroid Build Coastguard Worker // character, `/`, must be written as `%2F`. For example, 214*d5c09012SAndroid Build Coastguard Worker // `policies/cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project/denypolicies/my-policy`. 215*d5c09012SAndroid Build Coastguard Worker // 216*d5c09012SAndroid Build Coastguard Worker // For organizations and folders, use the numeric ID in the full resource 217*d5c09012SAndroid Build Coastguard Worker // name. For projects, you can use the alphanumeric or the numeric ID. 218*d5c09012SAndroid Build Coastguard Worker string name = 1 [(google.api.field_behavior) = REQUIRED]; 219*d5c09012SAndroid Build Coastguard Worker} 220*d5c09012SAndroid Build Coastguard Worker 221*d5c09012SAndroid Build Coastguard Worker// Request message for `CreatePolicy`. 222*d5c09012SAndroid Build Coastguard Workermessage CreatePolicyRequest { 223*d5c09012SAndroid Build Coastguard Worker // Required. The resource that the policy is attached to, along with the kind of policy 224*d5c09012SAndroid Build Coastguard Worker // to create. Format: `policies/{attachment_point}/denypolicies` 225*d5c09012SAndroid Build Coastguard Worker // 226*d5c09012SAndroid Build Coastguard Worker // 227*d5c09012SAndroid Build Coastguard Worker // The attachment point is identified by its URL-encoded full resource name, 228*d5c09012SAndroid Build Coastguard Worker // which means that the forward-slash character, `/`, must be written as 229*d5c09012SAndroid Build Coastguard Worker // `%2F`. For example, 230*d5c09012SAndroid Build Coastguard Worker // `policies/cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project/denypolicies`. 231*d5c09012SAndroid Build Coastguard Worker // 232*d5c09012SAndroid Build Coastguard Worker // For organizations and folders, use the numeric ID in the full resource 233*d5c09012SAndroid Build Coastguard Worker // name. For projects, you can use the alphanumeric or the numeric ID. 234*d5c09012SAndroid Build Coastguard Worker string parent = 1 [(google.api.field_behavior) = REQUIRED]; 235*d5c09012SAndroid Build Coastguard Worker 236*d5c09012SAndroid Build Coastguard Worker // Required. The policy to create. 237*d5c09012SAndroid Build Coastguard Worker Policy policy = 2 [(google.api.field_behavior) = REQUIRED]; 238*d5c09012SAndroid Build Coastguard Worker 239*d5c09012SAndroid Build Coastguard Worker // The ID to use for this policy, which will become the final component of 240*d5c09012SAndroid Build Coastguard Worker // the policy's resource name. The ID must contain 3 to 63 characters. It can 241*d5c09012SAndroid Build Coastguard Worker // contain lowercase letters and numbers, as well as dashes (`-`) and periods 242*d5c09012SAndroid Build Coastguard Worker // (`.`). The first character must be a lowercase letter. 243*d5c09012SAndroid Build Coastguard Worker string policy_id = 3; 244*d5c09012SAndroid Build Coastguard Worker} 245*d5c09012SAndroid Build Coastguard Worker 246*d5c09012SAndroid Build Coastguard Worker// Request message for `UpdatePolicy`. 247*d5c09012SAndroid Build Coastguard Workermessage UpdatePolicyRequest { 248*d5c09012SAndroid Build Coastguard Worker // Required. The policy to update. 249*d5c09012SAndroid Build Coastguard Worker // 250*d5c09012SAndroid Build Coastguard Worker // To prevent conflicting updates, the `etag` value must match the value that 251*d5c09012SAndroid Build Coastguard Worker // is stored in IAM. If the `etag` values do not match, the request fails with 252*d5c09012SAndroid Build Coastguard Worker // a `409` error code and `ABORTED` status. 253*d5c09012SAndroid Build Coastguard Worker Policy policy = 1 [(google.api.field_behavior) = REQUIRED]; 254*d5c09012SAndroid Build Coastguard Worker} 255*d5c09012SAndroid Build Coastguard Worker 256*d5c09012SAndroid Build Coastguard Worker// Request message for `DeletePolicy`. 257*d5c09012SAndroid Build Coastguard Workermessage DeletePolicyRequest { 258*d5c09012SAndroid Build Coastguard Worker // Required. The resource name of the policy to delete. Format: 259*d5c09012SAndroid Build Coastguard Worker // `policies/{attachment_point}/denypolicies/{policy_id}` 260*d5c09012SAndroid Build Coastguard Worker // 261*d5c09012SAndroid Build Coastguard Worker // 262*d5c09012SAndroid Build Coastguard Worker // Use the URL-encoded full resource name, which means that the forward-slash 263*d5c09012SAndroid Build Coastguard Worker // character, `/`, must be written as `%2F`. For example, 264*d5c09012SAndroid Build Coastguard Worker // `policies/cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project/denypolicies/my-policy`. 265*d5c09012SAndroid Build Coastguard Worker // 266*d5c09012SAndroid Build Coastguard Worker // For organizations and folders, use the numeric ID in the full resource 267*d5c09012SAndroid Build Coastguard Worker // name. For projects, you can use the alphanumeric or the numeric ID. 268*d5c09012SAndroid Build Coastguard Worker string name = 1 [(google.api.field_behavior) = REQUIRED]; 269*d5c09012SAndroid Build Coastguard Worker 270*d5c09012SAndroid Build Coastguard Worker // Optional. The expected `etag` of the policy to delete. If the value does not match 271*d5c09012SAndroid Build Coastguard Worker // the value that is stored in IAM, the request fails with a `409` error code 272*d5c09012SAndroid Build Coastguard Worker // and `ABORTED` status. 273*d5c09012SAndroid Build Coastguard Worker // 274*d5c09012SAndroid Build Coastguard Worker // If you omit this field, the policy is deleted regardless of its current 275*d5c09012SAndroid Build Coastguard Worker // `etag`. 276*d5c09012SAndroid Build Coastguard Worker string etag = 2 [(google.api.field_behavior) = OPTIONAL]; 277*d5c09012SAndroid Build Coastguard Worker} 278*d5c09012SAndroid Build Coastguard Worker 279*d5c09012SAndroid Build Coastguard Worker// Metadata for long-running `Policy` operations. 280*d5c09012SAndroid Build Coastguard Workermessage PolicyOperationMetadata { 281*d5c09012SAndroid Build Coastguard Worker // Timestamp when the `google.longrunning.Operation` was created. 282*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp create_time = 1; 283*d5c09012SAndroid Build Coastguard Worker} 284