| // Copyright 2016 Google Inc. |
| // |
| // 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/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"; |
| |
| option cc_enable_arenas = true; |
| option go_package = "google.golang.org/genproto/googleapis/iam/admin/v1;admin"; |
| option java_multiple_files = true; |
| option java_outer_classname = "IamProto"; |
| option java_package = "com.google.iam.admin.v1"; |
| |
| |
| // Creates and manages service account objects. |
| // |
| // Service account is an account that belongs to your project instead |
| // of to an individual end user. It is used to authenticate calls |
| // to a Google API. |
| // |
| // To create a service account, specify the `project_id` and `account_id` |
| // for the account. The `account_id` is unique within the project, and used |
| // to generate the service account email address and a stable |
| // `unique_id`. |
| // |
| // All other methods can identify accounts using the format |
| // `projects/{project}/serviceAccounts/{account}`. |
| // Using `-` as a wildcard for the project will infer the project from |
| // the account. The `account` value can be the `email` address or the |
| // `unique_id` of the service account. |
| service IAM { |
| // Lists [ServiceAccounts][google.iam.admin.v1.ServiceAccount] for a project. |
| rpc ListServiceAccounts(ListServiceAccountsRequest) returns (ListServiceAccountsResponse) { |
| option (google.api.http) = { get: "/v1/{name=projects/*}/serviceAccounts" }; |
| } |
| |
| // Gets a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. |
| rpc GetServiceAccount(GetServiceAccountRequest) returns (ServiceAccount) { |
| option (google.api.http) = { get: "/v1/{name=projects/*/serviceAccounts/*}" }; |
| } |
| |
| // Creates a [ServiceAccount][google.iam.admin.v1.ServiceAccount] |
| // and returns it. |
| rpc CreateServiceAccount(CreateServiceAccountRequest) returns (ServiceAccount) { |
| option (google.api.http) = { post: "/v1/{name=projects/*}/serviceAccounts" body: "*" }; |
| } |
| |
| // Updates a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. |
| // |
| // Currently, only the following fields are updatable: |
| // `display_name` . |
| // The `etag` is mandatory. |
| rpc UpdateServiceAccount(ServiceAccount) returns (ServiceAccount) { |
| option (google.api.http) = { put: "/v1/{name=projects/*/serviceAccounts/*}" body: "*" }; |
| } |
| |
| // Deletes a [ServiceAccount][google.iam.admin.v1.ServiceAccount]. |
| rpc DeleteServiceAccount(DeleteServiceAccountRequest) returns (google.protobuf.Empty) { |
| option (google.api.http) = { delete: "/v1/{name=projects/*/serviceAccounts/*}" }; |
| } |
| |
| // Lists [ServiceAccountKeys][google.iam.admin.v1.ServiceAccountKey]. |
| rpc ListServiceAccountKeys(ListServiceAccountKeysRequest) returns (ListServiceAccountKeysResponse) { |
| option (google.api.http) = { get: "/v1/{name=projects/*/serviceAccounts/*}/keys" }; |
| } |
| |
| // Gets the [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey] |
| // by key id. |
| rpc GetServiceAccountKey(GetServiceAccountKeyRequest) returns (ServiceAccountKey) { |
| option (google.api.http) = { get: "/v1/{name=projects/*/serviceAccounts/*/keys/*}" }; |
| } |
| |
| // Creates a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey] |
| // and returns it. |
| rpc CreateServiceAccountKey(CreateServiceAccountKeyRequest) returns (ServiceAccountKey) { |
| option (google.api.http) = { post: "/v1/{name=projects/*/serviceAccounts/*}/keys" body: "*" }; |
| } |
| |
| // Deletes a [ServiceAccountKey][google.iam.admin.v1.ServiceAccountKey]. |
| rpc DeleteServiceAccountKey(DeleteServiceAccountKeyRequest) returns (google.protobuf.Empty) { |
| option (google.api.http) = { delete: "/v1/{name=projects/*/serviceAccounts/*/keys/*}" }; |
| } |
| |
| // Signs a blob using a service account's system-managed private key. |
| rpc SignBlob(SignBlobRequest) returns (SignBlobResponse) { |
| option (google.api.http) = { post: "/v1/{name=projects/*/serviceAccounts/*}:signBlob" body: "*" }; |
| } |
| |
| // Returns the IAM access control policy for a |
| // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. |
| rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest) returns (google.iam.v1.Policy) { |
| option (google.api.http) = { post: "/v1/{resource=projects/*/serviceAccounts/*}:getIamPolicy" body: "" }; |
| } |
| |
| // Sets the IAM access control policy for a |
| // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. |
| rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest) returns (google.iam.v1.Policy) { |
| option (google.api.http) = { post: "/v1/{resource=projects/*/serviceAccounts/*}:setIamPolicy" body: "*" }; |
| } |
| |
| // Tests the specified permissions against the IAM access control policy |
| // for 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: "*" }; |
| } |
| |
| // Queries roles that can be granted on a particular resource. |
| // A role is grantable if it can be used as the role in a binding for a policy |
| // for that resource. |
| rpc QueryGrantableRoles(QueryGrantableRolesRequest) returns (QueryGrantableRolesResponse) { |
| option (google.api.http) = { post: "/v1/roles:queryGrantableRoles" body: "*" }; |
| } |
| } |
| |
| // A service account in the Identity and Access Management API. |
| // |
| // To create a service account, specify the `project_id` and the `account_id` |
| // for the account. The `account_id` is unique within the project, and is used |
| // to generate the service account email address and a stable |
| // `unique_id`. |
| // |
| // If the account already exists, the account's resource name is returned |
| // in util::Status's ResourceInfo.resource_name in the format of |
| // projects/{project}/serviceAccounts/{email}. The caller can use the name in |
| // other methods to access the account. |
| // |
| // All other methods can identify the service account using the format |
| // `projects/{project}/serviceAccounts/{account}`. |
| // Using `-` as a wildcard for the project will infer the project from |
| // the account. The `account` value can be the `email` address or the |
| // `unique_id` of the service account. |
| message ServiceAccount { |
| // The resource name of the service account in the following format: |
| // `projects/{project}/serviceAccounts/{account}`. |
| // |
| // Requests using `-` as a wildcard for the project will infer the project |
| // from the `account` and the `account` value can be the `email` address or |
| // the `unique_id` of the service account. |
| // |
| // In responses the resource name will always be in the format |
| // `projects/{project}/serviceAccounts/{email}`. |
| string name = 1; |
| |
| // @OutputOnly The id of the project that owns the service account. |
| string project_id = 2; |
| |
| // @OutputOnly The unique and stable id of the service account. |
| string unique_id = 4; |
| |
| // @OutputOnly The email address of the service account. |
| string email = 5; |
| |
| // Optional. A user-specified description of the service account. Must be |
| // fewer than 100 UTF-8 bytes. |
| string display_name = 6; |
| |
| // Used to perform a consistent read-modify-write. |
| bytes etag = 7; |
| |
| // @OutputOnly. The OAuth2 client id for the service account. |
| // This is used in conjunction with the OAuth2 clientconfig API to make |
| // three legged OAuth2 (3LO) flows to access the data of Google users. |
| string oauth2_client_id = 9; |
| } |
| |
| // 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; |
| |
| // 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; |
| |
| // The [ServiceAccount][google.iam.admin.v1.ServiceAccount] resource to create. |
| // Currently, only the following values are user assignable: |
| // `display_name` . |
| 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; |
| |
| // 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. |
| 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 { |
| // The resource name of the service account in the following format: |
| // `projects/{project}/serviceAccounts/{account}`. |
| // Using `-` as a wildcard for the project 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 delete request. |
| message DeleteServiceAccountRequest { |
| // The resource name of the service account in the following format: |
| // `projects/{project}/serviceAccounts/{account}`. |
| // Using `-` as a wildcard for the project 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; |
| } |
| |
| // The resource name of the service account in the following format: |
| // `projects/{project}/serviceAccounts/{account}`. |
| // |
| // Using `-` as a wildcard for the project, 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; |
| |
| // 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 { |
| // The resource name of the service account key in the following format: |
| // `projects/{project}/serviceAccounts/{account}/keys/{key}`. |
| // |
| // Using `-` as a wildcard for the project 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 output format of the public key requested. |
| // X509_PEM is the default output format. |
| ServiceAccountPublicKeyType public_key_type = 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 key-pairs are managed automatically by Google, and rotated |
| // daily without user intervention. The private key never leaves Google's |
| // servers to maximize security. |
| // |
| // Public keys for all service accounts are also published at the OAuth2 |
| // Service Account API. |
| message ServiceAccountKey { |
| // The resource name of the service account key in the following format |
| // `projects/{project}/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. |
| 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. |
| google.protobuf.Timestamp valid_before_time = 5; |
| } |
| |
| // The service account key create request. |
| message CreateServiceAccountKeyRequest { |
| // The resource name of the service account in the following format: |
| // `projects/{project}/serviceAccounts/{account}`. |
| // Using `-` as a wildcard for the project 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 output format of the private key. `GOOGLE_CREDENTIALS_FILE` is the |
| // default output format. |
| ServiceAccountPrivateKeyType private_key_type = 2; |
| |
| // Which type of key and algorithm to use for the key. |
| // The default is currently a 4K RSA key. However this may change in the |
| // future. |
| ServiceAccountKeyAlgorithm key_algorithm = 3; |
| } |
| |
| // The service account key delete request. |
| message DeleteServiceAccountKeyRequest { |
| // The resource name of the service account key in the following format: |
| // `projects/{project}/serviceAccounts/{account}/keys/{key}`. |
| // Using `-` as a wildcard for the project 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 sign blob request. |
| message SignBlobRequest { |
| // The resource name of the service account in the following format: |
| // `projects/{project}/serviceAccounts/{account}`. |
| // Using `-` as a wildcard for the project 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 bytes to sign. |
| bytes bytes_to_sign = 2; |
| } |
| |
| // The service account sign blob response. |
| message SignBlobResponse { |
| // The id of the key used to sign the blob. |
| string key_id = 1; |
| |
| // The signed blob. |
| bytes signature = 2; |
| } |
| |
| // A role in the Identity and Access Management API. |
| message Role { |
| // 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 curated 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 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; |
| } |
| |
| // The grantable role query response. |
| message QueryGrantableRolesResponse { |
| // The list of matching roles. |
| repeated Role roles = 1; |
| } |
| |
| // 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 { |
| // Unspecified. Returns nothing here. |
| TYPE_NONE = 0; |
| |
| // X509 PEM format. |
| TYPE_X509_PEM_FILE = 1; |
| |
| // Raw public key. |
| TYPE_RAW_PUBLIC_KEY = 2; |
| } |