<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="iam_v1.html">Google Identity and Access Management API</a> . <a href="iam_v1.projects.html">projects</a> . <a href="iam_v1.projects.serviceAccounts.html">serviceAccounts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="iam_v1.projects.serviceAccounts.keys.html">keys()</a></code>
</p>
<p class="firstline">Returns the keys Resource.</p>

<p class="toc_element">
  <code><a href="#create">create(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a service account and returns it.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a service acount.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a ServiceAccount</p>
<p class="toc_element">
  <code><a href="#getIamPolicy">getIamPolicy(resource, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the IAM access control policy for specified IAM resource.</p>
<p class="toc_element">
  <code><a href="#list">list(name, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
<p class="firstline">Lists service accounts for a project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#setIamPolicy">setIamPolicy(resource, body, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the IAM access control policy for the specified IAM resource.</p>
<p class="toc_element">
  <code><a href="#signBlob">signBlob(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Signs a blob using a service account.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(resource, body, x__xgafv=None)</a></code></p>
<p class="firstline">Tests the specified permissions against the IAM access control policy for the specified IAM resource.</p>
<p class="toc_element">
  <code><a href="#update">update(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a service account. Currently, only the following fields are updatable: 'display_name' . The 'etag' is mandatory.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(name, body, x__xgafv=None)</code>
  <pre>Creates a service account and returns it.

Args:
  name: string, Required. The resource name of the project associated with the service accounts, such as "projects/123" (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The service account create request.
    "serviceAccount": { # A service account in the Identity and Access Management API. To create a service account, you 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. # The ServiceAccount resource to create. Currently, only the following values are user assignable: display_name .
      "oauth2ClientId": "A String", # @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.
      "displayName": "A String", # Optional. A user-specified description of the service account. Must be fewer than 100 UTF-8 bytes.
      "name": "A String", # The resource name of the service account in the format "projects/{project}/serviceAccounts/{account}". In 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}".
      "projectId": "A String", # @OutputOnly The id of the project that owns the service account.
      "etag": "A String", # Used to perform a consistent read-modify-write.
      "uniqueId": "A String", # @OutputOnly unique and stable id of the service account.
      "email": "A String", # @OutputOnly Email address of the service account.
    },
    "accountId": "A String", # 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 1-63 characters long, and match the regular expression [a-z]([-a-z0-9]*[a-z0-9]) to comply with RFC1035.
  }

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # A service account in the Identity and Access Management API. To create a service account, you 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.
    "oauth2ClientId": "A String", # @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.
    "displayName": "A String", # Optional. A user-specified description of the service account. Must be fewer than 100 UTF-8 bytes.
    "name": "A String", # The resource name of the service account in the format "projects/{project}/serviceAccounts/{account}". In 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}".
    "projectId": "A String", # @OutputOnly The id of the project that owns the service account.
    "etag": "A String", # Used to perform a consistent read-modify-write.
    "uniqueId": "A String", # @OutputOnly unique and stable id of the service account.
    "email": "A String", # @OutputOnly Email address of the service account.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a service acount.

Args:
  name: string, The resource name of the service account in 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. (required)
  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a ServiceAccount

Args:
  name: string, The resource name of the service account in 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. (required)
  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # A service account in the Identity and Access Management API. To create a service account, you 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.
    "oauth2ClientId": "A String", # @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.
    "displayName": "A String", # Optional. A user-specified description of the service account. Must be fewer than 100 UTF-8 bytes.
    "name": "A String", # The resource name of the service account in the format "projects/{project}/serviceAccounts/{account}". In 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}".
    "projectId": "A String", # @OutputOnly The id of the project that owns the service account.
    "etag": "A String", # Used to perform a consistent read-modify-write.
    "uniqueId": "A String", # @OutputOnly unique and stable id of the service account.
    "email": "A String", # @OutputOnly Email address of the service account.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getIamPolicy">getIamPolicy(resource, x__xgafv=None)</code>
  <pre>Returns the IAM access control policy for specified IAM resource.

Args:
  resource: string, REQUIRED: The resource for which the policy is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `getIamPolicy` documentation. (required)
  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
    "rules": [
      { # A rule to be applied in a Policy.
        "notIn": [ # The rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is not in this set of entries. The format for in and not_in entries is the same as for members in a Binding (see google/iam/v1/policy.proto).
          "A String",
        ],
        "description": "A String", # Human-readable description of the rule.
        "in": [ # The rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in this set of entries.
          "A String",
        ],
        "action": "A String", # Required
        "conditions": [ # Additional restrictions that must be met
          { # A condition to be met.
            "iam": "A String", # Trusted attributes supplied by the IAM system.
            "svc": "A String", # Trusted attributes discharged by the service.
            "value": "A String", # The object of the condition. Exactly one of these must be set.
            "sys": "A String", # Trusted attributes supplied by any service that owns resources and uses the IAM system for access control.
            "values": [ # The objects of the condition. This is mutually exclusive with 'value'.
              "A String",
            ],
            "op": "A String", # An operator to apply the subject with.
          },
        ],
        "logConfig": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
          { # Specifies what kind of log the caller must write Increment a streamz counter with the specified metric and field names. Metric names should start with a '/', generally be lowercase-only, and end in "_count". Field names should not contain an initial slash. The actual exported metric names will have "/iam/policy" prepended. Field names correspond to IAM request parameters and field values are their respective values. At present only "iam_principal", corresponding to IAMContext.principal, is supported. Examples: counter { metric: "/debug_access_count" field: "iam_principal" } ==> increment counter /iam/policy/backend_debug_access_count {iam_principal=[value of IAMContext.principal]} At this time we do not support: * multiple field names (though this may be supported in the future) * decrementing the counter * incrementing it by anything other than 1
            "counter": { # Options for counters # Counter options.
              "field": "A String", # The field value to attribute.
              "metric": "A String", # The metric to update.
            },
            "dataAccess": { # Write a Data Access (Gin) log # Data access options.
            },
            "cloudAudit": { # Write a Cloud Audit log # Cloud audit options.
            },
          },
        ],
        "permissions": [ # A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
          "A String",
        ],
      },
    ],
    "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
      { # Associates `members` with a `role`.
        "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
          "A String",
        ],
      },
    ],
    "version": 42, # Version of the `Policy`. The default version is 0.
    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(name, pageToken=None, x__xgafv=None, pageSize=None)</code>
  <pre>Lists service accounts for a project.

Args:
  name: string, Required. The resource name of the project associated with the service accounts, such as "projects/123" (required)
  pageToken: string, Optional pagination token returned in an earlier [ListServiceAccountsResponse.next_page_token].
  x__xgafv: string, V1 error format.
  pageSize: integer, 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] in a subsequent request.

Returns:
  An object of the form:

    { # The service account list response.
    "nextPageToken": "A String", # To retrieve the next page of results, set [ListServiceAccountsRequest.page_token] to this value.
    "accounts": [ # The list of matching service accounts.
      { # A service account in the Identity and Access Management API. To create a service account, you 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.
        "oauth2ClientId": "A String", # @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.
        "displayName": "A String", # Optional. A user-specified description of the service account. Must be fewer than 100 UTF-8 bytes.
        "name": "A String", # The resource name of the service account in the format "projects/{project}/serviceAccounts/{account}". In 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}".
        "projectId": "A String", # @OutputOnly The id of the project that owns the service account.
        "etag": "A String", # Used to perform a consistent read-modify-write.
        "uniqueId": "A String", # @OutputOnly unique and stable id of the service account.
        "email": "A String", # @OutputOnly Email address of the service account.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="setIamPolicy">setIamPolicy(resource, body, x__xgafv=None)</code>
  <pre>Sets the IAM access control policy for the specified IAM resource.

Args:
  resource: string, REQUIRED: The resource for which the policy is being specified. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `setIamPolicy` documentation. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for `SetIamPolicy` method.
    "policy": { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
      "rules": [
        { # A rule to be applied in a Policy.
          "notIn": [ # The rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is not in this set of entries. The format for in and not_in entries is the same as for members in a Binding (see google/iam/v1/policy.proto).
            "A String",
          ],
          "description": "A String", # Human-readable description of the rule.
          "in": [ # The rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in this set of entries.
            "A String",
          ],
          "action": "A String", # Required
          "conditions": [ # Additional restrictions that must be met
            { # A condition to be met.
              "iam": "A String", # Trusted attributes supplied by the IAM system.
              "svc": "A String", # Trusted attributes discharged by the service.
              "value": "A String", # The object of the condition. Exactly one of these must be set.
              "sys": "A String", # Trusted attributes supplied by any service that owns resources and uses the IAM system for access control.
              "values": [ # The objects of the condition. This is mutually exclusive with 'value'.
                "A String",
              ],
              "op": "A String", # An operator to apply the subject with.
            },
          ],
          "logConfig": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
            { # Specifies what kind of log the caller must write Increment a streamz counter with the specified metric and field names. Metric names should start with a '/', generally be lowercase-only, and end in "_count". Field names should not contain an initial slash. The actual exported metric names will have "/iam/policy" prepended. Field names correspond to IAM request parameters and field values are their respective values. At present only "iam_principal", corresponding to IAMContext.principal, is supported. Examples: counter { metric: "/debug_access_count" field: "iam_principal" } ==> increment counter /iam/policy/backend_debug_access_count {iam_principal=[value of IAMContext.principal]} At this time we do not support: * multiple field names (though this may be supported in the future) * decrementing the counter * incrementing it by anything other than 1
              "counter": { # Options for counters # Counter options.
                "field": "A String", # The field value to attribute.
                "metric": "A String", # The metric to update.
              },
              "dataAccess": { # Write a Data Access (Gin) log # Data access options.
              },
              "cloudAudit": { # Write a Cloud Audit log # Cloud audit options.
              },
            },
          ],
          "permissions": [ # A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
            "A String",
          ],
        },
      ],
      "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
        { # Associates `members` with a `role`.
          "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
          "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
            "A String",
          ],
        },
      ],
      "version": 42, # Version of the `Policy`. The default version is 0.
      "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
    },
  }

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
    "rules": [
      { # A rule to be applied in a Policy.
        "notIn": [ # The rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is not in this set of entries. The format for in and not_in entries is the same as for members in a Binding (see google/iam/v1/policy.proto).
          "A String",
        ],
        "description": "A String", # Human-readable description of the rule.
        "in": [ # The rule matches if the PRINCIPAL/AUTHORITY_SELECTOR is in this set of entries.
          "A String",
        ],
        "action": "A String", # Required
        "conditions": [ # Additional restrictions that must be met
          { # A condition to be met.
            "iam": "A String", # Trusted attributes supplied by the IAM system.
            "svc": "A String", # Trusted attributes discharged by the service.
            "value": "A String", # The object of the condition. Exactly one of these must be set.
            "sys": "A String", # Trusted attributes supplied by any service that owns resources and uses the IAM system for access control.
            "values": [ # The objects of the condition. This is mutually exclusive with 'value'.
              "A String",
            ],
            "op": "A String", # An operator to apply the subject with.
          },
        ],
        "logConfig": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
          { # Specifies what kind of log the caller must write Increment a streamz counter with the specified metric and field names. Metric names should start with a '/', generally be lowercase-only, and end in "_count". Field names should not contain an initial slash. The actual exported metric names will have "/iam/policy" prepended. Field names correspond to IAM request parameters and field values are their respective values. At present only "iam_principal", corresponding to IAMContext.principal, is supported. Examples: counter { metric: "/debug_access_count" field: "iam_principal" } ==> increment counter /iam/policy/backend_debug_access_count {iam_principal=[value of IAMContext.principal]} At this time we do not support: * multiple field names (though this may be supported in the future) * decrementing the counter * incrementing it by anything other than 1
            "counter": { # Options for counters # Counter options.
              "field": "A String", # The field value to attribute.
              "metric": "A String", # The metric to update.
            },
            "dataAccess": { # Write a Data Access (Gin) log # Data access options.
            },
            "cloudAudit": { # Write a Cloud Audit log # Cloud audit options.
            },
          },
        ],
        "permissions": [ # A permission is a string of form '..' (e.g., 'storage.buckets.list'). A value of '*' matches all permissions, and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
          "A String",
        ],
      },
    ],
    "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
      { # Associates `members` with a `role`.
        "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
          "A String",
        ],
      },
    ],
    "version": 42, # Version of the `Policy`. The default version is 0.
    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
  }</pre>
