123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623 |
- // Copyright 2022 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- syntax = "proto3";
- package google.iam.admin.v1;
- import "google/api/annotations.proto";
- import "google/api/client.proto";
- import "google/api/field_behavior.proto";
- import "google/api/resource.proto";
- import "google/iam/v1/iam_policy.proto";
- import "google/iam/v1/policy.proto";
- import "google/protobuf/empty.proto";
- import "google/protobuf/field_mask.proto";
- import "google/protobuf/timestamp.proto";
- import "google/type/expr.proto";
- option cc_enable_arenas = true;
- option csharp_namespace = "Google.Cloud.Iam.Admin.V1";
- option go_package = "google.golang.org/genproto/googleapis/iam/admin/v1;admin";
- option java_multiple_files = true;
- option java_package = "com.google.iam.admin.v1";
- option php_namespace = "Google\\Cloud\\Iam\\Admin\\V1";
- // Creates and manages Identity and Access Management (IAM) resources.
- //
- // You can use this service to work with all of the following resources:
- //
- // * **Service accounts**, which identify an application or a virtual machine
- // (VM) instance rather than a person
- // * **Service account keys**, which service accounts use to authenticate with
- // Google APIs
- // * **IAM policies for service accounts**, which specify the roles that a
- // principal has for the service account
- // * **IAM custom roles**, which help you limit the number of permissions that
- // you grant to principals
- //
- // In addition, you can use this service to complete the following tasks, among
- // others:
- //
- // * Test whether a service account can use specific permissions
- // * Check which roles you can grant for a specific resource
- // * Lint, or validate, condition expressions in an IAM policy
- //
- // When you read data from the IAM API, each read is eventually consistent. In
- // other words, if you write data with the IAM API, then immediately read that
- // data, the read operation might return an older version of the data. To deal
- // with this behavior, your application can retry the request with truncated
- // exponential backoff.
- //
- // In contrast, writing data to the IAM API is sequentially consistent. In other
- // words, write operations are always processed in the order in which they were
- // received.
- service IAM {
- option (google.api.default_host) = "iam.googleapis.com";
- option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform";
- // Lists every [ServiceAccount][google.iam.admin.v1.ServiceAccount] that belongs to a specific project.
- rpc ListServiceAccounts(ListServiceAccountsRequest) returns (ListServiceAccountsResponse) {
- option (google.api.http) = {
- get: "/v1/{name=projects/*}/serviceAccounts"
- };
- option (google.api.method_signature) = "name";
- }
- // Gets a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- rpc GetServiceAccount(GetServiceAccountRequest) returns (ServiceAccount) {
- option (google.api.http) = {
- get: "/v1/{name=projects/*/serviceAccounts/*}"
- };
- option (google.api.method_signature) = "name";
- }
- // Creates a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- rpc CreateServiceAccount(CreateServiceAccountRequest) returns (ServiceAccount) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*}/serviceAccounts"
- body: "*"
- };
- option (google.api.method_signature) = "name,account_id,service_account";
- }
- // **Note:** We are in the process of deprecating this method. Use
- // [PatchServiceAccount][google.iam.admin.v1.IAM.PatchServiceAccount] instead.
- //
- // Updates a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- //
- // You can update only the `display_name` field.
- rpc UpdateServiceAccount(ServiceAccount) returns (ServiceAccount) {
- option (google.api.http) = {
- put: "/v1/{name=projects/*/serviceAccounts/*}"
- body: "*"
- };
- }
- // Patches a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- rpc PatchServiceAccount(PatchServiceAccountRequest) returns (ServiceAccount) {
- option (google.api.http) = {
- patch: "/v1/{service_account.name=projects/*/serviceAccounts/*}"
- body: "*"
- };
- }
- // Deletes a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- //
- // **Warning:** After you delete a service account, you might not be able to
- // undelete it. If you know that you need to re-enable the service account in
- // the future, use [DisableServiceAccount][google.iam.admin.v1.IAM.DisableServiceAccount] instead.
- //
- // If you delete a service account, IAM permanently removes the service
- // account 30 days later. Google Cloud cannot recover the service account
- // after it is permanently removed, even if you file a support request.
- //
- // To help avoid unplanned outages, we recommend that you disable the service
- // account before you delete it. Use [DisableServiceAccount][google.iam.admin.v1.IAM.DisableServiceAccount] to disable the
- // service account, then wait at least 24 hours and watch for unintended
- // consequences. If there are no unintended consequences, you can delete the
- // service account.
- rpc DeleteServiceAccount(DeleteServiceAccountRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- delete: "/v1/{name=projects/*/serviceAccounts/*}"
- };
- option (google.api.method_signature) = "name";
- }
- // Restores a deleted [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- //
- // **Important:** It is not always possible to restore a deleted service
- // account. Use this method only as a last resort.
- //
- // After you delete a service account, IAM permanently removes the service
- // account 30 days later. There is no way to restore a deleted service account
- // that has been permanently removed.
- rpc UndeleteServiceAccount(UndeleteServiceAccountRequest) returns (UndeleteServiceAccountResponse) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*}:undelete"
- body: "*"
- };
- }
- // Enables a [ServiceAccount][google.iam.admin.v1.ServiceAccount] that was disabled by
- // [DisableServiceAccount][google.iam.admin.v1.IAM.DisableServiceAccount].
- //
- // If the service account is already enabled, then this method has no effect.
- //
- // If the service account was disabled by other means—for example, if Google
- // disabled the service account because it was compromised—you cannot use this
- // method to enable the service account.
- rpc EnableServiceAccount(EnableServiceAccountRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*}:enable"
- body: "*"
- };
- }
- // Disables a [ServiceAccount][google.iam.admin.v1.ServiceAccount] immediately.
- //
- // If an application uses the service account to authenticate, that
- // application can no longer call Google APIs or access Google Cloud
- // resources. Existing access tokens for the service account are rejected, and
- // requests for new access tokens will fail.
- //
- // To re-enable the service account, use [EnableServiceAccount][google.iam.admin.v1.IAM.EnableServiceAccount]. After you
- // re-enable the service account, its existing access tokens will be accepted,
- // and you can request new access tokens.
- //
- // To help avoid unplanned outages, we recommend that you disable the service
- // account before you delete it. Use this method to disable the service
- // account, then wait at least 24 hours and watch for unintended consequences.
- // If there are no unintended consequences, you can delete the service account
- // with [DeleteServiceAccount][google.iam.admin.v1.IAM.DeleteServiceAccount].
- rpc DisableServiceAccount(DisableServiceAccountRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*}:disable"
- body: "*"
- };
- }
- // Lists every [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey] for a service account.
- rpc ListServiceAccountKeys(ListServiceAccountKeysRequest) returns (ListServiceAccountKeysResponse) {
- option (google.api.http) = {
- get: "/v1/{name=projects/*/serviceAccounts/*}/keys"
- };
- option (google.api.method_signature) = "name,key_types";
- }
- // Gets a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey].
- rpc GetServiceAccountKey(GetServiceAccountKeyRequest) returns (ServiceAccountKey) {
- option (google.api.http) = {
- get: "/v1/{name=projects/*/serviceAccounts/*/keys/*}"
- };
- option (google.api.method_signature) = "name,public_key_type";
- }
- // Creates a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey].
- rpc CreateServiceAccountKey(CreateServiceAccountKeyRequest) returns (ServiceAccountKey) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*}/keys"
- body: "*"
- };
- option (google.api.method_signature) = "name,private_key_type,key_algorithm";
- }
- // Uploads the public key portion of a key pair that you manage, and
- // associates the public key with a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- //
- // After you upload the public key, you can use the private key from the key
- // pair as a service account key.
- rpc UploadServiceAccountKey(UploadServiceAccountKeyRequest) returns (ServiceAccountKey) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*}/keys:upload"
- body: "*"
- };
- }
- // Deletes a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey]. Deleting a service account key does not
- // revoke short-lived credentials that have been issued based on the service
- // account key.
- rpc DeleteServiceAccountKey(DeleteServiceAccountKeyRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- delete: "/v1/{name=projects/*/serviceAccounts/*/keys/*}"
- };
- option (google.api.method_signature) = "name";
- }
- // Disable a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey]. A disabled service account key can be
- // re-enabled with [EnableServiceAccountKey][google.iam.admin.v1.IAM.EnableServiceAccountKey].
- rpc DisableServiceAccountKey(DisableServiceAccountKeyRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*/keys/*}:disable"
- body: "*"
- };
- option (google.api.method_signature) = "name";
- }
- // Enable a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey].
- rpc EnableServiceAccountKey(EnableServiceAccountKeyRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*/keys/*}:enable"
- body: "*"
- };
- option (google.api.method_signature) = "name";
- }
- // **Note:** This method is deprecated. Use the
- // [`signBlob`](https://cloud.google.com/iam/help/rest-credentials/v1/projects.serviceAccounts/signBlob)
- // method in the IAM Service Account Credentials API instead. If you currently
- // use this method, see the [migration
- // guide](https://cloud.google.com/iam/help/credentials/migrate-api) for
- // instructions.
- //
- // Signs a blob using the system-managed private key for a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- rpc SignBlob(SignBlobRequest) returns (SignBlobResponse) {
- option deprecated = true;
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*}:signBlob"
- body: "*"
- };
- option (google.api.method_signature) = "name,bytes_to_sign";
- }
- // **Note:** This method is deprecated. Use the
- // [`signJwt`](https://cloud.google.com/iam/help/rest-credentials/v1/projects.serviceAccounts/signJwt)
- // method in the IAM Service Account Credentials API instead. If you currently
- // use this method, see the [migration
- // guide](https://cloud.google.com/iam/help/credentials/migrate-api) for
- // instructions.
- //
- // Signs a JSON Web Token (JWT) using the system-managed private key for a
- // [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- rpc SignJwt(SignJwtRequest) returns (SignJwtResponse) {
- option deprecated = true;
- option (google.api.http) = {
- post: "/v1/{name=projects/*/serviceAccounts/*}:signJwt"
- body: "*"
- };
- option (google.api.method_signature) = "name,payload";
- }
- // Gets the IAM policy that is attached to a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. This IAM
- // policy specifies which principals have access to the service account.
- //
- // This method does not tell you whether the service account has been granted
- // any roles on other resources. To check whether a service account has role
- // grants on a resource, use the `getIamPolicy` method for that resource. For
- // example, to view the role grants for a project, call the Resource Manager
- // API's
- // [`projects.getIamPolicy`](https://cloud.google.com/resource-manager/reference/rest/v1/projects/getIamPolicy)
- // method.
- rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest) returns (google.iam.v1.Policy) {
- option (google.api.http) = {
- post: "/v1/{resource=projects/*/serviceAccounts/*}:getIamPolicy"
- };
- option (google.api.method_signature) = "resource";
- }
- // Sets the IAM policy that is attached to a [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- //
- // Use this method to grant or revoke access to the service account. For
- // example, you could grant a principal the ability to impersonate the service
- // account.
- //
- // This method does not enable the service account to access other resources.
- // To grant roles to a service account on a resource, follow these steps:
- //
- // 1. Call the resource's `getIamPolicy` method to get its current IAM policy.
- // 2. Edit the policy so that it binds the service account to an IAM role for
- // the resource.
- // 3. Call the resource's `setIamPolicy` method to update its IAM policy.
- //
- // For detailed instructions, see
- // [Manage access to project, folders, and
- // organizations](https://cloud.google.com/iam/help/service-accounts/granting-access-to-service-accounts)
- // or [Manage access to other
- // resources](https://cloud.google.com/iam/help/access/manage-other-resources).
- rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest) returns (google.iam.v1.Policy) {
- option (google.api.http) = {
- post: "/v1/{resource=projects/*/serviceAccounts/*}:setIamPolicy"
- body: "*"
- };
- option (google.api.method_signature) = "resource,policy";
- }
- // Tests whether the caller has the specified permissions on a
- // [ServiceAccount][google.iam.admin.v1.ServiceAccount].
- rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest) returns (google.iam.v1.TestIamPermissionsResponse) {
- option (google.api.http) = {
- post: "/v1/{resource=projects/*/serviceAccounts/*}:testIamPermissions"
- body: "*"
- };
- option (google.api.method_signature) = "resource,permissions";
- }
- // Lists roles that can be granted on a Google Cloud resource. A role is
- // grantable if the IAM policy for the resource can contain bindings to the
- // role.
- rpc QueryGrantableRoles(QueryGrantableRolesRequest) returns (QueryGrantableRolesResponse) {
- option (google.api.http) = {
- post: "/v1/roles:queryGrantableRoles"
- body: "*"
- };
- option (google.api.method_signature) = "full_resource_name";
- }
- // Lists every predefined [Role][google.iam.admin.v1.Role] that IAM supports, or every custom role
- // that is defined for an organization or project.
- rpc ListRoles(ListRolesRequest) returns (ListRolesResponse) {
- option (google.api.http) = {
- get: "/v1/roles"
- additional_bindings {
- get: "/v1/{parent=organizations/*}/roles"
- }
- additional_bindings {
- get: "/v1/{parent=projects/*}/roles"
- }
- };
- }
- // Gets the definition of a [Role][google.iam.admin.v1.Role].
- rpc GetRole(GetRoleRequest) returns (Role) {
- option (google.api.http) = {
- get: "/v1/{name=roles/*}"
- additional_bindings {
- get: "/v1/{name=organizations/*/roles/*}"
- }
- additional_bindings {
- get: "/v1/{name=projects/*/roles/*}"
- }
- };
- }
- // Creates a new custom [Role][google.iam.admin.v1.Role].
- rpc CreateRole(CreateRoleRequest) returns (Role) {
- option (google.api.http) = {
- post: "/v1/{parent=organizations/*}/roles"
- body: "*"
- additional_bindings {
- post: "/v1/{parent=projects/*}/roles"
- body: "*"
- }
- };
- }
- // Updates the definition of a custom [Role][google.iam.admin.v1.Role].
- rpc UpdateRole(UpdateRoleRequest) returns (Role) {
- option (google.api.http) = {
- patch: "/v1/{name=organizations/*/roles/*}"
- body: "role"
- additional_bindings {
- patch: "/v1/{name=projects/*/roles/*}"
- body: "role"
- }
- };
- }
- // Deletes a custom [Role][google.iam.admin.v1.Role].
- //
- // When you delete a custom role, the following changes occur immediately:
- //
- // * You cannot bind a principal to the custom role in an IAM
- // [Policy][google.iam.v1.Policy].
- // * Existing bindings to the custom role are not changed, but they have no
- // effect.
- // * By default, the response from [ListRoles][google.iam.admin.v1.IAM.ListRoles] does not include the custom
- // role.
- //
- // You have 7 days to undelete the custom role. After 7 days, the following
- // changes occur:
- //
- // * The custom role is permanently deleted and cannot be recovered.
- // * If an IAM policy contains a binding to the custom role, the binding is
- // permanently removed.
- rpc DeleteRole(DeleteRoleRequest) returns (Role) {
- option (google.api.http) = {
- delete: "/v1/{name=organizations/*/roles/*}"
- additional_bindings {
- delete: "/v1/{name=projects/*/roles/*}"
- }
- };
- }
- // Undeletes a custom [Role][google.iam.admin.v1.Role].
- rpc UndeleteRole(UndeleteRoleRequest) returns (Role) {
- option (google.api.http) = {
- post: "/v1/{name=organizations/*/roles/*}:undelete"
- body: "*"
- additional_bindings {
- post: "/v1/{name=projects/*/roles/*}:undelete"
- body: "*"
- }
- };
- }
- // Lists every permission that you can test on a resource. A permission is
- // testable if you can check whether a principal has that permission on the
- // resource.
- rpc QueryTestablePermissions(QueryTestablePermissionsRequest) returns (QueryTestablePermissionsResponse) {
- option (google.api.http) = {
- post: "/v1/permissions:queryTestablePermissions"
- body: "*"
- };
- }
- // Returns a list of services that allow you to opt into audit logs that are
- // not generated by default.
- //
- // To learn more about audit logs, see the [Logging
- // documentation](https://cloud.google.com/logging/docs/audit).
- rpc QueryAuditableServices(QueryAuditableServicesRequest) returns (QueryAuditableServicesResponse) {
- option (google.api.http) = {
- post: "/v1/iamPolicies:queryAuditableServices"
- body: "*"
- };
- }
- // Lints, or validates, an IAM policy. Currently checks the
- // [google.iam.v1.Binding.condition][google.iam.v1.Binding.condition] field, which contains a condition
- // expression for a role binding.
- //
- // Successful calls to this method always return an HTTP `200 OK` status code,
- // even if the linter detects an issue in the IAM policy.
- rpc LintPolicy(LintPolicyRequest) returns (LintPolicyResponse) {
- option (google.api.http) = {
- post: "/v1/iamPolicies:lintPolicy"
- body: "*"
- };
- }
- }
- // An IAM service account.
- //
- // A service account is an account for an application or a virtual machine (VM)
- // instance, not a person. You can use a service account to call Google APIs. To
- // learn more, read the [overview of service
- // accounts](https://cloud.google.com/iam/help/service-accounts/overview).
- //
- // When you create a service account, you specify the project ID that owns the
- // service account, as well as a name that must be unique within the project.
- // IAM uses these values to create an email address that identifies the service
- // account.
- message ServiceAccount {
- option (google.api.resource) = {
- type: "iam.googleapis.com/ServiceAccount"
- pattern: "projects/{project}/serviceAccounts/{service_account}"
- };
- // The resource name of the service account.
- //
- // Use one of the following formats:
- //
- // * `projects/{PROJECT_ID}/serviceAccounts/{EMAIL_ADDRESS}`
- // * `projects/{PROJECT_ID}/serviceAccounts/{UNIQUE_ID}`
- //
- // As an alternative, you can use the `-` wildcard character instead of the
- // project ID:
- //
- // * `projects/-/serviceAccounts/{EMAIL_ADDRESS}`
- // * `projects/-/serviceAccounts/{UNIQUE_ID}`
- //
- // When possible, avoid using the `-` wildcard character, because it can cause
- // response messages to contain misleading error codes. For example, if you
- // try to get the service account
- // `projects/-/serviceAccounts/fake@example.com`, which does not exist, the
- // response contains an HTTP `403 Forbidden` error instead of a `404 Not
- // Found` error.
- string name = 1;
- // Output only. The ID of the project that owns the service account.
- string project_id = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Output only. The unique, stable numeric ID for the service account.
- //
- // Each service account retains its unique ID even if you delete the service
- // account. For example, if you delete a service account, then create a new
- // service account with the same name, the new service account has a different
- // unique ID than the deleted service account.
- string unique_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Output only. The email address of the service account.
- string email = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Optional. A user-specified, human-readable name for the service account. The maximum
- // length is 100 UTF-8 bytes.
- string display_name = 6 [(google.api.field_behavior) = OPTIONAL];
- // Deprecated. Do not use.
- bytes etag = 7 [deprecated = true];
- // Optional. A user-specified, human-readable description of the service account. The
- // maximum length is 256 UTF-8 bytes.
- string description = 8 [(google.api.field_behavior) = OPTIONAL];
- // Output only. The OAuth 2.0 client ID for the service account.
- string oauth2_client_id = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
- // Output only. Whether the service account is disabled.
- bool disabled = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
- }
- // The service account create request.
- message CreateServiceAccountRequest {
- // Required. The resource name of the project associated with the service
- // accounts, such as `projects/my-project-123`.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "cloudresourcemanager.googleapis.com/Project"
- }
- ];
- // Required. The account id that is used to generate the service account
- // email address and a stable unique id. It is unique within a project,
- // must be 6-30 characters long, and match the regular expression
- // `[a-z]([-a-z0-9]*[a-z0-9])` to comply with RFC1035.
- string account_id = 2 [(google.api.field_behavior) = REQUIRED];
- // The [ServiceAccount][google.iam.admin.v1.ServiceAccount] resource to
- // create. Currently, only the following values are user assignable:
- // `display_name` and `description`.
- ServiceAccount service_account = 3;
- }
- // The service account list request.
- message ListServiceAccountsRequest {
- // Required. The resource name of the project associated with the service
- // accounts, such as `projects/my-project-123`.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "cloudresourcemanager.googleapis.com/Project"
- }
- ];
- // Optional limit on the number of service accounts to include in the
- // response. Further accounts can subsequently be obtained by including the
- // [ListServiceAccountsResponse.next_page_token][google.iam.admin.v1.ListServiceAccountsResponse.next_page_token]
- // in a subsequent request.
- //
- // The default is 20, and the maximum is 100.
- int32 page_size = 2;
- // Optional pagination token returned in an earlier
- // [ListServiceAccountsResponse.next_page_token][google.iam.admin.v1.ListServiceAccountsResponse.next_page_token].
- string page_token = 3;
- }
- // The service account list response.
- message ListServiceAccountsResponse {
- // The list of matching service accounts.
- repeated ServiceAccount accounts = 1;
- // To retrieve the next page of results, set
- // [ListServiceAccountsRequest.page_token][google.iam.admin.v1.ListServiceAccountsRequest.page_token]
- // to this value.
- string next_page_token = 2;
- }
- // The service account get request.
- message GetServiceAccountRequest {
- // Required. The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/ServiceAccount"
- }
- ];
- }
- // The service account delete request.
- message DeleteServiceAccountRequest {
- // Required. The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/ServiceAccount"
- }
- ];
- }
- // The service account patch request.
- //
- // You can patch only the `display_name` and `description` fields. You must use
- // the `update_mask` field to specify which of these fields you want to patch.
- //
- // Only the fields specified in the request are guaranteed to be returned in
- // the response. Other fields may be empty in the response.
- message PatchServiceAccountRequest {
- ServiceAccount service_account = 1;
- google.protobuf.FieldMask update_mask = 2;
- }
- // The service account undelete request.
- message UndeleteServiceAccountRequest {
- // The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT_UNIQUE_ID}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account.
- string name = 1;
- }
- message UndeleteServiceAccountResponse {
- // Metadata for the restored service account.
- ServiceAccount restored_account = 1;
- }
- // The service account enable request.
- message EnableServiceAccountRequest {
- // The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1;
- }
- // The service account disable request.
- message DisableServiceAccountRequest {
- // The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1;
- }
- // The service account keys list request.
- message ListServiceAccountKeysRequest {
- // `KeyType` filters to selectively retrieve certain varieties
- // of keys.
- enum KeyType {
- // Unspecified key type. The presence of this in the
- // message will immediately result in an error.
- KEY_TYPE_UNSPECIFIED = 0;
- // User-managed keys (managed and rotated by the user).
- USER_MANAGED = 1;
- // System-managed keys (managed and rotated by Google).
- SYSTEM_MANAGED = 2;
- }
- // Required. The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- //
- // Using `-` as a wildcard for the `PROJECT_ID`, will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/ServiceAccount"
- }
- ];
- // Filters the types of keys the user wants to include in the list
- // response. Duplicate key types are not allowed. If no key type
- // is provided, all keys are returned.
- repeated KeyType key_types = 2;
- }
- // The service account keys list response.
- message ListServiceAccountKeysResponse {
- // The public keys for the service account.
- repeated ServiceAccountKey keys = 1;
- }
- // The service account key get by id request.
- message GetServiceAccountKeyRequest {
- // Required. The resource name of the service account key in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}`.
- //
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/Key"
- }
- ];
- // Optional. The output format of the public key. The default is `TYPE_NONE`, which
- // means that the public key is not returned.
- ServiceAccountPublicKeyType public_key_type = 2 [(google.api.field_behavior) = OPTIONAL];
- }
- // Supported key algorithms.
- enum ServiceAccountKeyAlgorithm {
- // An unspecified key algorithm.
- KEY_ALG_UNSPECIFIED = 0;
- // 1k RSA Key.
- KEY_ALG_RSA_1024 = 1;
- // 2k RSA Key.
- KEY_ALG_RSA_2048 = 2;
- }
- // Supported private key output formats.
- enum ServiceAccountPrivateKeyType {
- // Unspecified. Equivalent to `TYPE_GOOGLE_CREDENTIALS_FILE`.
- TYPE_UNSPECIFIED = 0;
- // PKCS12 format.
- // The password for the PKCS12 file is `notasecret`.
- // For more information, see https://tools.ietf.org/html/rfc7292.
- TYPE_PKCS12_FILE = 1;
- // Google Credentials File format.
- TYPE_GOOGLE_CREDENTIALS_FILE = 2;
- }
- // Supported public key output formats.
- enum ServiceAccountPublicKeyType {
- // Do not return the public key.
- TYPE_NONE = 0;
- // X509 PEM format.
- TYPE_X509_PEM_FILE = 1;
- // Raw public key.
- TYPE_RAW_PUBLIC_KEY = 2;
- }
- // Service Account Key Origin.
- enum ServiceAccountKeyOrigin {
- // Unspecified key origin.
- ORIGIN_UNSPECIFIED = 0;
- // Key is provided by user.
- USER_PROVIDED = 1;
- // Key is provided by Google.
- GOOGLE_PROVIDED = 2;
- }
- // Represents a service account key.
- //
- // A service account has two sets of key-pairs: user-managed, and
- // system-managed.
- //
- // User-managed key-pairs can be created and deleted by users. Users are
- // responsible for rotating these keys periodically to ensure security of
- // their service accounts. Users retain the private key of these key-pairs,
- // and Google retains ONLY the public key.
- //
- // System-managed keys are automatically rotated by Google, and are used for
- // signing for a maximum of two weeks. The rotation process is probabilistic,
- // and usage of the new key will gradually ramp up and down over the key's
- // lifetime.
- //
- // If you cache the public key set for a service account, we recommend that you
- // update the cache every 15 minutes. User-managed keys can be added and removed
- // at any time, so it is important to update the cache frequently. For
- // Google-managed keys, Google will publish a key at least 6 hours before it is
- // first used for signing and will keep publishing it for at least 6 hours after
- // it was last used for signing.
- //
- // Public keys for all service accounts are also published at the OAuth2
- // Service Account API.
- message ServiceAccountKey {
- option (google.api.resource) = {
- type: "iam.googleapis.com/Key"
- pattern: "projects/{project}/serviceAccounts/{service_account}/keys/{key}"
- };
- // The resource name of the service account key in the following format
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}`.
- string name = 1;
- // The output format for the private key.
- // Only provided in `CreateServiceAccountKey` responses, not
- // in `GetServiceAccountKey` or `ListServiceAccountKey` responses.
- //
- // Google never exposes system-managed private keys, and never retains
- // user-managed private keys.
- ServiceAccountPrivateKeyType private_key_type = 2;
- // Specifies the algorithm (and possibly key size) for the key.
- ServiceAccountKeyAlgorithm key_algorithm = 8;
- // The private key data. Only provided in `CreateServiceAccountKey`
- // responses. Make sure to keep the private key data secure because it
- // allows for the assertion of the service account identity.
- // When base64 decoded, the private key data can be used to authenticate with
- // Google API client libraries and with
- // <a href="/sdk/gcloud/reference/auth/activate-service-account">gcloud
- // auth activate-service-account</a>.
- bytes private_key_data = 3;
- // The public key data. Only provided in `GetServiceAccountKey` responses.
- bytes public_key_data = 7;
- // The key can be used after this timestamp.
- google.protobuf.Timestamp valid_after_time = 4;
- // The key can be used before this timestamp.
- // For system-managed key pairs, this timestamp is the end time for the
- // private key signing operation. The public key could still be used
- // for verification for a few hours after this time.
- google.protobuf.Timestamp valid_before_time = 5;
- // The key origin.
- ServiceAccountKeyOrigin key_origin = 9;
- // The key type.
- ListServiceAccountKeysRequest.KeyType key_type = 10;
- // The key status.
- bool disabled = 11;
- }
- // The service account key create request.
- message CreateServiceAccountKeyRequest {
- // Required. The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/ServiceAccount"
- }
- ];
- // The output format of the private key. The default value is
- // `TYPE_GOOGLE_CREDENTIALS_FILE`, which is the Google Credentials File
- // format.
- ServiceAccountPrivateKeyType private_key_type = 2;
- // Which type of key and algorithm to use for the key.
- // The default is currently a 2K RSA key. However this may change in the
- // future.
- ServiceAccountKeyAlgorithm key_algorithm = 3;
- }
- // The service account key upload request.
- message UploadServiceAccountKeyRequest {
- // The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1;
- // The public key to associate with the service account. Must be an RSA public
- // key that is wrapped in an X.509 v3 certificate. Include the first line,
- // `-----BEGIN CERTIFICATE-----`, and the last line,
- // `-----END CERTIFICATE-----`.
- bytes public_key_data = 2;
- }
- // The service account key delete request.
- message DeleteServiceAccountKeyRequest {
- // Required. The resource name of the service account key in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/Key"
- }
- ];
- }
- // The service account key disable request.
- message DisableServiceAccountKeyRequest {
- // Required. The resource name of the service account key in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}`.
- //
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/Key"
- }
- ];
- }
- // The service account key enable request.
- message EnableServiceAccountKeyRequest {
- // Required. The resource name of the service account key in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}`.
- //
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/Key"
- }
- ];
- }
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The service account sign blob request.
- message SignBlobRequest {
- // Required. Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- deprecated = true,
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/ServiceAccount"
- }
- ];
- // Required. Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The bytes to sign.
- bytes bytes_to_sign = 2 [
- deprecated = true,
- (google.api.field_behavior) = REQUIRED
- ];
- }
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The service account sign blob response.
- message SignBlobResponse {
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The id of the key used to sign the blob.
- string key_id = 1 [deprecated = true];
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The signed blob.
- bytes signature = 2 [deprecated = true];
- }
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The service account sign JWT request.
- message SignJwtRequest {
- // Required. Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The resource name of the service account in the following format:
- // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}`.
- // Using `-` as a wildcard for the `PROJECT_ID` will infer the project from
- // the account. The `ACCOUNT` value can be the `email` address or the
- // `unique_id` of the service account.
- string name = 1 [
- deprecated = true,
- (google.api.field_behavior) = REQUIRED,
- (google.api.resource_reference) = {
- type: "iam.googleapis.com/ServiceAccount"
- }
- ];
- // Required. Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The JWT payload to sign. Must be a serialized JSON object that contains a
- // JWT Claims Set. For example: `{"sub": "user@example.com", "iat": 313435}`
- //
- // If the JWT Claims Set contains an expiration time (`exp`) claim, it must be
- // an integer timestamp that is not in the past and no more than 12 hours in
- // the future.
- //
- // If the JWT Claims Set does not contain an expiration time (`exp`) claim,
- // this claim is added automatically, with a timestamp that is 1 hour in the
- // future.
- string payload = 2 [
- deprecated = true,
- (google.api.field_behavior) = REQUIRED
- ];
- }
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The service account sign JWT response.
- message SignJwtResponse {
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The id of the key used to sign the JWT.
- string key_id = 1 [deprecated = true];
- // Deprecated. [Migrate to Service Account Credentials
- // API](https://cloud.google.com/iam/help/credentials/migrate-api).
- //
- // The signed JWT.
- string signed_jwt = 2 [deprecated = true];
- }
- // A role in the Identity and Access Management API.
- message Role {
- // A stage representing a role's lifecycle phase.
- enum RoleLaunchStage {
- // The user has indicated this role is currently in an Alpha phase. If this
- // launch stage is selected, the `stage` field will not be included when
- // requesting the definition for a given role.
- ALPHA = 0;
- // The user has indicated this role is currently in a Beta phase.
- BETA = 1;
- // The user has indicated this role is generally available.
- GA = 2;
- // The user has indicated this role is being deprecated.
- DEPRECATED = 4;
- // This role is disabled and will not contribute permissions to any
- // principals it is granted to in policies.
- DISABLED = 5;
- // The user has indicated this role is currently in an EAP phase.
- EAP = 6;
- }
- // The name of the role.
- //
- // When Role is used in CreateRole, the role name must not be set.
- //
- // When Role is used in output and other input such as UpdateRole, the role
- // name is the complete path, e.g., roles/logging.viewer for predefined roles
- // and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
- string name = 1;
- // Optional. A human-readable title for the role. Typically this
- // is limited to 100 UTF-8 bytes.
- string title = 2;
- // Optional. A human-readable description for the role.
- string description = 3;
- // The names of the permissions this role grants when bound in an IAM policy.
- repeated string included_permissions = 7;
- // The current launch stage of the role. If the `ALPHA` launch stage has been
- // selected for a role, the `stage` field will not be included in the
- // returned definition for the role.
- RoleLaunchStage stage = 8;
- // Used to perform a consistent read-modify-write.
- bytes etag = 9;
- // The current deleted state of the role. This field is read only.
- // It will be ignored in calls to CreateRole and UpdateRole.
- bool deleted = 11;
- }
- // The grantable role query request.
- message QueryGrantableRolesRequest {
- // Required. The full resource name to query from the list of grantable roles.
- //
- // The name follows the Google Cloud Platform resource format.
- // For example, a Cloud Platform project with id `my-project` will be named
- // `//cloudresourcemanager.googleapis.com/projects/my-project`.
- string full_resource_name = 1 [(google.api.field_behavior) = REQUIRED];
- RoleView view = 2;
- // Optional limit on the number of roles to include in the response.
- //
- // The default is 300, and the maximum is 1,000.
- int32 page_size = 3;
- // Optional pagination token returned in an earlier
- // QueryGrantableRolesResponse.
- string page_token = 4;
- }
- // The grantable role query response.
- message QueryGrantableRolesResponse {
- // The list of matching roles.
- repeated Role roles = 1;
- // To retrieve the next page of results, set
- // `QueryGrantableRolesRequest.page_token` to this value.
- string next_page_token = 2;
- }
- // A view for Role objects.
- enum RoleView {
- // Omits the `included_permissions` field.
- // This is the default value.
- BASIC = 0;
- // Returns all fields.
- FULL = 1;
- }
- // The request to get all roles defined under a resource.
- message ListRolesRequest {
- // The `parent` parameter's value depends on the target resource for the
- // request, namely
- // [`roles`](https://cloud.google.com/iam/reference/rest/v1/roles),
- // [`projects`](https://cloud.google.com/iam/reference/rest/v1/projects.roles),
- // or
- // [`organizations`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles).
- // Each resource type's `parent` value format is described below:
- //
- // * [`roles.list()`](https://cloud.google.com/iam/reference/rest/v1/roles/list): An empty string.
- // This method doesn't require a resource; it simply returns all
- // [predefined
- // roles](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles)
- // in Cloud IAM. Example request URL: `https://iam.googleapis.com/v1/roles`
- //
- // * [`projects.roles.list()`](https://cloud.google.com/iam/reference/rest/v1/projects.roles/list):
- // `projects/{PROJECT_ID}`. This method lists all project-level
- // [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles).
- // Example request URL:
- // `https://iam.googleapis.com/v1/projects/{PROJECT_ID}/roles`
- //
- // * [`organizations.roles.list()`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles/list):
- // `organizations/{ORGANIZATION_ID}`. This method lists all
- // organization-level [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles).
- // Example request URL:
- // `https://iam.googleapis.com/v1/organizations/{ORGANIZATION_ID}/roles`
- //
- // Note: Wildcard (*) values are invalid; you must specify a complete project
- // ID or organization ID.
- string parent = 1 [(google.api.resource_reference) = {
- type: "*"
- }];
- // Optional limit on the number of roles to include in the response.
- //
- // The default is 300, and the maximum is 1,000.
- int32 page_size = 2;
- // Optional pagination token returned in an earlier ListRolesResponse.
- string page_token = 3;
- // Optional view for the returned Role objects. When `FULL` is specified,
- // the `includedPermissions` field is returned, which includes a list of all
- // permissions in the role. The default value is `BASIC`, which does not
- // return the `includedPermissions` field.
- RoleView view = 4;
- // Include Roles that have been deleted.
- bool show_deleted = 6;
- }
- // The response containing the roles defined under a resource.
- message ListRolesResponse {
- // The Roles defined on this resource.
- repeated Role roles = 1;
- // To retrieve the next page of results, set
- // `ListRolesRequest.page_token` to this value.
- string next_page_token = 2;
- }
- // The request to get the definition of an existing role.
- message GetRoleRequest {
- // The `name` parameter's value depends on the target resource for the
- // request, namely
- // [`roles`](https://cloud.google.com/iam/reference/rest/v1/roles),
- // [`projects`](https://cloud.google.com/iam/reference/rest/v1/projects.roles),
- // or
- // [`organizations`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles).
- // Each resource type's `name` value format is described below:
- //
- // * [`roles.get()`](https://cloud.google.com/iam/reference/rest/v1/roles/get): `roles/{ROLE_NAME}`.
- // This method returns results from all
- // [predefined
- // roles](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles)
- // in Cloud IAM. Example request URL:
- // `https://iam.googleapis.com/v1/roles/{ROLE_NAME}`
- //
- // * [`projects.roles.get()`](https://cloud.google.com/iam/reference/rest/v1/projects.roles/get):
- // `projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`. This method returns only
- // [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the project level. Example request URL:
- // `https://iam.googleapis.com/v1/projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // * [`organizations.roles.get()`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles/get):
- // `organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`. This method
- // returns only [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the organization level. Example request URL:
- // `https://iam.googleapis.com/v1/organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // Note: Wildcard (*) values are invalid; you must specify a complete project
- // ID or organization ID.
- string name = 1 [(google.api.resource_reference) = {
- type: "*"
- }];
- }
- // The request to create a new role.
- message CreateRoleRequest {
- // The `parent` parameter's value depends on the target resource for the
- // request, namely
- // [`projects`](https://cloud.google.com/iam/reference/rest/v1/projects.roles)
- // or
- // [`organizations`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles).
- // Each resource type's `parent` value format is described below:
- //
- // * [`projects.roles.create()`](https://cloud.google.com/iam/reference/rest/v1/projects.roles/create):
- // `projects/{PROJECT_ID}`. This method creates project-level
- // [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles).
- // Example request URL:
- // `https://iam.googleapis.com/v1/projects/{PROJECT_ID}/roles`
- //
- // * [`organizations.roles.create()`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles/create):
- // `organizations/{ORGANIZATION_ID}`. This method creates organization-level
- // [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles).
- // Example request URL:
- // `https://iam.googleapis.com/v1/organizations/{ORGANIZATION_ID}/roles`
- //
- // Note: Wildcard (*) values are invalid; you must specify a complete project
- // ID or organization ID.
- string parent = 1 [(google.api.resource_reference) = {
- type: "*"
- }];
- // The role ID to use for this role.
- //
- // A role ID may contain alphanumeric characters, underscores (`_`), and
- // periods (`.`). It must contain a minimum of 3 characters and a maximum of
- // 64 characters.
- string role_id = 2;
- // The Role resource to create.
- Role role = 3;
- }
- // The request to update a role.
- message UpdateRoleRequest {
- // The `name` parameter's value depends on the target resource for the
- // request, namely
- // [`projects`](https://cloud.google.com/iam/reference/rest/v1/projects.roles)
- // or
- // [`organizations`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles).
- // Each resource type's `name` value format is described below:
- //
- // * [`projects.roles.patch()`](https://cloud.google.com/iam/reference/rest/v1/projects.roles/patch):
- // `projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`. This method updates only
- // [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the project level. Example request URL:
- // `https://iam.googleapis.com/v1/projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // * [`organizations.roles.patch()`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles/patch):
- // `organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`. This method
- // updates only [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the organization level. Example request URL:
- // `https://iam.googleapis.com/v1/organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // Note: Wildcard (*) values are invalid; you must specify a complete project
- // ID or organization ID.
- string name = 1 [(google.api.resource_reference) = {
- type: "*"
- }];
- // The updated role.
- Role role = 2;
- // A mask describing which fields in the Role have changed.
- google.protobuf.FieldMask update_mask = 3;
- }
- // The request to delete an existing role.
- message DeleteRoleRequest {
- // The `name` parameter's value depends on the target resource for the
- // request, namely
- // [`projects`](https://cloud.google.com/iam/reference/rest/v1/projects.roles)
- // or
- // [`organizations`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles).
- // Each resource type's `name` value format is described below:
- //
- // * [`projects.roles.delete()`](https://cloud.google.com/iam/reference/rest/v1/projects.roles/delete):
- // `projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`. This method deletes only
- // [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the project level. Example request URL:
- // `https://iam.googleapis.com/v1/projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // * [`organizations.roles.delete()`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles/delete):
- // `organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`. This method
- // deletes only [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the organization level. Example request URL:
- // `https://iam.googleapis.com/v1/organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // Note: Wildcard (*) values are invalid; you must specify a complete project
- // ID or organization ID.
- string name = 1 [(google.api.resource_reference) = {
- type: "*"
- }];
- // Used to perform a consistent read-modify-write.
- bytes etag = 2;
- }
- // The request to undelete an existing role.
- message UndeleteRoleRequest {
- // The `name` parameter's value depends on the target resource for the
- // request, namely
- // [`projects`](https://cloud.google.com/iam/reference/rest/v1/projects.roles)
- // or
- // [`organizations`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles).
- // Each resource type's `name` value format is described below:
- //
- // * [`projects.roles.undelete()`](https://cloud.google.com/iam/reference/rest/v1/projects.roles/undelete):
- // `projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`. This method undeletes
- // only [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the project level. Example request URL:
- // `https://iam.googleapis.com/v1/projects/{PROJECT_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // * [`organizations.roles.undelete()`](https://cloud.google.com/iam/reference/rest/v1/organizations.roles/undelete):
- // `organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`. This method
- // undeletes only [custom
- // roles](https://cloud.google.com/iam/docs/understanding-custom-roles) that
- // have been created at the organization level. Example request URL:
- // `https://iam.googleapis.com/v1/organizations/{ORGANIZATION_ID}/roles/{CUSTOM_ROLE_ID}`
- //
- // Note: Wildcard (*) values are invalid; you must specify a complete project
- // ID or organization ID.
- string name = 1 [(google.api.resource_reference) = {
- type: "*"
- }];
- // Used to perform a consistent read-modify-write.
- bytes etag = 2;
- }
- // A permission which can be included by a role.
- message Permission {
- // A stage representing a permission's lifecycle phase.
- enum PermissionLaunchStage {
- // The permission is currently in an alpha phase.
- ALPHA = 0;
- // The permission is currently in a beta phase.
- BETA = 1;
- // The permission is generally available.
- GA = 2;
- // The permission is being deprecated.
- DEPRECATED = 3;
- }
- // The state of the permission with regards to custom roles.
- enum CustomRolesSupportLevel {
- // Default state. Permission is fully supported for custom role use.
- SUPPORTED = 0;
- // Permission is being tested to check custom role compatibility.
- TESTING = 1;
- // Permission is not supported for custom role use.
- NOT_SUPPORTED = 2;
- }
- // The name of this Permission.
- string name = 1;
- // The title of this Permission.
- string title = 2;
- // A brief description of what this Permission is used for.
- // This permission can ONLY be used in predefined roles.
- string description = 3;
- bool only_in_predefined_roles = 4 [deprecated = true];
- // The current launch stage of the permission.
- PermissionLaunchStage stage = 5;
- // The current custom role support level.
- CustomRolesSupportLevel custom_roles_support_level = 6;
- // The service API associated with the permission is not enabled.
- bool api_disabled = 7;
- // The preferred name for this permission. If present, then this permission is
- // an alias of, and equivalent to, the listed primary_permission.
- string primary_permission = 8;
- }
- // A request to get permissions which can be tested on a resource.
- message QueryTestablePermissionsRequest {
- // Required. The full resource name to query from the list of testable
- // permissions.
- //
- // The name follows the Google Cloud Platform resource format.
- // For example, a Cloud Platform project with id `my-project` will be named
- // `//cloudresourcemanager.googleapis.com/projects/my-project`.
- string full_resource_name = 1;
- // Optional limit on the number of permissions to include in the response.
- //
- // The default is 100, and the maximum is 1,000.
- int32 page_size = 2;
- // Optional pagination token returned in an earlier
- // QueryTestablePermissionsRequest.
- string page_token = 3;
- }
- // The response containing permissions which can be tested on a resource.
- message QueryTestablePermissionsResponse {
- // The Permissions testable on the requested resource.
- repeated Permission permissions = 1;
- // To retrieve the next page of results, set
- // `QueryTestableRolesRequest.page_token` to this value.
- string next_page_token = 2;
- }
- // A request to get the list of auditable services for a resource.
- message QueryAuditableServicesRequest {
- // Required. The full resource name to query from the list of auditable
- // services.
- //
- // The name follows the Google Cloud Platform resource format.
- // For example, a Cloud Platform project with id `my-project` will be named
- // `//cloudresourcemanager.googleapis.com/projects/my-project`.
- string full_resource_name = 1;
- }
- // A response containing a list of auditable services for a resource.
- message QueryAuditableServicesResponse {
- // Contains information about an auditable service.
- message AuditableService {
- // Public name of the service.
- // For example, the service name for Cloud IAM is 'iam.googleapis.com'.
- string name = 1;
- }
- // The auditable services for a resource.
- repeated AuditableService services = 1;
- }
- // The request to lint a Cloud IAM policy object.
- message LintPolicyRequest {
- // The full resource name of the policy this lint request is about.
- //
- // The name follows the Google Cloud Platform (GCP) resource format.
- // For example, a GCP project with ID `my-project` will be named
- // `//cloudresourcemanager.googleapis.com/projects/my-project`.
- //
- // The resource name is not used to read the policy instance from the Cloud
- // IAM database. The candidate policy for lint has to be provided in the same
- // request object.
- string full_resource_name = 1;
- // Required. The Cloud IAM object to be linted.
- oneof lint_object {
- // [google.iam.v1.Binding.condition] [google.iam.v1.Binding.condition] object to be linted.
- google.type.Expr condition = 5;
- }
- }
- // Structured response of a single validation unit.
- message LintResult {
- // Possible Level values of a validation unit corresponding to its domain
- // of discourse.
- enum Level {
- // Level is unspecified.
- LEVEL_UNSPECIFIED = 0;
- // A validation unit which operates on an individual condition within a
- // binding.
- CONDITION = 3;
- }
- // Possible Severity values of an issued result.
- enum Severity {
- // Severity is unspecified.
- SEVERITY_UNSPECIFIED = 0;
- // A validation unit returns an error only for critical issues. If an
- // attempt is made to set the problematic policy without rectifying the
- // critical issue, it causes the `setPolicy` operation to fail.
- ERROR = 1;
- // Any issue which is severe enough but does not cause an error.
- // For example, suspicious constructs in the input object will not
- // necessarily fail `setPolicy`, but there is a high likelihood that they
- // won't behave as expected during policy evaluation in `checkPolicy`.
- // This includes the following common scenarios:
- //
- // - Unsatisfiable condition: Expired timestamp in date/time condition.
- // - Ineffective condition: Condition on a <principal, role> pair which is
- // granted unconditionally in another binding of the same policy.
- WARNING = 2;
- // Reserved for the issues that are not severe as `ERROR`/`WARNING`, but
- // need special handling. For instance, messages about skipped validation
- // units are issued as `NOTICE`.
- NOTICE = 3;
- // Any informative statement which is not severe enough to raise
- // `ERROR`/`WARNING`/`NOTICE`, like auto-correction recommendations on the
- // input content. Note that current version of the linter does not utilize
- // `INFO`.
- INFO = 4;
- // Deprecated severity level.
- DEPRECATED = 5;
- }
- // The validation unit level.
- Level level = 1;
- // The validation unit name, for instance
- // "lintValidationUnits/ConditionComplexityCheck".
- string validation_unit_name = 2;
- // The validation unit severity.
- Severity severity = 3;
- // The name of the field for which this lint result is about.
- //
- // For nested messages `field_name` consists of names of the embedded fields
- // separated by period character. The top-level qualifier is the input object
- // to lint in the request. For example, the `field_name` value
- // `condition.expression` identifies a lint result for the `expression` field
- // of the provided condition.
- string field_name = 5;
- // 0-based character position of problematic construct within the object
- // identified by `field_name`. Currently, this is populated only for condition
- // expression.
- int32 location_offset = 6;
- // Human readable debug message associated with the issue.
- string debug_message = 7;
- }
- // The response of a lint operation. An empty response indicates
- // the operation was able to fully execute and no lint issue was found.
- message LintPolicyResponse {
- // List of lint results sorted by `severity` in descending order.
- repeated LintResult lint_results = 1;
- }
|