<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 (IAM) 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 ServiceAccount</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a ServiceAccount.</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 a</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 ServiceAccounts 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 a</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's system-managed private key.</p>
<p class="toc_element">
  <code><a href="#signJwt">signJwt(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Signs a JWT using a service account's system-managed private key.</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</p>
<p class="toc_element">
  <code><a href="#update">update(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a ServiceAccount.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(name, body, x__xgafv=None)</code>
  <pre>Creates a ServiceAccount
and returns it.

Args:
  name: string, Required. The resource name of the project associated with the service
accounts, such as `projects/my-project-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. # The ServiceAccount resource to create.
        # Currently, only the following values are user assignable:
        # `display_name` .
        #
        # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
        # 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 following format:
          # `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
          #
          # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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 The unique and stable id of the service account.
      "email": "A String", # @OutputOnly The 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 6-30 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.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
      # 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 following format:
        # `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
        #
        # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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 The unique and stable id of the service account.
    "email": "A String", # @OutputOnly The 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 ServiceAccount.

Args:
  name: string, The resource name of the service account in the following format:
`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
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.
    Allowed values
      1 - v1 error format
      2 - v2 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 following format:
`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
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.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
      # 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 following format:
        # `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
        #
        # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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 The unique and stable id of the service account.
    "email": "A String", # @OutputOnly The 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 a
ServiceAccount.

Args:
  resource: string, REQUIRED: The resource for which the policy is being requested.
See the operation documentation for the appropriate value for this field. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 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).
    "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",
        ],
      },
    ],
    "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.
    "version": 42, # Version of the `Policy`. The default version is 0.
  }</pre>
</div>

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

Args:
  name: string, Required. The resource name of the project associated with the service
accounts, such as `projects/my-project-123`. (required)
  pageToken: string, Optional pagination token returned in an earlier
ListServiceAccountsResponse.next_page_token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 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, 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
          # 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 following format:
            # `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
            #
            # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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 The unique and stable id of the service account.
        "email": "A String", # @OutputOnly The 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 a
ServiceAccount.

Args:
  resource: string, REQUIRED: The resource for which the policy is being specified.
See the operation documentation for the appropriate value for this field. (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 # 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.
        # 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).
      "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",
          ],
        },
      ],
      "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.
      "version": 42, # Version of the `Policy`. The default version is 0.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 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).
    "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",
        ],
      },
    ],
    "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.
    "version": 42, # Version of the `Policy`. The default version is 0.
  }</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's system-managed private key.

Args:
  name: string, The resource name of the service account in the following format:
`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
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.
    Allowed values
      1 - v1 error format
      2 - v2 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="signJwt">signJwt(name, body, x__xgafv=None)</code>
  <pre>Signs a JWT using a service account's system-managed private key.

If no expiry time (`exp`) is provided in the `SignJwtRequest`, IAM sets an
an expiry time of one hour by default. If you request an expiry time of
more than one hour, the request will fail.

Args:
  name: string, The resource name of the service account in the following format:
`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
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 JWT request.
    "payload": "A String", # The JWT payload to sign, a JSON JWT Claim set.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The service account sign JWT response.
    "keyId": "A String", # The id of the key used to sign the JWT.
    "signedJwt": "A String", # The signed JWT.
  }</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 a ServiceAccount.

Args:
  resource: string, REQUIRED: The resource for which the policy detail is being requested.
See the operation documentation for the appropriate value for this field. (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](https://cloud.google.com/iam/docs/overview#permissions).
      "A String",
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 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 ServiceAccount.

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 following format:
`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.

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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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, 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
    # 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 following format:
      # `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
      # 
      # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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 The unique and stable id of the service account.
  "email": "A String", # @OutputOnly The email address of the service account.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
      # 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 following format:
        # `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.
        #
        # 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_ID}/serviceAccounts/{SERVICE_ACCOUNT_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 The unique and stable id of the service account.
    "email": "A String", # @OutputOnly The email address of the service account.
  }</pre>
</div>

</body></html>