<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_v1.html">Cloud Security Command Center API</a> . <a href="securitycenter_v1.organizations.html">organizations</a> . <a href="securitycenter_v1.organizations.assets.html">assets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#group">group(parent, body, 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, orderBy=None, pageSize=None, x__xgafv=None, compareDuration=None, pageToken=None, fieldMask=None, readTime=None, filter=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, 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, x__xgafv=None)</code>
  <pre>Filters an organization's assets and  groups them by their specified
properties.

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

{ # Request message for grouping by assets.
    "compareDuration": "A String", # When compare_duration is set, the GroupResult's "state_change" 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 change value is derived based on the presence of the asset at the
        # two points in time. Intermediate state changes between the two times don't
        # affect the result. For example, the results aren't affected if the asset is
        # removed and re-created again.
        # 
        # Possible "state_change" values when compare_duration is specified:
        # 
        # * "ADDED":   indicates that the asset was not present at the start of
        #                compare_duration, but present at reference_time.
        # * "REMOVED": indicates that the asset was present at the start of
        #                compare_duration, but not present at reference_time.
        # * "ACTIVE":  indicates that the asset was present at both the
        #                start and the end of the time period defined by
        #                compare_duration and reference_time.
        # 
        # If compare_duration is not specified, then the only possible state_change
        # is "UNUSED", which will be the state_change set for all assets present at
        # read_time.
        # 
        # If this field is set then `state_change` must be a specified field in
        # `group_by`.
    "pageSize": 42, # The maximum number of results to return in a single response. Default is
        # 10, minimum is 1, maximum is 1000.
    "filter": "A 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 supported, and `OR` has higher precedence than `AND`.
        # 
        # Restrictions have the form `<field> <operator> <value>` 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.
        # * `>`, `<`, `>=`, `<=` 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.
        # 
        # The following field and operator combinations are supported:
        # 
        # * name: `=`
        # * update_time: `>`, `<`, `>=`, `<=`, `=`
        # * create_time: `>`, `<`, `>=`, `<=`, `=`
        # * iam_policy.policy_blob: `=`, `:`
        # * resource_properties: `=`, `:`, `>`, `<`, `>=`, `<=`
        # * security_marks: `=`, `:`
        # * security_center_properties.resource_name: `=`, `:`
        # * security_center_properties.resource_type: `=`, `:`
        # * security_center_properties.resource_parent: `=`, `:`
        # * security_center_properties.resource_project: `=`, `:`
        # * security_center_properties.resource_owners: `=`, `:`
        # 
        # For example, `resource_properties.size = 100` is a valid filter string.
    "pageToken": "A String", # 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.
    "groupBy": "A String", # Expression that defines what assets fields to use for grouping. The string
        # value should follow SQL syntax: comma separated list of fields. For
        # example:
        # "security_center_properties.resource_project,security_center_properties.project".
        # 
        # 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
    "readTime": "A 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's version of
        # NOW.
  }

  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.
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no more
        # results.
    "totalSize": 42, # The total number of results matching the query.
    "groupByResults": [ # 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.
        "count": "A String", # Total count of resources for the given properties.
        "properties": { # Properties matching the groupBy fields in the request.
          "a_key": "",
        },
      },
    ],
    "readTime": "A String", # Time used for executing the groupBy request.
  }</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 '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="list">list(parent, orderBy=None, pageSize=None, x__xgafv=None, compareDuration=None, pageToken=None, fieldMask=None, readTime=None, filter=None)</code>
  <pre>Lists an organization's assets.

Args:
  parent: string, Name of the organization assets should belong to. Its format is
"organizations/[organization_id]". (required)
  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: "name,resource_properties.a_property". The default sorting order
is ascending. To specify descending order for a field, a suffix " desc"
should be appended to the field name. For example: "name
desc,resource_properties.a_property". Redundant space characters in the
syntax are insignificant. "name desc,resource_properties.a_property" and "
name     desc  ,   resource_properties.a_property  " are equivalent.

The following fields are supported:
name
update_time
resource_properties
security_marks
security_center_properties.resource_name
security_center_properties.resource_parent
security_center_properties.resource_project
security_center_properties.resource_type
  pageSize: integer, 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
  compareDuration: string, When compare_duration is set, the ListAssetsResult's "state_change"
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_change value is derived based on the presence of the asset at the
two points in time. Intermediate state changes between the two times don't
affect the result. For example, the results aren't affected if the asset is
removed and re-created again.

Possible "state_change" values when compare_duration is specified:

* "ADDED":   indicates that the asset was not present at the start of
               compare_duration, but present at read_time.
* "REMOVED": indicates that the asset was present at the start of
               compare_duration, but not present at read_time.
* "ACTIVE":  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_change
is "UNUSED",  which will be the state_change set for all assets present at
read_time.
  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.
  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.
  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's version of
NOW.
  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 supported, and `OR` has higher precedence than `AND`.

Restrictions have the form `<field> <operator> <value>` 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.
* `>`, `<`, `>=`, `<=` 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.

The following are the allowed field and operator combinations:

* name: `=`
* update_time: `>`, `<`, `>=`, `<=`
* iam_policy.policy_blob: `=`, `:`
* resource_properties: `=`, `:`, `>`, `<`, `>=`, `<=`
* security_marks: `=`, `:`
* security_center_properties.resource_name: `=`, `:`
* security_center_properties.resource_type: `=`, `:`
* security_center_properties.resource_parent: `=`, `:`
* security_center_properties.resource_project: `=`, `:`
* security_center_properties.resource_owners: `=`, `:`