</div>

<div class="method">
    <code class="details" id="signBlob">signBlob(name, body, x__xgafv=None)</code>
  <pre>Signs a blob using a service account.

Args:
  name: string, The resource name of the service account in 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. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The service account sign blob request.
    "bytesToSign": "A String", # The bytes to sign
  }

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # The service account sign blob response.
    "keyId": "A String", # The id of the key used to sign the blob.
    "signature": "A String", # The signed blob.
  }</pre>
</div>

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(resource, body, x__xgafv=None)</code>
  <pre>Tests the specified permissions against the IAM access control policy for the specified IAM resource.

Args:
  resource: string, REQUIRED: The resource for which the policy detail is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `testIamPermissions` documentation. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for `TestIamPermissions` method.
    "permissions": [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see IAM Overview.
      "A String",
    ],
  }

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # Response message for `TestIamPermissions` method.
    "permissions": [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
      "A String",
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(name, body, x__xgafv=None)</code>
  <pre>Updates a service account. Currently, only the following fields are updatable: 'display_name' . The 'etag' is mandatory.

Args:
  name: string, The resource name of the service account in the format "projects/{project}/serviceAccounts/{account}". In 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}". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A service account in the Identity and Access Management API. To create a service account, you 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.
  "oauth2ClientId": "A String", # @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.
  "displayName": "A String", # Optional. A user-specified description of the service account. Must be fewer than 100 UTF-8 bytes.
  "name": "A String", # The resource name of the service account in the format "projects/{project}/serviceAccounts/{account}". In 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}".
  "projectId": "A String", # @OutputOnly The id of the project that owns the service account.
  "etag": "A String", # Used to perform a consistent read-modify-write.
  "uniqueId": "A String", # @OutputOnly unique and stable id of the service account.
  "email": "A String", # @OutputOnly Email address of the service account.
}

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # A service account in the Identity and Access Management API. To create a service account, you 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.
    "oauth2ClientId": "A String", # @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.
    "displayName": "A String", # Optional. A user-specified description of the service account. Must be fewer than 100 UTF-8 bytes.
    "name": "A String", # The resource name of the service account in the format "projects/{project}/serviceAccounts/{account}". In 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}".
    "projectId": "A String", # @OutputOnly The id of the project that owns the service account.
    "etag": "A String", # Used to perform a consistent read-modify-write.
    "uniqueId": "A String", # @OutputOnly unique and stable id of the service account.
    "email": "A String", # @OutputOnly Email address of the service account.
  }</pre>
</div>

</body></html>