<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="securitycenter_v1beta1.html">Security Command Center API</a> . <a href="securitycenter_v1beta1.organizations.html">organizations</a> . <a href="securitycenter_v1beta1.organizations.assets.html">assets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#group">group(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Filters an organization's assets and  groups them by their specified</p>
<p class="toc_element">
  <code><a href="#group_next">group_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="#list">list(parent, pageToken=None, pageSize=None, filter=None, fieldMask=None, compareDuration=None, readTime=None, orderBy=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists an organization's assets.</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="#runDiscovery">runDiscovery(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Runs asset discovery. The discovery is tracked with a long-running</p>
<p class="toc_element">
  <code><a href="#updateSecurityMarks">updateSecurityMarks(name, body=None, startTime=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates security marks.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="group">group(parent, body=None, x__xgafv=None)</code>
  <pre>Filters an organization&#x27;s assets and  groups them by their specified
properties.

Args:
  parent: string, Required. Name of the organization to groupBy. Its format is
&quot;organizations/[organization_id]&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for grouping by assets.
    &quot;groupBy&quot;: &quot;A String&quot;, # Required. Expression that defines what assets fields to use for grouping. The string
        # value should follow SQL syntax: comma separated list of fields. For
        # example:
        # &quot;security_center_properties.resource_project,security_center_properties.project&quot;.
        # 
        # The following fields are supported when compare_duration is not set:
        # 
        # * security_center_properties.resource_project
        # * security_center_properties.resource_type
        # * security_center_properties.resource_parent
        # 
        # The following fields are supported when compare_duration is set:
        # 
        # * security_center_properties.resource_type
    &quot;pageToken&quot;: &quot;A String&quot;, # The value returned by the last `GroupAssetsResponse`; indicates
        # that this is a continuation of a prior `GroupAssets` call, and that the
        # system should return the next page of data.
    &quot;compareDuration&quot;: &quot;A String&quot;, # When compare_duration is set, the Asset&#x27;s &quot;state&quot; property is updated to
        # indicate whether the asset was added, removed, or remained present during
        # the compare_duration period of time that precedes the read_time. This is
        # the time between (read_time - compare_duration) and read_time.
        # 
        # The state value is derived based on the presence of the asset at the two
        # points in time. Intermediate state changes between the two times don&#x27;t
        # affect the result. For example, the results aren&#x27;t affected if the asset is
        # removed and re-created again.
        # 
        # Possible &quot;state&quot; values when compare_duration is specified:
        # 
        # * &quot;ADDED&quot;: indicates that the asset was not present before
        #              compare_duration, but present at reference_time.
        # * &quot;REMOVED&quot;: indicates that the asset was present at the start of
        #              compare_duration, but not present at reference_time.
        # * &quot;ACTIVE&quot;: indicates that the asset was present at both the
        #              start and the end of the time period defined by
        #              compare_duration and reference_time.
        # 
        # This field is ignored if `state` is not a field in `group_by`.
    &quot;filter&quot;: &quot;A String&quot;, # Expression that defines the filter to apply across assets.
        # The expression is a list of zero or more restrictions combined via logical
        # operators `AND` and `OR`.
        # Parentheses are not supported, and `OR` has higher precedence than `AND`.
        # 
        # Restrictions have the form `&lt;field&gt; &lt;operator&gt; &lt;value&gt;` and may have a `-`
        # character in front of them to indicate negation. The fields map to those
        # defined in the Asset resource. Examples include:
        # 
        # * name
        # * security_center_properties.resource_name
        # * resource_properties.a_property
        # * security_marks.marks.marka
        # 
        # The supported operators are:
        # 
        # * `=` for all value types.
        # * `&gt;`, `&lt;`, `&gt;=`, `&lt;=` for integer values.
        # * `:`, meaning substring matching, for strings.
        # 
        # The supported value types are:
        # 
        # * string literals in quotes.
        # * integer literals without quotes.
        # * boolean literals `true` and `false` without quotes.
        # 
        # For example, `resource_properties.size = 100` is a valid filter string.
    &quot;readTime&quot;: &quot;A String&quot;, # Time used as a reference point when filtering assets. The filter is limited
        # to assets existing at the supplied time and their values are those at that
        # specific time. Absence of this field will default to the API&#x27;s version of
        # NOW.
    &quot;pageSize&quot;: 42, # The maximum number of results to return in a single response. Default is
        # 10, minimum is 1, maximum is 1000.
  }

  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 grouping by assets.
    &quot;readTime&quot;: &quot;A String&quot;, # Time used for executing the groupBy request.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more
        # results.
    &quot;groupByResults&quot;: [ # Group results. There exists an element for each existing unique
        # combination of property/values. The element contains a count for the number
        # of times those specific property/values appear.
      { # Result containing the properties and count of a groupBy request.
        &quot;count&quot;: &quot;A String&quot;, # Total count of resources for the given properties.
        &quot;properties&quot;: { # Properties matching the groupBy fields in the request.
          &quot;a_key&quot;: &quot;&quot;,
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="group_next">group_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 &#x27;execute()&#x27; 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="list">list(parent, pageToken=None, pageSize=None, filter=None, fieldMask=None, compareDuration=None, readTime=None, orderBy=None, x__xgafv=None)</code>
  <pre>Lists an organization&#x27;s assets.

Args:
  parent: string, Required. Name of the organization assets should belong to. Its format is
&quot;organizations/[organization_id]&quot;. (required)
  pageToken: string, The value returned by the last `ListAssetsResponse`; indicates
that this is a continuation of a prior `ListAssets` call, and
that the system should return the next page of data.
  pageSize: integer, The maximum number of results to return in a single response. Default is
10, minimum is 1, maximum is 1000.
  filter: string, Expression that defines the filter to apply across assets.
The expression is a list of zero or more restrictions combined via logical
operators `AND` and `OR`.
Parentheses are not supported, and `OR` has higher precedence than `AND`.

Restrictions have the form `&lt;field&gt; &lt;operator&gt; &lt;value&gt;` and may have a `-`
character in front of them to indicate negation. The fields map to those
defined in the Asset resource. Examples include:

* name
* security_center_properties.resource_name
* resource_properties.a_property
* security_marks.marks.marka

The supported operators are:

* `=` for all value types.
* `&gt;`, `&lt;`, `&gt;=`, `&lt;=` for integer values.
* `:`, meaning substring matching, for strings.

The supported value types are:

* string literals in quotes.
* integer literals without quotes.
* boolean literals `true` and `false` without quotes.

For example, `resource_properties.size = 100` is a valid filter string.
  fieldMask: string, Optional. A field mask to specify the ListAssetsResult fields to be listed in the
response.
An empty field mask will list all fields.
  compareDuration: string, When compare_duration is set, the ListAssetResult&#x27;s &quot;state&quot; attribute is
updated to indicate whether the asset was added, removed, or remained
present during the compare_duration period of time that precedes the
read_time. This is the time between (read_time -
compare_duration) and read_time.

The state value is derived based on the presence of the asset at the two
points in time. Intermediate state changes between the two times don&#x27;t
affect the result. For example, the results aren&#x27;t affected if the asset is
removed and re-created again.

Possible &quot;state&quot; values when compare_duration is specified:

* &quot;ADDED&quot;: indicates that the asset was not present before
             compare_duration, but present at read_time.
* &quot;REMOVED&quot;: indicates that the asset was present at the start of
             compare_duration, but not present at read_time.
* &quot;ACTIVE&quot;: indicates that the asset was present at both the
             start and the end of the time period defined by
             compare_duration and read_time.

If compare_duration is not specified, then the only possible state is
&quot;UNUSED&quot;, which indicates that the asset is present at read_time.
  readTime: string, Time used as a reference point when filtering assets. The filter is limited
to assets existing at the supplied time and their values are those at that
specific time. Absence of this field will default to the API&#x27;s version of
NOW.
  orderBy: string, Expression that defines what fields and order to use for sorting. The
string value should follow SQL syntax: comma separated list of fields. For
example: &quot;name,resource_properties.a_property&quot;. The default sorting order
is ascending. To specify descending order for a field, a suffix &quot; desc&quot;
should be appended to the field name. For example: &quot;name
desc,resource_properties.a_property&quot;. Redundant space characters in the
syntax are insignificant. &quot;name desc,resource_properties.a_property&quot; and &quot;
name     desc  ,   resource_properties.a_property  &quot; are equivalent.
  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 listing assets.
    &quot;listAssetsResults&quot;: [ # Assets matching the list request.
      { # Result containing the Asset and its State.
        &quot;asset&quot;: { # Security Command Center representation of a Google Cloud # Asset matching the search request.
            # resource.
            #
            # The Asset is a Security Command Center resource that captures information
            # about a single Google Cloud resource. All modifications to an Asset are only
            # within the context of Security Command Center and don&#x27;t affect the referenced
            # Google Cloud resource.
          &quot;updateTime&quot;: &quot;A String&quot;, # The time at which the asset was last updated, added, or deleted in Security
              # Command Center.
          &quot;resourceProperties&quot;: { # Resource managed properties. These properties are managed and defined by
              # the Google Cloud resource and cannot be modified by the user.
            &quot;a_key&quot;: &quot;&quot;,
          },
          &quot;securityMarks&quot;: { # User specified security marks that are attached to the parent Security # User specified security marks. These marks are entirely managed by the user
              # and come from the SecurityMarks resource that belongs to the asset.
                # Command Center resource. Security marks are scoped within a Security Command
                # Center organization -- they can be modified and viewed by all users who have
                # proper permissions on the organization.
              &quot;marks&quot;: { # Mutable user specified security marks belonging to the parent resource.
                  # Constraints are as follows:
                  #
                  #   * Keys and values are treated as case insensitive
                  #   * Keys must be between 1 - 256 characters (inclusive)
                  #   * Keys must be letters, numbers, underscores, or dashes
                  #   * Values have leading and trailing whitespace trimmed, remaining
                  #     characters must be between 1 - 4096 characters (inclusive)
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;name&quot;: &quot;A String&quot;, # The relative resource name of the SecurityMarks. See:
                  # https://cloud.google.com/apis/design/resource_names#relative_resource_name
                  # Examples:
                  # &quot;organizations/{organization_id}/assets/{asset_id}/securityMarks&quot;
                  # &quot;organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks&quot;.
            },
          &quot;securityCenterProperties&quot;: { # Security Command Center managed properties. These properties are managed by # Security Command Center managed properties. These properties are managed by
              # Security Command Center and cannot be modified by the user.
              # Security Command Center and cannot be modified by the user.
            &quot;resourceName&quot;: &quot;A String&quot;, # Immutable. The full resource name of the Google Cloud resource this asset
                # represents. This field is immutable after create time. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            &quot;resourceProject&quot;: &quot;A String&quot;, # The full resource name of the project the resource belongs to. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            &quot;resourceOwners&quot;: [ # Owners of the Google Cloud resource.
              &quot;A String&quot;,
            ],
            &quot;resourceType&quot;: &quot;A String&quot;, # The type of the Google Cloud resource. Examples include: APPLICATION,
                # PROJECT, and ORGANIZATION. This is a case insensitive field defined by
                # Security Command Center and/or the producer of the resource and is
                # immutable after create time.
            &quot;resourceParent&quot;: &quot;A String&quot;, # The full resource name of the immediate parent of the resource. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
          },
          &quot;name&quot;: &quot;A String&quot;, # The relative resource name of this asset. See:
              # https://cloud.google.com/apis/design/resource_names#relative_resource_name
              # Example:
              # &quot;organizations/{organization_id}/assets/{asset_id}&quot;.
          &quot;createTime&quot;: &quot;A String&quot;, # The time at which the asset was created in Security Command Center.
        },
        &quot;state&quot;: &quot;A String&quot;, # State of the asset.
      },
    ],
    &quot;totalSize&quot;: 42, # The total number of assets matching the query.
    &quot;readTime&quot;: &quot;A String&quot;, # Time used for executing the list request.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more
        # results.
  }</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 &#x27;execute()&#x27; 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="runDiscovery">runDiscovery(parent, body=None, x__xgafv=None)</code>
  <pre>Runs asset discovery. The discovery is tracked with a long-running
operation.

This API can only be called with limited frequency for an organization. If
it is called too frequently the caller will receive a TOO_MANY_REQUESTS
error.

Args:
  parent: string, Required. Name of the organization to run asset discovery for. Its format is
&quot;organizations/[organization_id]&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for running asset discovery for an organization.
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;response&quot;: { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateSecurityMarks">updateSecurityMarks(name, body=None, startTime=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates security marks.

Args:
  name: string, The relative resource name of the SecurityMarks. See:
https://cloud.google.com/apis/design/resource_names#relative_resource_name
Examples:
&quot;organizations/{organization_id}/assets/{asset_id}/securityMarks&quot;
&quot;organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # User specified security marks that are attached to the parent Security
      # Command Center resource. Security marks are scoped within a Security Command
      # Center organization -- they can be modified and viewed by all users who have
      # proper permissions on the organization.
    &quot;marks&quot;: { # Mutable user specified security marks belonging to the parent resource.
        # Constraints are as follows:
        # 
        #   * Keys and values are treated as case insensitive
        #   * Keys must be between 1 - 256 characters (inclusive)
        #   * Keys must be letters, numbers, underscores, or dashes
        #   * Values have leading and trailing whitespace trimmed, remaining
        #     characters must be between 1 - 4096 characters (inclusive)
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;name&quot;: &quot;A String&quot;, # The relative resource name of the SecurityMarks. See:
        # https://cloud.google.com/apis/design/resource_names#relative_resource_name
        # Examples:
        # &quot;organizations/{organization_id}/assets/{asset_id}/securityMarks&quot;
        # &quot;organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks&quot;.
  }

  startTime: string, The time at which the updated SecurityMarks take effect.
  updateMask: string, The FieldMask to use when updating the security marks resource.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # User specified security marks that are attached to the parent Security
        # Command Center resource. Security marks are scoped within a Security Command
        # Center organization -- they can be modified and viewed by all users who have
        # proper permissions on the organization.
      &quot;marks&quot;: { # Mutable user specified security marks belonging to the parent resource.
          # Constraints are as follows:
          #
          #   * Keys and values are treated as case insensitive
          #   * Keys must be between 1 - 256 characters (inclusive)
          #   * Keys must be letters, numbers, underscores, or dashes
          #   * Values have leading and trailing whitespace trimmed, remaining
          #     characters must be between 1 - 4096 characters (inclusive)
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # The relative resource name of the SecurityMarks. See:
          # https://cloud.google.com/apis/design/resource_names#relative_resource_name
          # Examples:
          # &quot;organizations/{organization_id}/assets/{asset_id}/securityMarks&quot;
          # &quot;organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks&quot;.
    }</pre>
</div>

</body></html>