<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">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=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, Usage=None, Usage=None, fieldMask=None, orderBy=None, compareDuration=None, readTime=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;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;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.
    &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_project_display_name
        # * security_center_properties.resource_type
        # * security_center_properties.resource_parent
        # * security_center_properties.resource_parent_display_name
        # 
        # The following fields are supported when compare_duration is set:
        # 
        # * security_center_properties.resource_type
        # * security_center_properties.resource_project_display_name
        # * security_center_properties.resource_parent_display_name
    &quot;compareDuration&quot;: &quot;A String&quot;, # When compare_duration is set, the GroupResult&#x27;s &quot;state_change&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 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&#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_change&quot; values when compare_duration is specified:
        # 
        # * &quot;ADDED&quot;:   indicates that the asset was not present at the start of
        #                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.
        # 
        # If compare_duration is not specified, then the only possible state_change
        # is &quot;UNUSED&quot;, 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`.
    &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 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.
        # 
        # The following field and operator combinations are supported:
        # 
        # * name: `=`
        # * update_time: `=`, `&gt;`, `&lt;`, `&gt;=`, `&lt;=`
        # 
        #   Usage: This should be milliseconds since epoch or an RFC3339 string.
        #   Examples:
        #     `update_time = &quot;2019-06-10T16:07:18-07:00&quot;`
        #     `update_time = 1560208038000`
        # 
        # * create_time: `=`, `&gt;`, `&lt;`, `&gt;=`, `&lt;=`
        # 
        #   Usage: This should be milliseconds since epoch or an RFC3339 string.
        #   Examples:
        #     `create_time = &quot;2019-06-10T16:07:18-07:00&quot;`
        #     `create_time = 1560208038000`
        # 
        # * iam_policy.policy_blob: `=`, `:`
        # * resource_properties: `=`, `:`, `&gt;`, `&lt;`, `&gt;=`, `&lt;=`
        # * security_marks.marks: `=`, `:`
        # * security_center_properties.resource_name: `=`, `:`
        # * security_center_properties.resource_display_name: `=`, `:`
        # * security_center_properties.resource_type: `=`, `:`
        # * security_center_properties.resource_parent: `=`, `:`
        # * security_center_properties.resource_parent_display_name: `=`, `:`
        # * security_center_properties.resource_project: `=`, `:`
        # * security_center_properties.resource_project_display_name: `=`, `:`
        # * security_center_properties.resource_owners: `=`, `:`
        # 
        # For example, `resource_properties.size = 100` is a valid filter string.
        # 
        # Use a partial match on the empty string to filter based on a property
        # existing: `resource_properties.my_property : &quot;&quot;`
        # 
        # Use a negated partial match on the empty string to filter based on a
        # property not existing: `-resource_properties.my_property : &quot;&quot;`
  }

  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;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;,
        },
      },
    ],
    &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;totalSize&quot;: 42, # The total number of results matching the query.
  }</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, Usage=None, Usage=None, fieldMask=None, orderBy=None, compareDuration=None, readTime=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 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.

The following are the allowed field and operator combinations:

* name: `=`
* update_time: `=`, `&gt;`, `&lt;`, `&gt;=`, `&lt;=`

  Usage: This should be milliseconds since epoch or an RFC3339 string.
  Examples:
    `update_time = &quot;2019-06-10T16:07:18-07:00&quot;`
    `update_time = 1560208038000`

* create_time: `=`, `&gt;`, `&lt;`, `&gt;=`, `&lt;=`

  Usage: This should be milliseconds since epoch or an RFC3339 string.
  Examples:
    `create_time = &quot;2019-06-10T16:07:18-07:00&quot;`
    `create_time = 1560208038000`

* iam_policy.policy_blob: `=`, `:`
* resource_properties: `=`, `:`, `&gt;`, `&lt;`, `&gt;=`, `&lt;=`
* security_marks.marks: `=`, `:`
* security_center_properties.resource_name: `=`, `:`
* security_center_properties.resource_display_name: `=`, `:`
* security_center_properties.resource_type: `=`, `:`
* security_center_properties.resource_parent: `=`, `:`
* security_center_properties.resource_parent_display_name: `=`, `:`
* security_center_properties.resource_project: `=`, `:`
* security_center_properties.resource_project_display_name: `=`, `:`
* security_center_properties.resource_owners: `=`, `:`

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

Use a partial match on the empty string to filter based on a property
existing: `resource_properties.my_property : &quot;&quot;`

Use a negated partial match on the empty string to filter based on a
property not existing: `-resource_properties.my_property : &quot;&quot;`
  fieldMask: string, A field mask to specify the ListAssetsResult fields to be listed in the
response.
An empty field mask will list all fields.
  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.

The following fields are supported:
name
update_time
resource_properties
security_marks.marks
security_center_properties.resource_name
security_center_properties.resource_display_name
security_center_properties.resource_parent
security_center_properties.resource_parent_display_name
security_center_properties.resource_project
security_center_properties.resource_project_display_name
security_center_properties.resource_type
  compareDuration: string, When compare_duration is set, the ListAssetsResult&#x27;s &quot;state_change&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_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&#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_change&quot; values when compare_duration is specified:

* &quot;ADDED&quot;:   indicates that the asset was not present at the start of
               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_change
is &quot;UNUSED&quot;,  which will be the state_change set for all assets 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.
  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;readTime&quot;: &quot;A String&quot;, # Time used for executing the list request.
    &quot;listAssetsResults&quot;: [ # Assets matching the list request.
      { # Result containing the Asset and its State.
        &quot;stateChange&quot;: &quot;A String&quot;, # State change of the asset between the points in time.
        &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;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;iamPolicy&quot;: { # Cloud IAM Policy information associated with the Google Cloud resource # Cloud IAM Policy information associated with the Google Cloud resource
              # described by the Security Command Center asset. This information is managed
              # and defined by the Google Cloud resource and cannot be modified by the
              # user.
              # described by the Security Command Center asset. This information is managed
              # and defined by the Google Cloud resource and cannot be modified by the
              # user.
            &quot;policyBlob&quot;: &quot;A String&quot;, # The JSON representation of the Policy associated with the asset.
                # See https://cloud.google.com/iam/reference/rest/v1/Policy for format
                # details.
          },
          &quot;createTime&quot;: &quot;A String&quot;, # The time at which the asset was created in Security Command Center.
          &quot;updateTime&quot;: &quot;A String&quot;, # The time at which the asset was last updated, added, or deleted in Security
              # Command Center.
          &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;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;resourceProjectDisplayName&quot;: &quot;A String&quot;, # The user defined display name for the project of this resource.
            &quot;resourceDisplayName&quot;: &quot;A String&quot;, # The user defined display name for this resource.
            &quot;resourceParentDisplayName&quot;: &quot;A String&quot;, # The user defined display name for the parent of this resource.
            &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;resourceOwners&quot;: [ # Owners of the Google Cloud resource.
              &quot;A String&quot;,
            ],
            &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;resourceName&quot;: &quot;A String&quot;, # 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;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;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;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 this asset. See:
              # https://cloud.google.com/apis/design/resource_names#relative_resource_name
              # Example:
              # &quot;organizations/{organization_id}/assets/{asset_id}&quot;.
        },
      },
    ],
    &quot;totalSize&quot;: 42, # The total number of assets matching the query.
    &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;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;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;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;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}`.
    &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;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.
    },
  }</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;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;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;,
    },
  }

  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 &quot;marks&quot;, all marks will be replaced.  Individual
marks can be updated using &quot;marks.&lt;mark_key&gt;&quot;.
  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;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;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;,
      },
    }</pre>
</div>

</body></html>