For example, `resource_properties.size = 100` is a valid filter string.

Returns:
  An object of the form:

    { # Response message for listing assets.
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no more
        # results.
    "totalSize": 42, # The total number of assets matching the query.
    "listAssetsResults": [ # Assets matching the list request.
      { # Result containing the Asset and its State.
        "stateChange": "A String", # State change of the asset between the points in time.
        "asset": { # Cloud Security Command Center's (Cloud SCC) representation of a Google Cloud # Asset matching the search request.
            # Platform (GCP) resource.
            #
            # The Asset is a Cloud SCC resource that captures information about a single
            # GCP resource. All modifications to an Asset are only within the context of
            # Cloud SCC and don't affect the referenced GCP resource.
          "updateTime": "A String", # The time at which the asset was last updated, added, or deleted in Cloud
              # SCC.
          "name": "A String", # The relative resource name of this asset. See:
              # https://cloud.google.com/apis/design/resource_names#relative_resource_name
              # Example:
              # "organizations/123/assets/456".
          "securityCenterProperties": { # Cloud SCC managed properties. These properties are managed by Cloud SCC and # Cloud SCC managed properties. These properties are managed by
              # Cloud SCC and cannot be modified by the user.
              # cannot be modified by the user.
            "resourceType": "A String", # The type of the GCP resource. Examples include: APPLICATION,
                # PROJECT, and ORGANIZATION. This is a case insensitive field defined by
                # Cloud SCC and/or the producer of the resource and is immutable
                # after create time.
            "resourceName": "A String", # The full resource name of the GCP resource this asset
                # represents. This field is immutable after create time. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            "resourceParent": "A String", # The full resource name of the immediate parent of the resource. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            "resourceProject": "A String", # The full resource name of the project the resource belongs to. See:
                # https://cloud.google.com/apis/design/resource_names#full_resource_name
            "resourceOwners": [ # Owners of the Google Cloud resource.
              "A String",
            ],
          },
          "resourceProperties": { # Resource managed properties. These properties are managed and defined by
              # the GCP resource and cannot be modified by the user.
            "a_key": "",
          },
          "iamPolicy": { # IAM Policy information associated with the GCP resource described by the # IAM Policy information associated with the GCP resource described by the
              # Cloud SCC asset. This information is managed and defined by the GCP
              # resource and cannot be modified by the user.
              # Cloud SCC asset. This information is managed and defined by the GCP
              # resource and cannot be modified by the user.
            "policyBlob": "A String", # The JSON representation of the Policy associated with the asset.
                # See https://cloud.google.com/iam/reference/rest/v1/Policy for format
                # details.
          },
          "securityMarks": { # User specified security marks that are attached to the parent Cloud 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 (Cloud SCC) resource. Security marks are scoped within a Cloud
              # SCC organization -- they can be modified and viewed by all users who have
              # proper permissions on the organization.
            "name": "A String", # The relative resource name of the SecurityMarks. See:
                # https://cloud.google.com/apis/design/resource_names#relative_resource_name
                # Examples:
                # "organizations/123/assets/456/securityMarks"
                # "organizations/123/sources/456/findings/789/securityMarks".
            "marks": { # 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)
              "a_key": "A String",
            },
          },
          "createTime": "A String", # The time at which the asset was created in Cloud SCC.
        },
      },
    ],
    "readTime": "A String", # Time used for executing the list request.
  }</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="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, Name of the organization to run asset discovery for. Its format is
"organizations/[organization_id]". (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.
    "metadata": { # 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.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # 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).
      "message": "A String", # 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.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": 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.
    "response": { # 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`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # 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, 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:
"organizations/123/assets/456/securityMarks"
"organizations/123/sources/456/findings/789/securityMarks". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # User specified security marks that are attached to the parent Cloud Security
    # Command Center (Cloud SCC) resource. Security marks are scoped within a Cloud
    # SCC organization -- they can be modified and viewed by all users who have
    # proper permissions on the organization.
  "name": "A String", # The relative resource name of the SecurityMarks. See:
      # https://cloud.google.com/apis/design/resource_names#relative_resource_name
      # Examples:
      # "organizations/123/assets/456/securityMarks"
      # "organizations/123/sources/456/findings/789/securityMarks".
  "marks": { # 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)
    "a_key": "A String",
  },
}

  startTime: string, The time at which the updated SecurityMarks take effect.
If not set uses current server time.  Updates will be applied to the
SecurityMarks that are active immediately preceding this time.
  updateMask: string, The FieldMask to use when updating the security marks resource.

The field mask must not contain duplicate fields.
If empty or set to "marks", all marks will be replaced.  Individual
marks can be updated using "marks.<mark_key>".
  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 Cloud Security
      # Command Center (Cloud SCC) resource. Security marks are scoped within a Cloud
      # SCC organization -- they can be modified and viewed by all users who have
      # proper permissions on the organization.
    "name": "A String", # The relative resource name of the SecurityMarks. See:
        # https://cloud.google.com/apis/design/resource_names#relative_resource_name
        # Examples:
        # "organizations/123/assets/456/securityMarks"
        # "organizations/123/sources/456/findings/789/securityMarks".
    "marks": { # 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)
      "a_key": "A String",
    },
  }</pre>
</div>

</body></html>