google-apis-cloudasset_v1 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 23482ced6692a4dcfc43fccb3107a424d76c4c8721404ac7f5797d0b4a21963e
4
+ data.tar.gz: fa44315861000f47e36b8f2d1053d8ed3590340e7b3bdb6c0ac27fdb3e890012
5
+ SHA512:
6
+ metadata.gz: 512f505d01c6f126f87f358181ae9f28d196684193e44f08815bb8b314bee77b16fbb5ff2eca2b4333bc109b8e1c090c4c8f541fbcd01a2ba244dc559d5c1b13
7
+ data.tar.gz: 06145aaaa3933e46ab4099c345e1115243f65e89a657703b13414e93021ab467e3c251aeaa72822638950f39262e36dedc9010d91854359aaeb05c960692d4dd
@@ -0,0 +1,13 @@
1
+ --hide-void-return
2
+ --no-private
3
+ --verbose
4
+ --title=google-apis-cloudasset_v1
5
+ --markup-provider=redcarpet
6
+ --markup=markdown
7
+ --main OVERVIEW.md
8
+ lib/google/apis/cloudasset_v1/*.rb
9
+ lib/google/apis/cloudasset_v1.rb
10
+ -
11
+ OVERVIEW.md
12
+ CHANGELOG.md
13
+ LICENSE.md
@@ -0,0 +1,7 @@
1
+ # Release history for google-apis-cloudasset_v1
2
+
3
+ ### v0.1.0 (2021-01-07)
4
+
5
+ * Regenerated from discovery document revision 20210101
6
+ * Regenerated using generator version 0.1.1
7
+
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
@@ -0,0 +1,96 @@
1
+ # Simple REST client for version V1 of the Cloud Asset API
2
+
3
+ This is a simple client library for version V1 of the Cloud Asset API. It provides:
4
+
5
+ * A client object that connects to the HTTP/JSON REST endpoint for the service.
6
+ * Ruby objects for data structures related to the service.
7
+ * Integration with the googleauth gem for authentication using OAuth, API keys, and service accounts.
8
+ * Control of retry, pagination, and timeouts.
9
+
10
+ Note that although this client library is supported and will continue to be updated to track changes to the service, it is otherwise considered complete and not under active development. Many Google services, especially Google Cloud Platform services, may provide a more modern client that is under more active development and improvement. See the section below titled *Which client should I use?* for more information.
11
+
12
+ ## Getting started
13
+
14
+ ### Before you begin
15
+
16
+ There are a few setup steps you need to complete before you can use this library:
17
+
18
+ 1. If you don't already have a Google account, [sign up](https://www.google.com/accounts).
19
+ 2. If you have never created a Google APIs Console project, read about [Managing Projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) and create a project in the [Google API Console](https://console.cloud.google.com/).
20
+ 3. Most APIs need to be enabled for your project. [Enable it](https://console.cloud.google.com/apis/library/cloudasset.googleapis.com) in the console.
21
+
22
+ ### Installation
23
+
24
+ Add this line to your application's Gemfile:
25
+
26
+ ```ruby
27
+ gem 'google-apis-cloudasset_v1', '~> 0.1'
28
+ ```
29
+
30
+ And then execute:
31
+
32
+ ```
33
+ $ bundle
34
+ ```
35
+
36
+ Or install it yourself as:
37
+
38
+ ```
39
+ $ gem install google-apis-cloudasset_v1
40
+ ```
41
+
42
+ ### Creating a client object
43
+
44
+ Once the gem is installed, you can load the client code and instantiate a client.
45
+
46
+ ```ruby
47
+ # Load the client
48
+ require "google/apis/cloudasset_v1"
49
+
50
+ # Create a client object
51
+ client = Google::Apis::CloudassetV1::CloudAssetService.new
52
+
53
+ # Authenticate calls
54
+ client.authentication = # ... use the googleauth gem to create credentials
55
+ ```
56
+
57
+ See the class reference docs for information on the methods you can call from a client.
58
+
59
+ ## Documentation
60
+
61
+ More detailed descriptions of the Google simple REST clients are available in two documents.
62
+
63
+ * The [Usage Guide](https://github.com/googleapis/google-api-ruby-client/blob/master/docs/usage-guide.md) discusses how to make API calls, how to use the provided data structures, and how to work the various features of the client library, including media upload and download, error handling, retries, pagination, and logging.
64
+ * The [Auth Guide](https://github.com/googleapis/google-api-ruby-client/blob/master/docs/auth-guide.md) discusses authentication in the client libraries, including API keys, OAuth 2.0, service accounts, and environment variables.
65
+
66
+ (Note: the above documents are written for the simple REST clients in general, and their examples may not reflect the Cloudasset service in particular.)
67
+
68
+ For reference information on specific calls in the Cloud Asset API, see the {Google::Apis::CloudassetV1::CloudAssetService class reference docs}.
69
+
70
+ ## Which client should I use?
71
+
72
+ Google provides two types of Ruby API client libraries: **simple REST clients** and **modern clients**.
73
+
74
+ This library, `google-apis-cloudasset_v1`, is a simple REST client. You can identify these clients by their gem names, which are always in the form `google-apis-<servicename>_<serviceversion>`. The simple REST clients connect to HTTP/JSON REST endpoints and are automatically generated from service discovery documents. They support most API functionality, but their class interfaces are sometimes awkward.
75
+
76
+ Modern clients are produced by a modern code generator, sometimes combined with hand-crafted functionality. Most modern clients connect to high-performance gRPC endpoints, although a few are backed by REST services. Modern clients are available for many Google services, especially Google Cloud Platform services, but do not yet support all the services covered by the simple clients.
77
+
78
+ Gem names for modern clients are often of the form `google-cloud-<service_name>`. (For example, [google-cloud-pubsub](https://rubygems.org/gems/google-cloud-pubsub).) Note that most modern clients also have corresponding "versioned" gems with names like `google-cloud-<service_name>-<version>`. (For example, [google-cloud-pubsub-v1](https://rubygems.org/gems/google-cloud-pubsub-v1).) The "versioned" gems can be used directly, but often provide lower-level interfaces. In most cases, the main gem is recommended.
79
+
80
+ **For most users, we recommend the modern client, if one is available.** Compared with simple clients, modern clients are generally much easier to use and more Ruby-like, support more advanced features such as streaming and long-running operations, and often provide much better performance. You may consider using a simple client instead, if a modern client is not yet available for the service you want to use, or if you are not able to use gRPC on your infrastructure.
81
+
82
+ The [product documentation](https://cloud.google.com/asset-inventory/docs/quickstart) may provide guidance regarding the preferred client library to use.
83
+
84
+ ## Supported Ruby versions
85
+
86
+ This library is supported on Ruby 2.5+.
87
+
88
+ Google provides official support for Ruby versions that are actively supported by Ruby Core -- that is, Ruby versions that are either in normal maintenance or in security maintenance, and not end of life. Currently, this means Ruby 2.5 and later. Older versions of Ruby _may_ still work, but are unsupported and not recommended. See https://www.ruby-lang.org/en/downloads/branches/ for details about the Ruby support schedule.
89
+
90
+ ## License
91
+
92
+ This library is licensed under Apache 2.0. Full license text is available in the {file:LICENSE.md LICENSE}.
93
+
94
+ ## Support
95
+
96
+ Please [report bugs at the project on Github](https://github.com/google/google-api-ruby-client/issues). Don't hesitate to [ask questions](http://stackoverflow.com/questions/tagged/google-api-ruby-client) about the client or APIs on [StackOverflow](http://stackoverflow.com).
@@ -0,0 +1,15 @@
1
+ # Copyright 2020 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require "google/apis/cloudasset_v1"
@@ -0,0 +1,36 @@
1
+ # Copyright 2020 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/cloudasset_v1/service.rb'
16
+ require 'google/apis/cloudasset_v1/classes.rb'
17
+ require 'google/apis/cloudasset_v1/representations.rb'
18
+ require 'google/apis/cloudasset_v1/gem_version.rb'
19
+
20
+ module Google
21
+ module Apis
22
+ # Cloud Asset API
23
+ #
24
+ # The cloud asset API manages the history and inventory of cloud resources.
25
+ #
26
+ # @see https://cloud.google.com/asset-inventory/docs/quickstart
27
+ module CloudassetV1
28
+ # Version of the Cloud Asset API this client connects to.
29
+ # This is NOT the gem version.
30
+ VERSION = 'V1'
31
+
32
+ # View and manage your data across Google Cloud Platform services
33
+ AUTH_CLOUD_PLATFORM = 'https://www.googleapis.com/auth/cloud-platform'
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,3635 @@
1
+ # Copyright 2020 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'date'
16
+ require 'google/apis/core/base_service'
17
+ require 'google/apis/core/json_representation'
18
+ require 'google/apis/core/hashable'
19
+ require 'google/apis/errors'
20
+
21
+ module Google
22
+ module Apis
23
+ module CloudassetV1
24
+
25
+ # Specifies roles and/or permissions to analyze, to determine both the
26
+ # identities possessing them and the resources they control. If multiple values
27
+ # are specified, results will include roles or permissions matching any of them.
28
+ # The total number of roles and permissions should be equal or less than 10.
29
+ class AccessSelector
30
+ include Google::Apis::Core::Hashable
31
+
32
+ # Optional. The permissions to appear in result.
33
+ # Corresponds to the JSON property `permissions`
34
+ # @return [Array<String>]
35
+ attr_accessor :permissions
36
+
37
+ # Optional. The roles to appear in result.
38
+ # Corresponds to the JSON property `roles`
39
+ # @return [Array<String>]
40
+ attr_accessor :roles
41
+
42
+ def initialize(**args)
43
+ update!(**args)
44
+ end
45
+
46
+ # Update properties of this object
47
+ def update!(**args)
48
+ @permissions = args[:permissions] if args.key?(:permissions)
49
+ @roles = args[:roles] if args.key?(:roles)
50
+ end
51
+ end
52
+
53
+ # A request message for AssetService.AnalyzeIamPolicyLongrunning.
54
+ class AnalyzeIamPolicyLongrunningRequest
55
+ include Google::Apis::Core::Hashable
56
+
57
+ # ## LINT.IfChange Keep in sync with ## logs/proto/cloud_asset_inventory/
58
+ # iam_policy_analyzer_log.proto IAM policy analysis query message.
59
+ # Corresponds to the JSON property `analysisQuery`
60
+ # @return [Google::Apis::CloudassetV1::IamPolicyAnalysisQuery]
61
+ attr_accessor :analysis_query
62
+
63
+ # Output configuration for export IAM policy analysis destination.
64
+ # Corresponds to the JSON property `outputConfig`
65
+ # @return [Google::Apis::CloudassetV1::IamPolicyAnalysisOutputConfig]
66
+ attr_accessor :output_config
67
+
68
+ def initialize(**args)
69
+ update!(**args)
70
+ end
71
+
72
+ # Update properties of this object
73
+ def update!(**args)
74
+ @analysis_query = args[:analysis_query] if args.key?(:analysis_query)
75
+ @output_config = args[:output_config] if args.key?(:output_config)
76
+ end
77
+ end
78
+
79
+ # A response message for AssetService.AnalyzeIamPolicy.
80
+ class AnalyzeIamPolicyResponse
81
+ include Google::Apis::Core::Hashable
82
+
83
+ # Represents whether all entries in the main_analysis and
84
+ # service_account_impersonation_analysis have been fully explored to answer the
85
+ # query in the request.
86
+ # Corresponds to the JSON property `fullyExplored`
87
+ # @return [Boolean]
88
+ attr_accessor :fully_explored
89
+ alias_method :fully_explored?, :fully_explored
90
+
91
+ # An analysis message to group the query and results.
92
+ # Corresponds to the JSON property `mainAnalysis`
93
+ # @return [Google::Apis::CloudassetV1::IamPolicyAnalysis]
94
+ attr_accessor :main_analysis
95
+
96
+ # The service account impersonation analysis if AnalyzeIamPolicyRequest.
97
+ # analyze_service_account_impersonation is enabled.
98
+ # Corresponds to the JSON property `serviceAccountImpersonationAnalysis`
99
+ # @return [Array<Google::Apis::CloudassetV1::IamPolicyAnalysis>]
100
+ attr_accessor :service_account_impersonation_analysis
101
+
102
+ def initialize(**args)
103
+ update!(**args)
104
+ end
105
+
106
+ # Update properties of this object
107
+ def update!(**args)
108
+ @fully_explored = args[:fully_explored] if args.key?(:fully_explored)
109
+ @main_analysis = args[:main_analysis] if args.key?(:main_analysis)
110
+ @service_account_impersonation_analysis = args[:service_account_impersonation_analysis] if args.key?(:service_account_impersonation_analysis)
111
+ end
112
+ end
113
+
114
+ # An asset in Google Cloud. An asset can be any resource in the Google Cloud [
115
+ # resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-
116
+ # platform-resource-hierarchy), a resource outside the Google Cloud resource
117
+ # hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy
118
+ # (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/
119
+ # asset-inventory/docs/supported-asset-types) for more information.
120
+ class Asset
121
+ include Google::Apis::Core::Hashable
122
+
123
+ # An `AccessLevel` is a label that can be applied to requests to Google Cloud
124
+ # services, along with a list of requirements necessary for the label to be
125
+ # applied.
126
+ # Corresponds to the JSON property `accessLevel`
127
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1AccessLevel]
128
+ attr_accessor :access_level
129
+
130
+ # `AccessPolicy` is a container for `AccessLevels` (which define the necessary
131
+ # attributes to use Google Cloud services) and `ServicePerimeters` (which define
132
+ # regions of services able to freely pass data within a perimeter). An access
133
+ # policy is globally visible within an organization, and the restrictions it
134
+ # specifies apply to all projects within an organization.
135
+ # Corresponds to the JSON property `accessPolicy`
136
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1AccessPolicy]
137
+ attr_accessor :access_policy
138
+
139
+ # The ancestry path of an asset in Google Cloud [resource hierarchy](https://
140
+ # cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy),
141
+ # represented as a list of relative resource names. An ancestry path starts with
142
+ # the closest ancestor in the hierarchy and ends at root. If the asset is a
143
+ # project, folder, or organization, the ancestry path starts from the asset
144
+ # itself. Example: `["projects/123456789", "folders/5432", "organizations/1234"]`
145
+ # Corresponds to the JSON property `ancestors`
146
+ # @return [Array<String>]
147
+ attr_accessor :ancestors
148
+
149
+ # The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported
150
+ # asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-
151
+ # types) for more information.
152
+ # Corresponds to the JSON property `assetType`
153
+ # @return [String]
154
+ attr_accessor :asset_type
155
+
156
+ # An Identity and Access Management (IAM) policy, which specifies access
157
+ # controls for Google Cloud resources. A `Policy` is a collection of `bindings`.
158
+ # A `binding` binds one or more `members` to a single `role`. Members can be
159
+ # user accounts, service accounts, Google groups, and domains (such as G Suite).
160
+ # A `role` is a named list of permissions; each `role` can be an IAM predefined
161
+ # role or a user-created custom role. For some types of Google Cloud resources,
162
+ # a `binding` can also specify a `condition`, which is a logical expression that
163
+ # allows access to a resource only if the expression evaluates to `true`. A
164
+ # condition can add constraints based on attributes of the request, the resource,
165
+ # or both. To learn which resources support conditions in their IAM policies,
166
+ # see the [IAM documentation](https://cloud.google.com/iam/help/conditions/
167
+ # resource-policies). **JSON example:** ` "bindings": [ ` "role": "roles/
168
+ # resourcemanager.organizationAdmin", "members": [ "user:mike@example.com", "
169
+ # group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@
170
+ # appspot.gserviceaccount.com" ] `, ` "role": "roles/resourcemanager.
171
+ # organizationViewer", "members": [ "user:eve@example.com" ], "condition": ` "
172
+ # title": "expirable access", "description": "Does not grant access after Sep
173
+ # 2020", "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')", `
174
+ # ` ], "etag": "BwWWja0YfJA=", "version": 3 ` **YAML example:** bindings: -
175
+ # members: - user:mike@example.com - group:admins@example.com - domain:google.
176
+ # com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/
177
+ # resourcemanager.organizationAdmin - members: - user:eve@example.com role:
178
+ # roles/resourcemanager.organizationViewer condition: title: expirable access
179
+ # description: Does not grant access after Sep 2020 expression: request.time <
180
+ # timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a
181
+ # description of IAM and its features, see the [IAM documentation](https://cloud.
182
+ # google.com/iam/docs/).
183
+ # Corresponds to the JSON property `iamPolicy`
184
+ # @return [Google::Apis::CloudassetV1::Policy]
185
+ attr_accessor :iam_policy
186
+
187
+ # The full name of the asset. Example: `//compute.googleapis.com/projects/
188
+ # my_project_123/zones/zone1/instances/instance1` See [Resource names](https://
189
+ # cloud.google.com/apis/design/resource_names#full_resource_name) for more
190
+ # information.
191
+ # Corresponds to the JSON property `name`
192
+ # @return [String]
193
+ attr_accessor :name
194
+
195
+ # A representation of an [organization policy](https://cloud.google.com/resource-
196
+ # manager/docs/organization-policy/overview#organization_policy). There can be
197
+ # more than one organization policy with different constraints set on a given
198
+ # resource.
199
+ # Corresponds to the JSON property `orgPolicy`
200
+ # @return [Array<Google::Apis::CloudassetV1::GoogleCloudOrgpolicyV1Policy>]
201
+ attr_accessor :org_policy
202
+
203
+ # The inventory details of a VM.
204
+ # Corresponds to the JSON property `osInventory`
205
+ # @return [Google::Apis::CloudassetV1::Inventory]
206
+ attr_accessor :os_inventory
207
+
208
+ # A representation of a Google Cloud resource.
209
+ # Corresponds to the JSON property `resource`
210
+ # @return [Google::Apis::CloudassetV1::Resource]
211
+ attr_accessor :resource
212
+
213
+ # `ServicePerimeter` describes a set of Google Cloud resources which can freely
214
+ # import and export data amongst themselves, but not export outside of the `
215
+ # ServicePerimeter`. If a request with a source within this `ServicePerimeter`
216
+ # has a target outside of the `ServicePerimeter`, the request will be blocked.
217
+ # Otherwise the request is allowed. There are two types of Service Perimeter -
218
+ # Regular and Bridge. Regular Service Perimeters cannot overlap, a single Google
219
+ # Cloud project can only belong to a single regular Service Perimeter. Service
220
+ # Perimeter Bridges can contain only Google Cloud projects as members, a single
221
+ # Google Cloud project may belong to multiple Service Perimeter Bridges.
222
+ # Corresponds to the JSON property `servicePerimeter`
223
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1ServicePerimeter]
224
+ attr_accessor :service_perimeter
225
+
226
+ # The last update timestamp of an asset. update_time is updated when create/
227
+ # update/delete operation is performed.
228
+ # Corresponds to the JSON property `updateTime`
229
+ # @return [String]
230
+ attr_accessor :update_time
231
+
232
+ def initialize(**args)
233
+ update!(**args)
234
+ end
235
+
236
+ # Update properties of this object
237
+ def update!(**args)
238
+ @access_level = args[:access_level] if args.key?(:access_level)
239
+ @access_policy = args[:access_policy] if args.key?(:access_policy)
240
+ @ancestors = args[:ancestors] if args.key?(:ancestors)
241
+ @asset_type = args[:asset_type] if args.key?(:asset_type)
242
+ @iam_policy = args[:iam_policy] if args.key?(:iam_policy)
243
+ @name = args[:name] if args.key?(:name)
244
+ @org_policy = args[:org_policy] if args.key?(:org_policy)
245
+ @os_inventory = args[:os_inventory] if args.key?(:os_inventory)
246
+ @resource = args[:resource] if args.key?(:resource)
247
+ @service_perimeter = args[:service_perimeter] if args.key?(:service_perimeter)
248
+ @update_time = args[:update_time] if args.key?(:update_time)
249
+ end
250
+ end
251
+
252
+ # Specifies the audit configuration for a service. The configuration determines
253
+ # which permission types are logged, and what identities, if any, are exempted
254
+ # from logging. An AuditConfig must have one or more AuditLogConfigs. If there
255
+ # are AuditConfigs for both `allServices` and a specific service, the union of
256
+ # the two AuditConfigs is used for that service: the log_types specified in each
257
+ # AuditConfig are enabled, and the exempted_members in each AuditLogConfig are
258
+ # exempted. Example Policy with multiple AuditConfigs: ` "audit_configs": [ ` "
259
+ # service": "allServices", "audit_log_configs": [ ` "log_type": "DATA_READ", "
260
+ # exempted_members": [ "user:jose@example.com" ] `, ` "log_type": "DATA_WRITE" `,
261
+ # ` "log_type": "ADMIN_READ" ` ] `, ` "service": "sampleservice.googleapis.com",
262
+ # "audit_log_configs": [ ` "log_type": "DATA_READ" `, ` "log_type": "DATA_WRITE"
263
+ # , "exempted_members": [ "user:aliya@example.com" ] ` ] ` ] ` For sampleservice,
264
+ # this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also
265
+ # exempts jose@example.com from DATA_READ logging, and aliya@example.com from
266
+ # DATA_WRITE logging.
267
+ class AuditConfig
268
+ include Google::Apis::Core::Hashable
269
+
270
+ # The configuration for logging of each type of permission.
271
+ # Corresponds to the JSON property `auditLogConfigs`
272
+ # @return [Array<Google::Apis::CloudassetV1::AuditLogConfig>]
273
+ attr_accessor :audit_log_configs
274
+
275
+ # Specifies a service that will be enabled for audit logging. For example, `
276
+ # storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special
277
+ # value that covers all services.
278
+ # Corresponds to the JSON property `service`
279
+ # @return [String]
280
+ attr_accessor :service
281
+
282
+ def initialize(**args)
283
+ update!(**args)
284
+ end
285
+
286
+ # Update properties of this object
287
+ def update!(**args)
288
+ @audit_log_configs = args[:audit_log_configs] if args.key?(:audit_log_configs)
289
+ @service = args[:service] if args.key?(:service)
290
+ end
291
+ end
292
+
293
+ # Provides the configuration for logging a type of permissions. Example: ` "
294
+ # audit_log_configs": [ ` "log_type": "DATA_READ", "exempted_members": [ "user:
295
+ # jose@example.com" ] `, ` "log_type": "DATA_WRITE" ` ] ` This enables '
296
+ # DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from
297
+ # DATA_READ logging.
298
+ class AuditLogConfig
299
+ include Google::Apis::Core::Hashable
300
+
301
+ # Specifies the identities that do not cause logging for this type of permission.
302
+ # Follows the same format of Binding.members.
303
+ # Corresponds to the JSON property `exemptedMembers`
304
+ # @return [Array<String>]
305
+ attr_accessor :exempted_members
306
+
307
+ # The log type that this config enables.
308
+ # Corresponds to the JSON property `logType`
309
+ # @return [String]
310
+ attr_accessor :log_type
311
+
312
+ def initialize(**args)
313
+ update!(**args)
314
+ end
315
+
316
+ # Update properties of this object
317
+ def update!(**args)
318
+ @exempted_members = args[:exempted_members] if args.key?(:exempted_members)
319
+ @log_type = args[:log_type] if args.key?(:log_type)
320
+ end
321
+ end
322
+
323
+ # Batch get assets history response.
324
+ class BatchGetAssetsHistoryResponse
325
+ include Google::Apis::Core::Hashable
326
+
327
+ # A list of assets with valid time windows.
328
+ # Corresponds to the JSON property `assets`
329
+ # @return [Array<Google::Apis::CloudassetV1::TemporalAsset>]
330
+ attr_accessor :assets
331
+
332
+ def initialize(**args)
333
+ update!(**args)
334
+ end
335
+
336
+ # Update properties of this object
337
+ def update!(**args)
338
+ @assets = args[:assets] if args.key?(:assets)
339
+ end
340
+ end
341
+
342
+ # A BigQuery destination for exporting assets to.
343
+ class BigQueryDestination
344
+ include Google::Apis::Core::Hashable
345
+
346
+ # Required. The BigQuery dataset in format "projects/projectId/datasets/
347
+ # datasetId", to which the snapshot result should be exported. If this dataset
348
+ # does not exist, the export call returns an INVALID_ARGUMENT error.
349
+ # Corresponds to the JSON property `dataset`
350
+ # @return [String]
351
+ attr_accessor :dataset
352
+
353
+ # If the destination table already exists and this flag is `TRUE`, the table
354
+ # will be overwritten by the contents of assets snapshot. If the flag is `FALSE`
355
+ # or unset and the destination table already exists, the export call returns an
356
+ # INVALID_ARGUMEMT error.
357
+ # Corresponds to the JSON property `force`
358
+ # @return [Boolean]
359
+ attr_accessor :force
360
+ alias_method :force?, :force
361
+
362
+ # Specifications of BigQuery partitioned table as export destination.
363
+ # Corresponds to the JSON property `partitionSpec`
364
+ # @return [Google::Apis::CloudassetV1::PartitionSpec]
365
+ attr_accessor :partition_spec
366
+
367
+ # If this flag is `TRUE`, the snapshot results will be written to one or
368
+ # multiple tables, each of which contains results of one asset type. The [force]
369
+ # and [partition_spec] fields will apply to each of them. Field [table] will be
370
+ # concatenated with "_" and the asset type names (see https://cloud.google.com/
371
+ # asset-inventory/docs/supported-asset-types for supported asset types) to
372
+ # construct per-asset-type table names, in which all non-alphanumeric characters
373
+ # like "." and "/" will be substituted by "_". Example: if field [table] is "
374
+ # mytable" and snapshot results contain "storage.googleapis.com/Bucket" assets,
375
+ # the corresponding table name will be "mytable_storage_googleapis_com_Bucket".
376
+ # If any of these tables does not exist, a new table with the concatenated name
377
+ # will be created. When [content_type] in the ExportAssetsRequest is `RESOURCE`,
378
+ # the schema of each table will include RECORD-type columns mapped to the nested
379
+ # fields in the Asset.resource.data field of that asset type (up to the 15
380
+ # nested level BigQuery supports (https://cloud.google.com/bigquery/docs/nested-
381
+ # repeated#limitations)). The fields in >15 nested levels will be stored in JSON
382
+ # format string as a child column of its parent RECORD column. If error occurs
383
+ # when exporting to any table, the whole export call will return an error but
384
+ # the export results that already succeed will persist. Example: if exporting to
385
+ # table_type_A succeeds when exporting to table_type_B fails during one export
386
+ # call, the results in table_type_A will persist and there will not be partial
387
+ # results persisting in a table.
388
+ # Corresponds to the JSON property `separateTablesPerAssetType`
389
+ # @return [Boolean]
390
+ attr_accessor :separate_tables_per_asset_type
391
+ alias_method :separate_tables_per_asset_type?, :separate_tables_per_asset_type
392
+
393
+ # Required. The BigQuery table to which the snapshot result should be written.
394
+ # If this table does not exist, a new table with the given name will be created.
395
+ # Corresponds to the JSON property `table`
396
+ # @return [String]
397
+ attr_accessor :table
398
+
399
+ def initialize(**args)
400
+ update!(**args)
401
+ end
402
+
403
+ # Update properties of this object
404
+ def update!(**args)
405
+ @dataset = args[:dataset] if args.key?(:dataset)
406
+ @force = args[:force] if args.key?(:force)
407
+ @partition_spec = args[:partition_spec] if args.key?(:partition_spec)
408
+ @separate_tables_per_asset_type = args[:separate_tables_per_asset_type] if args.key?(:separate_tables_per_asset_type)
409
+ @table = args[:table] if args.key?(:table)
410
+ end
411
+ end
412
+
413
+ # Associates `members` with a `role`.
414
+ class Binding
415
+ include Google::Apis::Core::Hashable
416
+
417
+ # Represents a textual expression in the Common Expression Language (CEL) syntax.
418
+ # CEL is a C-like expression language. The syntax and semantics of CEL are
419
+ # documented at https://github.com/google/cel-spec. Example (Comparison): title:
420
+ # "Summary size limit" description: "Determines if a summary is less than 100
421
+ # chars" expression: "document.summary.size() < 100" Example (Equality): title: "
422
+ # Requestor is owner" description: "Determines if requestor is the document
423
+ # owner" expression: "document.owner == request.auth.claims.email" Example (
424
+ # Logic): title: "Public documents" description: "Determine whether the document
425
+ # should be publicly visible" expression: "document.type != 'private' &&
426
+ # document.type != 'internal'" Example (Data Manipulation): title: "Notification
427
+ # string" description: "Create a notification string with a timestamp."
428
+ # expression: "'New message received at ' + string(document.create_time)" The
429
+ # exact variables and functions that may be referenced within an expression are
430
+ # determined by the service that evaluates it. See the service documentation for
431
+ # additional information.
432
+ # Corresponds to the JSON property `condition`
433
+ # @return [Google::Apis::CloudassetV1::Expr]
434
+ attr_accessor :condition
435
+
436
+ # Specifies the identities requesting access for a Cloud Platform resource. `
437
+ # members` can have the following values: * `allUsers`: A special identifier
438
+ # that represents anyone who is on the internet; with or without a Google
439
+ # account. * `allAuthenticatedUsers`: A special identifier that represents
440
+ # anyone who is authenticated with a Google account or a service account. * `
441
+ # user:`emailid``: An email address that represents a specific Google account.
442
+ # For example, `alice@example.com` . * `serviceAccount:`emailid``: An email
443
+ # address that represents a service account. For example, `my-other-app@appspot.
444
+ # gserviceaccount.com`. * `group:`emailid``: An email address that represents a
445
+ # Google group. For example, `admins@example.com`. * `deleted:user:`emailid`?uid=
446
+ # `uniqueid``: An email address (plus unique identifier) representing a user
447
+ # that has been recently deleted. For example, `alice@example.com?uid=
448
+ # 123456789012345678901`. If the user is recovered, this value reverts to `user:`
449
+ # emailid`` and the recovered user retains the role in the binding. * `deleted:
450
+ # serviceAccount:`emailid`?uid=`uniqueid``: An email address (plus unique
451
+ # identifier) representing a service account that has been recently deleted. For
452
+ # example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`.
453
+ # If the service account is undeleted, this value reverts to `serviceAccount:`
454
+ # emailid`` and the undeleted service account retains the role in the binding. *
455
+ # `deleted:group:`emailid`?uid=`uniqueid``: An email address (plus unique
456
+ # identifier) representing a Google group that has been recently deleted. For
457
+ # example, `admins@example.com?uid=123456789012345678901`. If the group is
458
+ # recovered, this value reverts to `group:`emailid`` and the recovered group
459
+ # retains the role in the binding. * `domain:`domain``: The G Suite domain (
460
+ # primary) that represents all the users of that domain. For example, `google.
461
+ # com` or `example.com`.
462
+ # Corresponds to the JSON property `members`
463
+ # @return [Array<String>]
464
+ attr_accessor :members
465
+
466
+ # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`
467
+ # , or `roles/owner`.
468
+ # Corresponds to the JSON property `role`
469
+ # @return [String]
470
+ attr_accessor :role
471
+
472
+ def initialize(**args)
473
+ update!(**args)
474
+ end
475
+
476
+ # Update properties of this object
477
+ def update!(**args)
478
+ @condition = args[:condition] if args.key?(:condition)
479
+ @members = args[:members] if args.key?(:members)
480
+ @role = args[:role] if args.key?(:role)
481
+ end
482
+ end
483
+
484
+ # Create asset feed request.
485
+ class CreateFeedRequest
486
+ include Google::Apis::Core::Hashable
487
+
488
+ # An asset feed used to export asset updates to a destinations. An asset feed
489
+ # filter controls what updates are exported. The asset feed must be created
490
+ # within a project, organization, or folder. Supported destinations are: Pub/Sub
491
+ # topics.
492
+ # Corresponds to the JSON property `feed`
493
+ # @return [Google::Apis::CloudassetV1::Feed]
494
+ attr_accessor :feed
495
+
496
+ # Required. This is the client-assigned asset feed identifier and it needs to be
497
+ # unique under a specific parent project/folder/organization.
498
+ # Corresponds to the JSON property `feedId`
499
+ # @return [String]
500
+ attr_accessor :feed_id
501
+
502
+ def initialize(**args)
503
+ update!(**args)
504
+ end
505
+
506
+ # Update properties of this object
507
+ def update!(**args)
508
+ @feed = args[:feed] if args.key?(:feed)
509
+ @feed_id = args[:feed_id] if args.key?(:feed_id)
510
+ end
511
+ end
512
+
513
+ # A generic empty message that you can re-use to avoid defining duplicated empty
514
+ # messages in your APIs. A typical example is to use it as the request or the
515
+ # response type of an API method. For instance: service Foo ` rpc Bar(google.
516
+ # protobuf.Empty) returns (google.protobuf.Empty); ` The JSON representation for
517
+ # `Empty` is empty JSON object ````.
518
+ class Empty
519
+ include Google::Apis::Core::Hashable
520
+
521
+ def initialize(**args)
522
+ update!(**args)
523
+ end
524
+
525
+ # Update properties of this object
526
+ def update!(**args)
527
+ end
528
+ end
529
+
530
+ # Explanation about the IAM policy search result.
531
+ class Explanation
532
+ include Google::Apis::Core::Hashable
533
+
534
+ # The map from roles to their included permissions that match the permission
535
+ # query (i.e., a query containing `policy.role.permissions:`). Example: if query
536
+ # `policy.role.permissions:compute.disk.get` matches a policy binding that
537
+ # contains owner role, the matched_permissions will be ``"roles/owner": ["
538
+ # compute.disk.get"]``. The roles can also be found in the returned `policy`
539
+ # bindings. Note that the map is populated only for requests with permission
540
+ # queries.
541
+ # Corresponds to the JSON property `matchedPermissions`
542
+ # @return [Hash<String,Google::Apis::CloudassetV1::Permissions>]
543
+ attr_accessor :matched_permissions
544
+
545
+ def initialize(**args)
546
+ update!(**args)
547
+ end
548
+
549
+ # Update properties of this object
550
+ def update!(**args)
551
+ @matched_permissions = args[:matched_permissions] if args.key?(:matched_permissions)
552
+ end
553
+ end
554
+
555
+ # Export asset request.
556
+ class ExportAssetsRequest
557
+ include Google::Apis::Core::Hashable
558
+
559
+ # A list of asset types to take a snapshot for. For example: "compute.googleapis.
560
+ # com/Disk". Regular expressions are also supported. For example: * "compute.
561
+ # googleapis.com.*" snapshots resources whose asset type starts with "compute.
562
+ # googleapis.com". * ".*Instance" snapshots resources whose asset type ends with
563
+ # "Instance". * ".*Instance.*" snapshots resources whose asset type contains "
564
+ # Instance". See [RE2](https://github.com/google/re2/wiki/Syntax) for all
565
+ # supported regular expression syntax. If the regular expression does not match
566
+ # any supported asset type, an INVALID_ARGUMENT error will be returned. If
567
+ # specified, only matching assets will be returned, otherwise, it will snapshot
568
+ # all asset types. See [Introduction to Cloud Asset Inventory](https://cloud.
569
+ # google.com/asset-inventory/docs/overview) for all supported asset types.
570
+ # Corresponds to the JSON property `assetTypes`
571
+ # @return [Array<String>]
572
+ attr_accessor :asset_types
573
+
574
+ # Asset content type. If not specified, no content but the asset name will be
575
+ # returned.
576
+ # Corresponds to the JSON property `contentType`
577
+ # @return [String]
578
+ attr_accessor :content_type
579
+
580
+ # Output configuration for export assets destination.
581
+ # Corresponds to the JSON property `outputConfig`
582
+ # @return [Google::Apis::CloudassetV1::OutputConfig]
583
+ attr_accessor :output_config
584
+
585
+ # Timestamp to take an asset snapshot. This can only be set to a timestamp
586
+ # between the current time and the current time minus 35 days (inclusive). If
587
+ # not specified, the current time will be used. Due to delays in resource data
588
+ # collection and indexing, there is a volatile window during which running the
589
+ # same query may get different results.
590
+ # Corresponds to the JSON property `readTime`
591
+ # @return [String]
592
+ attr_accessor :read_time
593
+
594
+ def initialize(**args)
595
+ update!(**args)
596
+ end
597
+
598
+ # Update properties of this object
599
+ def update!(**args)
600
+ @asset_types = args[:asset_types] if args.key?(:asset_types)
601
+ @content_type = args[:content_type] if args.key?(:content_type)
602
+ @output_config = args[:output_config] if args.key?(:output_config)
603
+ @read_time = args[:read_time] if args.key?(:read_time)
604
+ end
605
+ end
606
+
607
+ # Represents a textual expression in the Common Expression Language (CEL) syntax.
608
+ # CEL is a C-like expression language. The syntax and semantics of CEL are
609
+ # documented at https://github.com/google/cel-spec. Example (Comparison): title:
610
+ # "Summary size limit" description: "Determines if a summary is less than 100
611
+ # chars" expression: "document.summary.size() < 100" Example (Equality): title: "
612
+ # Requestor is owner" description: "Determines if requestor is the document
613
+ # owner" expression: "document.owner == request.auth.claims.email" Example (
614
+ # Logic): title: "Public documents" description: "Determine whether the document
615
+ # should be publicly visible" expression: "document.type != 'private' &&
616
+ # document.type != 'internal'" Example (Data Manipulation): title: "Notification
617
+ # string" description: "Create a notification string with a timestamp."
618
+ # expression: "'New message received at ' + string(document.create_time)" The
619
+ # exact variables and functions that may be referenced within an expression are
620
+ # determined by the service that evaluates it. See the service documentation for
621
+ # additional information.
622
+ class Expr
623
+ include Google::Apis::Core::Hashable
624
+
625
+ # Optional. Description of the expression. This is a longer text which describes
626
+ # the expression, e.g. when hovered over it in a UI.
627
+ # Corresponds to the JSON property `description`
628
+ # @return [String]
629
+ attr_accessor :description
630
+
631
+ # Textual representation of an expression in Common Expression Language syntax.
632
+ # Corresponds to the JSON property `expression`
633
+ # @return [String]
634
+ attr_accessor :expression
635
+
636
+ # Optional. String indicating the location of the expression for error reporting,
637
+ # e.g. a file name and a position in the file.
638
+ # Corresponds to the JSON property `location`
639
+ # @return [String]
640
+ attr_accessor :location
641
+
642
+ # Optional. Title for the expression, i.e. a short string describing its purpose.
643
+ # This can be used e.g. in UIs which allow to enter the expression.
644
+ # Corresponds to the JSON property `title`
645
+ # @return [String]
646
+ attr_accessor :title
647
+
648
+ def initialize(**args)
649
+ update!(**args)
650
+ end
651
+
652
+ # Update properties of this object
653
+ def update!(**args)
654
+ @description = args[:description] if args.key?(:description)
655
+ @expression = args[:expression] if args.key?(:expression)
656
+ @location = args[:location] if args.key?(:location)
657
+ @title = args[:title] if args.key?(:title)
658
+ end
659
+ end
660
+
661
+ # An asset feed used to export asset updates to a destinations. An asset feed
662
+ # filter controls what updates are exported. The asset feed must be created
663
+ # within a project, organization, or folder. Supported destinations are: Pub/Sub
664
+ # topics.
665
+ class Feed
666
+ include Google::Apis::Core::Hashable
667
+
668
+ # A list of the full names of the assets to receive updates. You must specify
669
+ # either or both of asset_names and asset_types. Only asset updates matching
670
+ # specified asset_names or asset_types are exported to the feed. Example: `//
671
+ # compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`
672
+ # . See [Resource Names](https://cloud.google.com/apis/design/resource_names#
673
+ # full_resource_name) for more info.
674
+ # Corresponds to the JSON property `assetNames`
675
+ # @return [Array<String>]
676
+ attr_accessor :asset_names
677
+
678
+ # A list of types of the assets to receive updates. You must specify either or
679
+ # both of asset_names and asset_types. Only asset updates matching specified
680
+ # asset_names or asset_types are exported to the feed. Example: `"compute.
681
+ # googleapis.com/Disk"` See [this topic](https://cloud.google.com/asset-
682
+ # inventory/docs/supported-asset-types) for a list of all supported asset types.
683
+ # Corresponds to the JSON property `assetTypes`
684
+ # @return [Array<String>]
685
+ attr_accessor :asset_types
686
+
687
+ # Represents a textual expression in the Common Expression Language (CEL) syntax.
688
+ # CEL is a C-like expression language. The syntax and semantics of CEL are
689
+ # documented at https://github.com/google/cel-spec. Example (Comparison): title:
690
+ # "Summary size limit" description: "Determines if a summary is less than 100
691
+ # chars" expression: "document.summary.size() < 100" Example (Equality): title: "
692
+ # Requestor is owner" description: "Determines if requestor is the document
693
+ # owner" expression: "document.owner == request.auth.claims.email" Example (
694
+ # Logic): title: "Public documents" description: "Determine whether the document
695
+ # should be publicly visible" expression: "document.type != 'private' &&
696
+ # document.type != 'internal'" Example (Data Manipulation): title: "Notification
697
+ # string" description: "Create a notification string with a timestamp."
698
+ # expression: "'New message received at ' + string(document.create_time)" The
699
+ # exact variables and functions that may be referenced within an expression are
700
+ # determined by the service that evaluates it. See the service documentation for
701
+ # additional information.
702
+ # Corresponds to the JSON property `condition`
703
+ # @return [Google::Apis::CloudassetV1::Expr]
704
+ attr_accessor :condition
705
+
706
+ # Asset content type. If not specified, no content but the asset name and type
707
+ # will be returned.
708
+ # Corresponds to the JSON property `contentType`
709
+ # @return [String]
710
+ attr_accessor :content_type
711
+
712
+ # Output configuration for asset feed destination.
713
+ # Corresponds to the JSON property `feedOutputConfig`
714
+ # @return [Google::Apis::CloudassetV1::FeedOutputConfig]
715
+ attr_accessor :feed_output_config
716
+
717
+ # Required. The format will be projects/`project_number`/feeds/`client-
718
+ # assigned_feed_identifier` or folders/`folder_number`/feeds/`client-
719
+ # assigned_feed_identifier` or organizations/`organization_number`/feeds/`client-
720
+ # assigned_feed_identifier` The client-assigned feed identifier must be unique
721
+ # within the parent project/folder/organization.
722
+ # Corresponds to the JSON property `name`
723
+ # @return [String]
724
+ attr_accessor :name
725
+
726
+ def initialize(**args)
727
+ update!(**args)
728
+ end
729
+
730
+ # Update properties of this object
731
+ def update!(**args)
732
+ @asset_names = args[:asset_names] if args.key?(:asset_names)
733
+ @asset_types = args[:asset_types] if args.key?(:asset_types)
734
+ @condition = args[:condition] if args.key?(:condition)
735
+ @content_type = args[:content_type] if args.key?(:content_type)
736
+ @feed_output_config = args[:feed_output_config] if args.key?(:feed_output_config)
737
+ @name = args[:name] if args.key?(:name)
738
+ end
739
+ end
740
+
741
+ # Output configuration for asset feed destination.
742
+ class FeedOutputConfig
743
+ include Google::Apis::Core::Hashable
744
+
745
+ # A Pub/Sub destination.
746
+ # Corresponds to the JSON property `pubsubDestination`
747
+ # @return [Google::Apis::CloudassetV1::PubsubDestination]
748
+ attr_accessor :pubsub_destination
749
+
750
+ def initialize(**args)
751
+ update!(**args)
752
+ end
753
+
754
+ # Update properties of this object
755
+ def update!(**args)
756
+ @pubsub_destination = args[:pubsub_destination] if args.key?(:pubsub_destination)
757
+ end
758
+ end
759
+
760
+ # A Cloud Storage location.
761
+ class GcsDestination
762
+ include Google::Apis::Core::Hashable
763
+
764
+ # The uri of the Cloud Storage object. It's the same uri that is used by gsutil.
765
+ # Example: "gs://bucket_name/object_name". See [Viewing and Editing Object
766
+ # Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for
767
+ # more information.
768
+ # Corresponds to the JSON property `uri`
769
+ # @return [String]
770
+ attr_accessor :uri
771
+
772
+ # The uri prefix of all generated Cloud Storage objects. Example: "gs://
773
+ # bucket_name/object_name_prefix". Each object uri is in format: "gs://
774
+ # bucket_name/object_name_prefix// and only contains assets for that type.
775
+ # starts from 0. Example: "gs://bucket_name/object_name_prefix/compute.
776
+ # googleapis.com/Disk/0" is the first shard of output objects containing all
777
+ # compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be returned
778
+ # if file with the same name "gs://bucket_name/object_name_prefix" already
779
+ # exists.
780
+ # Corresponds to the JSON property `uriPrefix`
781
+ # @return [String]
782
+ attr_accessor :uri_prefix
783
+
784
+ def initialize(**args)
785
+ update!(**args)
786
+ end
787
+
788
+ # Update properties of this object
789
+ def update!(**args)
790
+ @uri = args[:uri] if args.key?(:uri)
791
+ @uri_prefix = args[:uri_prefix] if args.key?(:uri_prefix)
792
+ end
793
+ end
794
+
795
+ # An IAM role or permission under analysis.
796
+ class GoogleCloudAssetV1Access
797
+ include Google::Apis::Core::Hashable
798
+
799
+ # Represents the detailed state of an entity under analysis, such as a resource,
800
+ # an identity or an access.
801
+ # Corresponds to the JSON property `analysisState`
802
+ # @return [Google::Apis::CloudassetV1::IamPolicyAnalysisState]
803
+ attr_accessor :analysis_state
804
+
805
+ # The permission.
806
+ # Corresponds to the JSON property `permission`
807
+ # @return [String]
808
+ attr_accessor :permission
809
+
810
+ # The role.
811
+ # Corresponds to the JSON property `role`
812
+ # @return [String]
813
+ attr_accessor :role
814
+
815
+ def initialize(**args)
816
+ update!(**args)
817
+ end
818
+
819
+ # Update properties of this object
820
+ def update!(**args)
821
+ @analysis_state = args[:analysis_state] if args.key?(:analysis_state)
822
+ @permission = args[:permission] if args.key?(:permission)
823
+ @role = args[:role] if args.key?(:role)
824
+ end
825
+ end
826
+
827
+ # An access control list, derived from the above IAM policy binding, which
828
+ # contains a set of resources and accesses. May include one item from each set
829
+ # to compose an access control entry. NOTICE that there could be multiple access
830
+ # control lists for one IAM policy binding. The access control lists are created
831
+ # based on resource and access combinations. For example, assume we have the
832
+ # following cases in one IAM policy binding: - Permission P1 and P2 apply to
833
+ # resource R1 and R2; - Permission P3 applies to resource R2 and R3; This will
834
+ # result in the following access control lists: - AccessControlList 1: [R1, R2],
835
+ # [P1, P2] - AccessControlList 2: [R2, R3], [P3]
836
+ class GoogleCloudAssetV1AccessControlList
837
+ include Google::Apis::Core::Hashable
838
+
839
+ # The accesses that match one of the following conditions: - The access_selector,
840
+ # if it is specified in request; - Otherwise, access specifiers reachable from
841
+ # the policy binding's role.
842
+ # Corresponds to the JSON property `accesses`
843
+ # @return [Array<Google::Apis::CloudassetV1::GoogleCloudAssetV1Access>]
844
+ attr_accessor :accesses
845
+
846
+ # Resource edges of the graph starting from the policy attached resource to any
847
+ # descendant resources. The Edge.source_node contains the full resource name of
848
+ # a parent resource and Edge.target_node contains the full resource name of a
849
+ # child resource. This field is present only if the output_resource_edges option
850
+ # is enabled in request.
851
+ # Corresponds to the JSON property `resourceEdges`
852
+ # @return [Array<Google::Apis::CloudassetV1::GoogleCloudAssetV1Edge>]
853
+ attr_accessor :resource_edges
854
+
855
+ # The resources that match one of the following conditions: - The
856
+ # resource_selector, if it is specified in request; - Otherwise, resources
857
+ # reachable from the policy attached resource.
858
+ # Corresponds to the JSON property `resources`
859
+ # @return [Array<Google::Apis::CloudassetV1::GoogleCloudAssetV1Resource>]
860
+ attr_accessor :resources
861
+
862
+ def initialize(**args)
863
+ update!(**args)
864
+ end
865
+
866
+ # Update properties of this object
867
+ def update!(**args)
868
+ @accesses = args[:accesses] if args.key?(:accesses)
869
+ @resource_edges = args[:resource_edges] if args.key?(:resource_edges)
870
+ @resources = args[:resources] if args.key?(:resources)
871
+ end
872
+ end
873
+
874
+ # A BigQuery destination.
875
+ class GoogleCloudAssetV1BigQueryDestination
876
+ include Google::Apis::Core::Hashable
877
+
878
+ # Required. The BigQuery dataset in format "projects/projectId/datasets/
879
+ # datasetId", to which the analysis results should be exported. If this dataset
880
+ # does not exist, the export call will return an INVALID_ARGUMENT error.
881
+ # Corresponds to the JSON property `dataset`
882
+ # @return [String]
883
+ attr_accessor :dataset
884
+
885
+ # The partition key for BigQuery partitioned table.
886
+ # Corresponds to the JSON property `partitionKey`
887
+ # @return [String]
888
+ attr_accessor :partition_key
889
+
890
+ # Required. The prefix of the BigQuery tables to which the analysis results will
891
+ # be written. Tables will be created based on this table_prefix if not exist: *
892
+ # _analysis table will contain export operation's metadata. * _analysis_result
893
+ # will contain all the IamPolicyAnalysisResult. When [partition_key] is
894
+ # specified, both tables will be partitioned based on the [partition_key].
895
+ # Corresponds to the JSON property `tablePrefix`
896
+ # @return [String]
897
+ attr_accessor :table_prefix
898
+
899
+ # Optional. Specifies the action that occurs if the destination table or
900
+ # partition already exists. The following values are supported: * WRITE_TRUNCATE:
901
+ # If the table or partition already exists, BigQuery overwrites the entire
902
+ # table or all the partitions data. * WRITE_APPEND: If the table or partition
903
+ # already exists, BigQuery appends the data to the table or the latest partition.
904
+ # * WRITE_EMPTY: If the table already exists and contains data, an error is
905
+ # returned. The default value is WRITE_APPEND. Each action is atomic and only
906
+ # occurs if BigQuery is able to complete the job successfully. Details are at
907
+ # https://cloud.google.com/bigquery/docs/loading-data-local#
908
+ # appending_to_or_overwriting_a_table_using_a_local_file.
909
+ # Corresponds to the JSON property `writeDisposition`
910
+ # @return [String]
911
+ attr_accessor :write_disposition
912
+
913
+ def initialize(**args)
914
+ update!(**args)
915
+ end
916
+
917
+ # Update properties of this object
918
+ def update!(**args)
919
+ @dataset = args[:dataset] if args.key?(:dataset)
920
+ @partition_key = args[:partition_key] if args.key?(:partition_key)
921
+ @table_prefix = args[:table_prefix] if args.key?(:table_prefix)
922
+ @write_disposition = args[:write_disposition] if args.key?(:write_disposition)
923
+ end
924
+ end
925
+
926
+ # A directional edge.
927
+ class GoogleCloudAssetV1Edge
928
+ include Google::Apis::Core::Hashable
929
+
930
+ # The source node of the edge. For example, it could be a full resource name for
931
+ # a resource node or an email of an identity.
932
+ # Corresponds to the JSON property `sourceNode`
933
+ # @return [String]
934
+ attr_accessor :source_node
935
+
936
+ # The target node of the edge. For example, it could be a full resource name for
937
+ # a resource node or an email of an identity.
938
+ # Corresponds to the JSON property `targetNode`
939
+ # @return [String]
940
+ attr_accessor :target_node
941
+
942
+ def initialize(**args)
943
+ update!(**args)
944
+ end
945
+
946
+ # Update properties of this object
947
+ def update!(**args)
948
+ @source_node = args[:source_node] if args.key?(:source_node)
949
+ @target_node = args[:target_node] if args.key?(:target_node)
950
+ end
951
+ end
952
+
953
+ # A Cloud Storage location.
954
+ class GoogleCloudAssetV1GcsDestination
955
+ include Google::Apis::Core::Hashable
956
+
957
+ # Required. The uri of the Cloud Storage object. It's the same uri that is used
958
+ # by gsutil. For example: "gs://bucket_name/object_name". See [Quickstart: Using
959
+ # the gsutil tool] (https://cloud.google.com/storage/docs/quickstart-gsutil) for
960
+ # examples.
961
+ # Corresponds to the JSON property `uri`
962
+ # @return [String]
963
+ attr_accessor :uri
964
+
965
+ def initialize(**args)
966
+ update!(**args)
967
+ end
968
+
969
+ # Update properties of this object
970
+ def update!(**args)
971
+ @uri = args[:uri] if args.key?(:uri)
972
+ end
973
+ end
974
+
975
+ # An identity under analysis.
976
+ class GoogleCloudAssetV1Identity
977
+ include Google::Apis::Core::Hashable
978
+
979
+ # Represents the detailed state of an entity under analysis, such as a resource,
980
+ # an identity or an access.
981
+ # Corresponds to the JSON property `analysisState`
982
+ # @return [Google::Apis::CloudassetV1::IamPolicyAnalysisState]
983
+ attr_accessor :analysis_state
984
+
985
+ # The identity name in any form of members appear in [IAM policy binding](https:/
986
+ # /cloud.google.com/iam/reference/rest/v1/Binding), such as: - user:foo@google.
987
+ # com - group:group1@google.com - serviceAccount:s1@prj1.iam.gserviceaccount.com
988
+ # - projectOwner:some_project_id - domain:google.com - allUsers - etc.
989
+ # Corresponds to the JSON property `name`
990
+ # @return [String]
991
+ attr_accessor :name
992
+
993
+ def initialize(**args)
994
+ update!(**args)
995
+ end
996
+
997
+ # Update properties of this object
998
+ def update!(**args)
999
+ @analysis_state = args[:analysis_state] if args.key?(:analysis_state)
1000
+ @name = args[:name] if args.key?(:name)
1001
+ end
1002
+ end
1003
+
1004
+ # The identities and group edges.
1005
+ class GoogleCloudAssetV1IdentityList
1006
+ include Google::Apis::Core::Hashable
1007
+
1008
+ # Group identity edges of the graph starting from the binding's group members to
1009
+ # any node of the identities. The Edge.source_node contains a group, such as `
1010
+ # group:parent@google.com`. The Edge.target_node contains a member of the group,
1011
+ # such as `group:child@google.com` or `user:foo@google.com`. This field is
1012
+ # present only if the output_group_edges option is enabled in request.
1013
+ # Corresponds to the JSON property `groupEdges`
1014
+ # @return [Array<Google::Apis::CloudassetV1::GoogleCloudAssetV1Edge>]
1015
+ attr_accessor :group_edges
1016
+
1017
+ # Only the identities that match one of the following conditions will be
1018
+ # presented: - The identity_selector, if it is specified in request; - Otherwise,
1019
+ # identities reachable from the policy binding's members.
1020
+ # Corresponds to the JSON property `identities`
1021
+ # @return [Array<Google::Apis::CloudassetV1::GoogleCloudAssetV1Identity>]
1022
+ attr_accessor :identities
1023
+
1024
+ def initialize(**args)
1025
+ update!(**args)
1026
+ end
1027
+
1028
+ # Update properties of this object
1029
+ def update!(**args)
1030
+ @group_edges = args[:group_edges] if args.key?(:group_edges)
1031
+ @identities = args[:identities] if args.key?(:identities)
1032
+ end
1033
+ end
1034
+
1035
+ # A Google Cloud resource under analysis.
1036
+ class GoogleCloudAssetV1Resource
1037
+ include Google::Apis::Core::Hashable
1038
+
1039
+ # Represents the detailed state of an entity under analysis, such as a resource,
1040
+ # an identity or an access.
1041
+ # Corresponds to the JSON property `analysisState`
1042
+ # @return [Google::Apis::CloudassetV1::IamPolicyAnalysisState]
1043
+ attr_accessor :analysis_state
1044
+
1045
+ # The [full resource name](https://cloud.google.com/asset-inventory/docs/
1046
+ # resource-name-format)
1047
+ # Corresponds to the JSON property `fullResourceName`
1048
+ # @return [String]
1049
+ attr_accessor :full_resource_name
1050
+
1051
+ def initialize(**args)
1052
+ update!(**args)
1053
+ end
1054
+
1055
+ # Update properties of this object
1056
+ def update!(**args)
1057
+ @analysis_state = args[:analysis_state] if args.key?(:analysis_state)
1058
+ @full_resource_name = args[:full_resource_name] if args.key?(:full_resource_name)
1059
+ end
1060
+ end
1061
+
1062
+ # Used in `policy_type` to specify how `boolean_policy` will behave at this
1063
+ # resource.
1064
+ class GoogleCloudOrgpolicyV1BooleanPolicy
1065
+ include Google::Apis::Core::Hashable
1066
+
1067
+ # If `true`, then the `Policy` is enforced. If `false`, then any configuration
1068
+ # is acceptable. Suppose you have a `Constraint` `constraints/compute.
1069
+ # disableSerialPortAccess` with `constraint_default` set to `ALLOW`. A `Policy`
1070
+ # for that `Constraint` exhibits the following behavior: - If the `Policy` at
1071
+ # this resource has enforced set to `false`, serial port connection attempts
1072
+ # will be allowed. - If the `Policy` at this resource has enforced set to `true`,
1073
+ # serial port connection attempts will be refused. - If the `Policy` at this
1074
+ # resource is `RestoreDefault`, serial port connection attempts will be allowed.
1075
+ # - If no `Policy` is set at this resource or anywhere higher in the resource
1076
+ # hierarchy, serial port connection attempts will be allowed. - If no `Policy`
1077
+ # is set at this resource, but one exists higher in the resource hierarchy, the
1078
+ # behavior is as if the`Policy` were set at this resource. The following
1079
+ # examples demonstrate the different possible layerings: Example 1 (nearest `
1080
+ # Constraint` wins): `organizations/foo` has a `Policy` with: `enforced: false` `
1081
+ # projects/bar` has no `Policy` set. The constraint at `projects/bar` and `
1082
+ # organizations/foo` will not be enforced. Example 2 (enforcement gets replaced):
1083
+ # `organizations/foo` has a `Policy` with: `enforced: false` `projects/bar` has
1084
+ # a `Policy` with: `enforced: true` The constraint at `organizations/foo` is not
1085
+ # enforced. The constraint at `projects/bar` is enforced. Example 3 (
1086
+ # RestoreDefault): `organizations/foo` has a `Policy` with: `enforced: true` `
1087
+ # projects/bar` has a `Policy` with: `RestoreDefault: ``` The constraint at `
1088
+ # organizations/foo` is enforced. The constraint at `projects/bar` is not
1089
+ # enforced, because `constraint_default` for the `Constraint` is `ALLOW`.
1090
+ # Corresponds to the JSON property `enforced`
1091
+ # @return [Boolean]
1092
+ attr_accessor :enforced
1093
+ alias_method :enforced?, :enforced
1094
+
1095
+ def initialize(**args)
1096
+ update!(**args)
1097
+ end
1098
+
1099
+ # Update properties of this object
1100
+ def update!(**args)
1101
+ @enforced = args[:enforced] if args.key?(:enforced)
1102
+ end
1103
+ end
1104
+
1105
+ # Used in `policy_type` to specify how `list_policy` behaves at this resource. `
1106
+ # ListPolicy` can define specific values and subtrees of Cloud Resource Manager
1107
+ # resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed
1108
+ # or denied by setting the `allowed_values` and `denied_values` fields. This is
1109
+ # achieved by using the `under:` and optional `is:` prefixes. The `under:`
1110
+ # prefix is used to denote resource subtree values. The `is:` prefix is used to
1111
+ # denote specific values, and is required only if the value contains a ":".
1112
+ # Values prefixed with "is:" are treated the same as values with no prefix.
1113
+ # Ancestry subtrees must be in one of the following formats: - "projects/", e.g.
1114
+ # "projects/tokyo-rain-123" - "folders/", e.g. "folders/1234" - "organizations/",
1115
+ # e.g. "organizations/1234" The `supports_under` field of the associated `
1116
+ # Constraint` defines whether ancestry prefixes can be used. You can set `
1117
+ # allowed_values` and `denied_values` in the same `Policy` if `all_values` is `
1118
+ # ALL_VALUES_UNSPECIFIED`. `ALLOW` or `DENY` are used to allow or deny all
1119
+ # values. If `all_values` is set to either `ALLOW` or `DENY`, `allowed_values`
1120
+ # and `denied_values` must be unset.
1121
+ class GoogleCloudOrgpolicyV1ListPolicy
1122
+ include Google::Apis::Core::Hashable
1123
+
1124
+ # The policy all_values state.
1125
+ # Corresponds to the JSON property `allValues`
1126
+ # @return [String]
1127
+ attr_accessor :all_values
1128
+
1129
+ # List of values allowed at this resource. Can only be set if `all_values` is
1130
+ # set to `ALL_VALUES_UNSPECIFIED`.
1131
+ # Corresponds to the JSON property `allowedValues`
1132
+ # @return [Array<String>]
1133
+ attr_accessor :allowed_values
1134
+
1135
+ # List of values denied at this resource. Can only be set if `all_values` is set
1136
+ # to `ALL_VALUES_UNSPECIFIED`.
1137
+ # Corresponds to the JSON property `deniedValues`
1138
+ # @return [Array<String>]
1139
+ attr_accessor :denied_values
1140
+
1141
+ # Determines the inheritance behavior for this `Policy`. By default, a `
1142
+ # ListPolicy` set at a resource supersedes any `Policy` set anywhere up the
1143
+ # resource hierarchy. However, if `inherit_from_parent` is set to `true`, then
1144
+ # the values from the effective `Policy` of the parent resource are inherited,
1145
+ # meaning the values set in this `Policy` are added to the values inherited up
1146
+ # the hierarchy. Setting `Policy` hierarchies that inherit both allowed values
1147
+ # and denied values isn't recommended in most circumstances to keep the
1148
+ # configuration simple and understandable. However, it is possible to set a `
1149
+ # Policy` with `allowed_values` set that inherits a `Policy` with `denied_values`
1150
+ # set. In this case, the values that are allowed must be in `allowed_values`
1151
+ # and not present in `denied_values`. For example, suppose you have a `
1152
+ # Constraint` `constraints/serviceuser.services`, which has a `constraint_type`
1153
+ # of `list_constraint`, and with `constraint_default` set to `ALLOW`. Suppose
1154
+ # that at the Organization level, a `Policy` is applied that restricts the
1155
+ # allowed API activations to ``E1`, `E2``. Then, if a `Policy` is applied to a
1156
+ # project below the Organization that has `inherit_from_parent` set to `false`
1157
+ # and field all_values set to DENY, then an attempt to activate any API will be
1158
+ # denied. The following examples demonstrate different possible layerings for `
1159
+ # projects/bar` parented by `organizations/foo`: Example 1 (no inherited values):
1160
+ # `organizations/foo` has a `Policy` with values: `allowed_values: "E1"
1161
+ # allowed_values:"E2"` `projects/bar` has `inherit_from_parent` `false` and
1162
+ # values: `allowed_values: "E3" allowed_values: "E4"` The accepted values at `
1163
+ # organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are `
1164
+ # E3`, and `E4`. Example 2 (inherited values): `organizations/foo` has a `Policy`
1165
+ # with values: `allowed_values: "E1" allowed_values:"E2"` `projects/bar` has a `
1166
+ # Policy` with values: `value: "E3" value: "E4" inherit_from_parent: true` The
1167
+ # accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `
1168
+ # projects/bar` are `E1`, `E2`, `E3`, and `E4`. Example 3 (inheriting both
1169
+ # allowed and denied values): `organizations/foo` has a `Policy` with values: `
1170
+ # allowed_values: "E1" allowed_values: "E2"` `projects/bar` has a `Policy` with:
1171
+ # `denied_values: "E1"` The accepted values at `organizations/foo` are `E1`, `E2`
1172
+ # . The value accepted at `projects/bar` is `E2`. Example 4 (RestoreDefault): `
1173
+ # organizations/foo` has a `Policy` with values: `allowed_values: "E1"
1174
+ # allowed_values:"E2"` `projects/bar` has a `Policy` with values: `
1175
+ # RestoreDefault: ``` The accepted values at `organizations/foo` are `E1`, `E2`.
1176
+ # The accepted values at `projects/bar` are either all or none depending on the
1177
+ # value of `constraint_default` (if `ALLOW`, all; if `DENY`, none). Example 5 (
1178
+ # no policy inherits parent policy): `organizations/foo` has no `Policy` set. `
1179
+ # projects/bar` has no `Policy` set. The accepted values at both levels are
1180
+ # either all or none depending on the value of `constraint_default` (if `ALLOW`,
1181
+ # all; if `DENY`, none). Example 6 (ListConstraint allowing all): `organizations/
1182
+ # foo` has a `Policy` with values: `allowed_values: "E1" allowed_values: "E2"` `
1183
+ # projects/bar` has a `Policy` with: `all: ALLOW` The accepted values at `
1184
+ # organizations/foo` are `E1`, E2`. Any value is accepted at `projects/bar`.
1185
+ # Example 7 (ListConstraint allowing none): `organizations/foo` has a `Policy`
1186
+ # with values: `allowed_values: "E1" allowed_values: "E2"` `projects/bar` has a `
1187
+ # Policy` with: `all: DENY` The accepted values at `organizations/foo` are `E1`,
1188
+ # E2`. No value is accepted at `projects/bar`. Example 10 (allowed and denied
1189
+ # subtrees of Resource Manager hierarchy): Given the following resource
1190
+ # hierarchy O1->`F1, F2`; F1->`P1`; F2->`P2, P3`, `organizations/foo` has a `
1191
+ # Policy` with values: `allowed_values: "under:organizations/O1"` `projects/bar`
1192
+ # has a `Policy` with: `allowed_values: "under:projects/P3"` `denied_values: "
1193
+ # under:folders/F2"` The accepted values at `organizations/foo` are `
1194
+ # organizations/O1`, `folders/F1`, `folders/F2`, `projects/P1`, `projects/P2`, `
1195
+ # projects/P3`. The accepted values at `projects/bar` are `organizations/O1`, `
1196
+ # folders/F1`, `projects/P1`.
1197
+ # Corresponds to the JSON property `inheritFromParent`
1198
+ # @return [Boolean]
1199
+ attr_accessor :inherit_from_parent
1200
+ alias_method :inherit_from_parent?, :inherit_from_parent
1201
+
1202
+ # Optional. The Google Cloud Console will try to default to a configuration that
1203
+ # matches the value specified in this `Policy`. If `suggested_value` is not set,
1204
+ # it will inherit the value specified higher in the hierarchy, unless `
1205
+ # inherit_from_parent` is `false`.
1206
+ # Corresponds to the JSON property `suggestedValue`
1207
+ # @return [String]
1208
+ attr_accessor :suggested_value
1209
+
1210
+ def initialize(**args)
1211
+ update!(**args)
1212
+ end
1213
+
1214
+ # Update properties of this object
1215
+ def update!(**args)
1216
+ @all_values = args[:all_values] if args.key?(:all_values)
1217
+ @allowed_values = args[:allowed_values] if args.key?(:allowed_values)
1218
+ @denied_values = args[:denied_values] if args.key?(:denied_values)
1219
+ @inherit_from_parent = args[:inherit_from_parent] if args.key?(:inherit_from_parent)
1220
+ @suggested_value = args[:suggested_value] if args.key?(:suggested_value)
1221
+ end
1222
+ end
1223
+
1224
+ # Defines a Cloud Organization `Policy` which is used to specify `Constraints`
1225
+ # for configurations of Cloud Platform resources.
1226
+ class GoogleCloudOrgpolicyV1Policy
1227
+ include Google::Apis::Core::Hashable
1228
+
1229
+ # Used in `policy_type` to specify how `boolean_policy` will behave at this
1230
+ # resource.
1231
+ # Corresponds to the JSON property `booleanPolicy`
1232
+ # @return [Google::Apis::CloudassetV1::GoogleCloudOrgpolicyV1BooleanPolicy]
1233
+ attr_accessor :boolean_policy
1234
+
1235
+ # The name of the `Constraint` the `Policy` is configuring, for example, `
1236
+ # constraints/serviceuser.services`. A [list of available constraints](/resource-
1237
+ # manager/docs/organization-policy/org-policy-constraints) is available.
1238
+ # Immutable after creation.
1239
+ # Corresponds to the JSON property `constraint`
1240
+ # @return [String]
1241
+ attr_accessor :constraint
1242
+
1243
+ # An opaque tag indicating the current version of the `Policy`, used for
1244
+ # concurrency control. When the `Policy` is returned from either a `GetPolicy`
1245
+ # or a `ListOrgPolicy` request, this `etag` indicates the version of the current
1246
+ # `Policy` to use when executing a read-modify-write loop. When the `Policy` is
1247
+ # returned from a `GetEffectivePolicy` request, the `etag` will be unset. When
1248
+ # the `Policy` is used in a `SetOrgPolicy` method, use the `etag` value that was
1249
+ # returned from a `GetOrgPolicy` request as part of a read-modify-write loop for
1250
+ # concurrency control. Not setting the `etag`in a `SetOrgPolicy` request will
1251
+ # result in an unconditional write of the `Policy`.
1252
+ # Corresponds to the JSON property `etag`
1253
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
1254
+ # @return [String]
1255
+ attr_accessor :etag
1256
+
1257
+ # Used in `policy_type` to specify how `list_policy` behaves at this resource. `
1258
+ # ListPolicy` can define specific values and subtrees of Cloud Resource Manager
1259
+ # resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed
1260
+ # or denied by setting the `allowed_values` and `denied_values` fields. This is
1261
+ # achieved by using the `under:` and optional `is:` prefixes. The `under:`
1262
+ # prefix is used to denote resource subtree values. The `is:` prefix is used to
1263
+ # denote specific values, and is required only if the value contains a ":".
1264
+ # Values prefixed with "is:" are treated the same as values with no prefix.
1265
+ # Ancestry subtrees must be in one of the following formats: - "projects/", e.g.
1266
+ # "projects/tokyo-rain-123" - "folders/", e.g. "folders/1234" - "organizations/",
1267
+ # e.g. "organizations/1234" The `supports_under` field of the associated `
1268
+ # Constraint` defines whether ancestry prefixes can be used. You can set `
1269
+ # allowed_values` and `denied_values` in the same `Policy` if `all_values` is `
1270
+ # ALL_VALUES_UNSPECIFIED`. `ALLOW` or `DENY` are used to allow or deny all
1271
+ # values. If `all_values` is set to either `ALLOW` or `DENY`, `allowed_values`
1272
+ # and `denied_values` must be unset.
1273
+ # Corresponds to the JSON property `listPolicy`
1274
+ # @return [Google::Apis::CloudassetV1::GoogleCloudOrgpolicyV1ListPolicy]
1275
+ attr_accessor :list_policy
1276
+
1277
+ # Ignores policies set above this resource and restores the `constraint_default`
1278
+ # enforcement behavior of the specific `Constraint` at this resource. Suppose
1279
+ # that `constraint_default` is set to `ALLOW` for the `Constraint` `constraints/
1280
+ # serviceuser.services`. Suppose that organization foo.com sets a `Policy` at
1281
+ # their Organization resource node that restricts the allowed service
1282
+ # activations to deny all service activations. They could then set a `Policy`
1283
+ # with the `policy_type` `restore_default` on several experimental projects,
1284
+ # restoring the `constraint_default` enforcement of the `Constraint` for only
1285
+ # those projects, allowing those projects to have all services activated.
1286
+ # Corresponds to the JSON property `restoreDefault`
1287
+ # @return [Google::Apis::CloudassetV1::GoogleCloudOrgpolicyV1RestoreDefault]
1288
+ attr_accessor :restore_default
1289
+
1290
+ # The time stamp the `Policy` was previously updated. This is set by the server,
1291
+ # not specified by the caller, and represents the last time a call to `
1292
+ # SetOrgPolicy` was made for that `Policy`. Any value set by the client will be
1293
+ # ignored.
1294
+ # Corresponds to the JSON property `updateTime`
1295
+ # @return [String]
1296
+ attr_accessor :update_time
1297
+
1298
+ # Version of the `Policy`. Default version is 0;
1299
+ # Corresponds to the JSON property `version`
1300
+ # @return [Fixnum]
1301
+ attr_accessor :version
1302
+
1303
+ def initialize(**args)
1304
+ update!(**args)
1305
+ end
1306
+
1307
+ # Update properties of this object
1308
+ def update!(**args)
1309
+ @boolean_policy = args[:boolean_policy] if args.key?(:boolean_policy)
1310
+ @constraint = args[:constraint] if args.key?(:constraint)
1311
+ @etag = args[:etag] if args.key?(:etag)
1312
+ @list_policy = args[:list_policy] if args.key?(:list_policy)
1313
+ @restore_default = args[:restore_default] if args.key?(:restore_default)
1314
+ @update_time = args[:update_time] if args.key?(:update_time)
1315
+ @version = args[:version] if args.key?(:version)
1316
+ end
1317
+ end
1318
+
1319
+ # Ignores policies set above this resource and restores the `constraint_default`
1320
+ # enforcement behavior of the specific `Constraint` at this resource. Suppose
1321
+ # that `constraint_default` is set to `ALLOW` for the `Constraint` `constraints/
1322
+ # serviceuser.services`. Suppose that organization foo.com sets a `Policy` at
1323
+ # their Organization resource node that restricts the allowed service
1324
+ # activations to deny all service activations. They could then set a `Policy`
1325
+ # with the `policy_type` `restore_default` on several experimental projects,
1326
+ # restoring the `constraint_default` enforcement of the `Constraint` for only
1327
+ # those projects, allowing those projects to have all services activated.
1328
+ class GoogleCloudOrgpolicyV1RestoreDefault
1329
+ include Google::Apis::Core::Hashable
1330
+
1331
+ def initialize(**args)
1332
+ update!(**args)
1333
+ end
1334
+
1335
+ # Update properties of this object
1336
+ def update!(**args)
1337
+ end
1338
+ end
1339
+
1340
+ # An `AccessLevel` is a label that can be applied to requests to Google Cloud
1341
+ # services, along with a list of requirements necessary for the label to be
1342
+ # applied.
1343
+ class GoogleIdentityAccesscontextmanagerV1AccessLevel
1344
+ include Google::Apis::Core::Hashable
1345
+
1346
+ # `BasicLevel` is an `AccessLevel` using a set of recommended features.
1347
+ # Corresponds to the JSON property `basic`
1348
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1BasicLevel]
1349
+ attr_accessor :basic
1350
+
1351
+ # `CustomLevel` is an `AccessLevel` using the Cloud Common Expression Language
1352
+ # to represent the necessary conditions for the level to apply to a request. See
1353
+ # CEL spec at: https://github.com/google/cel-spec
1354
+ # Corresponds to the JSON property `custom`
1355
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1CustomLevel]
1356
+ attr_accessor :custom
1357
+
1358
+ # Description of the `AccessLevel` and its use. Does not affect behavior.
1359
+ # Corresponds to the JSON property `description`
1360
+ # @return [String]
1361
+ attr_accessor :description
1362
+
1363
+ # Required. Resource name for the Access Level. The `short_name` component must
1364
+ # begin with a letter and only include alphanumeric and '_'. Format: `
1365
+ # accessPolicies/`policy_id`/accessLevels/`short_name``. The maximum length of
1366
+ # the `short_name` component is 50 characters.
1367
+ # Corresponds to the JSON property `name`
1368
+ # @return [String]
1369
+ attr_accessor :name
1370
+
1371
+ # Human readable title. Must be unique within the Policy.
1372
+ # Corresponds to the JSON property `title`
1373
+ # @return [String]
1374
+ attr_accessor :title
1375
+
1376
+ def initialize(**args)
1377
+ update!(**args)
1378
+ end
1379
+
1380
+ # Update properties of this object
1381
+ def update!(**args)
1382
+ @basic = args[:basic] if args.key?(:basic)
1383
+ @custom = args[:custom] if args.key?(:custom)
1384
+ @description = args[:description] if args.key?(:description)
1385
+ @name = args[:name] if args.key?(:name)
1386
+ @title = args[:title] if args.key?(:title)
1387
+ end
1388
+ end
1389
+
1390
+ # `AccessPolicy` is a container for `AccessLevels` (which define the necessary
1391
+ # attributes to use Google Cloud services) and `ServicePerimeters` (which define
1392
+ # regions of services able to freely pass data within a perimeter). An access
1393
+ # policy is globally visible within an organization, and the restrictions it
1394
+ # specifies apply to all projects within an organization.
1395
+ class GoogleIdentityAccesscontextmanagerV1AccessPolicy
1396
+ include Google::Apis::Core::Hashable
1397
+
1398
+ # Output only. An opaque identifier for the current version of the `AccessPolicy`
1399
+ # . This will always be a strongly validated etag, meaning that two Access
1400
+ # Polices will be identical if and only if their etags are identical. Clients
1401
+ # should not expect this to be in any specific format.
1402
+ # Corresponds to the JSON property `etag`
1403
+ # @return [String]
1404
+ attr_accessor :etag
1405
+
1406
+ # Output only. Resource name of the `AccessPolicy`. Format: `accessPolicies/`
1407
+ # policy_id``
1408
+ # Corresponds to the JSON property `name`
1409
+ # @return [String]
1410
+ attr_accessor :name
1411
+
1412
+ # Required. The parent of this `AccessPolicy` in the Cloud Resource Hierarchy.
1413
+ # Currently immutable once created. Format: `organizations/`organization_id``
1414
+ # Corresponds to the JSON property `parent`
1415
+ # @return [String]
1416
+ attr_accessor :parent
1417
+
1418
+ # Required. Human readable title. Does not affect behavior.
1419
+ # Corresponds to the JSON property `title`
1420
+ # @return [String]
1421
+ attr_accessor :title
1422
+
1423
+ def initialize(**args)
1424
+ update!(**args)
1425
+ end
1426
+
1427
+ # Update properties of this object
1428
+ def update!(**args)
1429
+ @etag = args[:etag] if args.key?(:etag)
1430
+ @name = args[:name] if args.key?(:name)
1431
+ @parent = args[:parent] if args.key?(:parent)
1432
+ @title = args[:title] if args.key?(:title)
1433
+ end
1434
+ end
1435
+
1436
+ # Identification for an API Operation.
1437
+ class GoogleIdentityAccesscontextmanagerV1ApiOperation
1438
+ include Google::Apis::Core::Hashable
1439
+
1440
+ # API methods or permissions to allow. Method or permission must belong to the
1441
+ # service specified by `service_name` field. A single MethodSelector entry with `
1442
+ # *` specified for the `method` field will allow all methods AND permissions for
1443
+ # the service specified in `service_name`.
1444
+ # Corresponds to the JSON property `methodSelectors`
1445
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1MethodSelector>]
1446
+ attr_accessor :method_selectors
1447
+
1448
+ # The name of the API whose methods or permissions the IngressPolicy or
1449
+ # EgressPolicy want to allow. A single ApiOperation with `service_name` field
1450
+ # set to `*` will allow all methods AND permissions for all services.
1451
+ # Corresponds to the JSON property `serviceName`
1452
+ # @return [String]
1453
+ attr_accessor :service_name
1454
+
1455
+ def initialize(**args)
1456
+ update!(**args)
1457
+ end
1458
+
1459
+ # Update properties of this object
1460
+ def update!(**args)
1461
+ @method_selectors = args[:method_selectors] if args.key?(:method_selectors)
1462
+ @service_name = args[:service_name] if args.key?(:service_name)
1463
+ end
1464
+ end
1465
+
1466
+ # `BasicLevel` is an `AccessLevel` using a set of recommended features.
1467
+ class GoogleIdentityAccesscontextmanagerV1BasicLevel
1468
+ include Google::Apis::Core::Hashable
1469
+
1470
+ # How the `conditions` list should be combined to determine if a request is
1471
+ # granted this `AccessLevel`. If AND is used, each `Condition` in `conditions`
1472
+ # must be satisfied for the `AccessLevel` to be applied. If OR is used, at least
1473
+ # one `Condition` in `conditions` must be satisfied for the `AccessLevel` to be
1474
+ # applied. Default behavior is AND.
1475
+ # Corresponds to the JSON property `combiningFunction`
1476
+ # @return [String]
1477
+ attr_accessor :combining_function
1478
+
1479
+ # Required. A list of requirements for the `AccessLevel` to be granted.
1480
+ # Corresponds to the JSON property `conditions`
1481
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1Condition>]
1482
+ attr_accessor :conditions
1483
+
1484
+ def initialize(**args)
1485
+ update!(**args)
1486
+ end
1487
+
1488
+ # Update properties of this object
1489
+ def update!(**args)
1490
+ @combining_function = args[:combining_function] if args.key?(:combining_function)
1491
+ @conditions = args[:conditions] if args.key?(:conditions)
1492
+ end
1493
+ end
1494
+
1495
+ # A condition necessary for an `AccessLevel` to be granted. The Condition is an
1496
+ # AND over its fields. So a Condition is true if: 1) the request IP is from one
1497
+ # of the listed subnetworks AND 2) the originating device complies with the
1498
+ # listed device policy AND 3) all listed access levels are granted AND 4) the
1499
+ # request was sent at a time allowed by the DateTimeRestriction.
1500
+ class GoogleIdentityAccesscontextmanagerV1Condition
1501
+ include Google::Apis::Core::Hashable
1502
+
1503
+ # `DevicePolicy` specifies device specific restrictions necessary to acquire a
1504
+ # given access level. A `DevicePolicy` specifies requirements for requests from
1505
+ # devices to be granted access levels, it does not do any enforcement on the
1506
+ # device. `DevicePolicy` acts as an AND over all specified fields, and each
1507
+ # repeated field is an OR over its elements. Any unset fields are ignored. For
1508
+ # example, if the proto is ` os_type : DESKTOP_WINDOWS, os_type : DESKTOP_LINUX,
1509
+ # encryption_status: ENCRYPTED`, then the DevicePolicy will be true for requests
1510
+ # originating from encrypted Linux desktops and encrypted Windows desktops.
1511
+ # Corresponds to the JSON property `devicePolicy`
1512
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1DevicePolicy]
1513
+ attr_accessor :device_policy
1514
+
1515
+ # CIDR block IP subnetwork specification. May be IPv4 or IPv6. Note that for a
1516
+ # CIDR IP address block, the specified IP address portion must be properly
1517
+ # truncated (i.e. all the host bits must be zero) or the input is considered
1518
+ # malformed. For example, "192.0.2.0/24" is accepted but "192.0.2.1/24" is not.
1519
+ # Similarly, for IPv6, "2001:db8::/32" is accepted whereas "2001:db8::1/32" is
1520
+ # not. The originating IP of a request must be in one of the listed subnets in
1521
+ # order for this Condition to be true. If empty, all IP addresses are allowed.
1522
+ # Corresponds to the JSON property `ipSubnetworks`
1523
+ # @return [Array<String>]
1524
+ attr_accessor :ip_subnetworks
1525
+
1526
+ # The request must be made by one of the provided user or service accounts.
1527
+ # Groups are not supported. Syntax: `user:`emailid`` `serviceAccount:`emailid``
1528
+ # If not specified, a request may come from any user.
1529
+ # Corresponds to the JSON property `members`
1530
+ # @return [Array<String>]
1531
+ attr_accessor :members
1532
+
1533
+ # Whether to negate the Condition. If true, the Condition becomes a NAND over
1534
+ # its non-empty fields, each field must be false for the Condition overall to be
1535
+ # satisfied. Defaults to false.
1536
+ # Corresponds to the JSON property `negate`
1537
+ # @return [Boolean]
1538
+ attr_accessor :negate
1539
+ alias_method :negate?, :negate
1540
+
1541
+ # The request must originate from one of the provided countries/regions. Must be
1542
+ # valid ISO 3166-1 alpha-2 codes.
1543
+ # Corresponds to the JSON property `regions`
1544
+ # @return [Array<String>]
1545
+ attr_accessor :regions
1546
+
1547
+ # A list of other access levels defined in the same `Policy`, referenced by
1548
+ # resource name. Referencing an `AccessLevel` which does not exist is an error.
1549
+ # All access levels listed must be granted for the Condition to be true. Example:
1550
+ # "`accessPolicies/MY_POLICY/accessLevels/LEVEL_NAME"`
1551
+ # Corresponds to the JSON property `requiredAccessLevels`
1552
+ # @return [Array<String>]
1553
+ attr_accessor :required_access_levels
1554
+
1555
+ def initialize(**args)
1556
+ update!(**args)
1557
+ end
1558
+
1559
+ # Update properties of this object
1560
+ def update!(**args)
1561
+ @device_policy = args[:device_policy] if args.key?(:device_policy)
1562
+ @ip_subnetworks = args[:ip_subnetworks] if args.key?(:ip_subnetworks)
1563
+ @members = args[:members] if args.key?(:members)
1564
+ @negate = args[:negate] if args.key?(:negate)
1565
+ @regions = args[:regions] if args.key?(:regions)
1566
+ @required_access_levels = args[:required_access_levels] if args.key?(:required_access_levels)
1567
+ end
1568
+ end
1569
+
1570
+ # `CustomLevel` is an `AccessLevel` using the Cloud Common Expression Language
1571
+ # to represent the necessary conditions for the level to apply to a request. See
1572
+ # CEL spec at: https://github.com/google/cel-spec
1573
+ class GoogleIdentityAccesscontextmanagerV1CustomLevel
1574
+ include Google::Apis::Core::Hashable
1575
+
1576
+ # Represents a textual expression in the Common Expression Language (CEL) syntax.
1577
+ # CEL is a C-like expression language. The syntax and semantics of CEL are
1578
+ # documented at https://github.com/google/cel-spec. Example (Comparison): title:
1579
+ # "Summary size limit" description: "Determines if a summary is less than 100
1580
+ # chars" expression: "document.summary.size() < 100" Example (Equality): title: "
1581
+ # Requestor is owner" description: "Determines if requestor is the document
1582
+ # owner" expression: "document.owner == request.auth.claims.email" Example (
1583
+ # Logic): title: "Public documents" description: "Determine whether the document
1584
+ # should be publicly visible" expression: "document.type != 'private' &&
1585
+ # document.type != 'internal'" Example (Data Manipulation): title: "Notification
1586
+ # string" description: "Create a notification string with a timestamp."
1587
+ # expression: "'New message received at ' + string(document.create_time)" The
1588
+ # exact variables and functions that may be referenced within an expression are
1589
+ # determined by the service that evaluates it. See the service documentation for
1590
+ # additional information.
1591
+ # Corresponds to the JSON property `expr`
1592
+ # @return [Google::Apis::CloudassetV1::Expr]
1593
+ attr_accessor :expr
1594
+
1595
+ def initialize(**args)
1596
+ update!(**args)
1597
+ end
1598
+
1599
+ # Update properties of this object
1600
+ def update!(**args)
1601
+ @expr = args[:expr] if args.key?(:expr)
1602
+ end
1603
+ end
1604
+
1605
+ # `DevicePolicy` specifies device specific restrictions necessary to acquire a
1606
+ # given access level. A `DevicePolicy` specifies requirements for requests from
1607
+ # devices to be granted access levels, it does not do any enforcement on the
1608
+ # device. `DevicePolicy` acts as an AND over all specified fields, and each
1609
+ # repeated field is an OR over its elements. Any unset fields are ignored. For
1610
+ # example, if the proto is ` os_type : DESKTOP_WINDOWS, os_type : DESKTOP_LINUX,
1611
+ # encryption_status: ENCRYPTED`, then the DevicePolicy will be true for requests
1612
+ # originating from encrypted Linux desktops and encrypted Windows desktops.
1613
+ class GoogleIdentityAccesscontextmanagerV1DevicePolicy
1614
+ include Google::Apis::Core::Hashable
1615
+
1616
+ # Allowed device management levels, an empty list allows all management levels.
1617
+ # Corresponds to the JSON property `allowedDeviceManagementLevels`
1618
+ # @return [Array<String>]
1619
+ attr_accessor :allowed_device_management_levels
1620
+
1621
+ # Allowed encryptions statuses, an empty list allows all statuses.
1622
+ # Corresponds to the JSON property `allowedEncryptionStatuses`
1623
+ # @return [Array<String>]
1624
+ attr_accessor :allowed_encryption_statuses
1625
+
1626
+ # Allowed OS versions, an empty list allows all types and all versions.
1627
+ # Corresponds to the JSON property `osConstraints`
1628
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1OsConstraint>]
1629
+ attr_accessor :os_constraints
1630
+
1631
+ # Whether the device needs to be approved by the customer admin.
1632
+ # Corresponds to the JSON property `requireAdminApproval`
1633
+ # @return [Boolean]
1634
+ attr_accessor :require_admin_approval
1635
+ alias_method :require_admin_approval?, :require_admin_approval
1636
+
1637
+ # Whether the device needs to be corp owned.
1638
+ # Corresponds to the JSON property `requireCorpOwned`
1639
+ # @return [Boolean]
1640
+ attr_accessor :require_corp_owned
1641
+ alias_method :require_corp_owned?, :require_corp_owned
1642
+
1643
+ # Whether or not screenlock is required for the DevicePolicy to be true.
1644
+ # Defaults to `false`.
1645
+ # Corresponds to the JSON property `requireScreenlock`
1646
+ # @return [Boolean]
1647
+ attr_accessor :require_screenlock
1648
+ alias_method :require_screenlock?, :require_screenlock
1649
+
1650
+ def initialize(**args)
1651
+ update!(**args)
1652
+ end
1653
+
1654
+ # Update properties of this object
1655
+ def update!(**args)
1656
+ @allowed_device_management_levels = args[:allowed_device_management_levels] if args.key?(:allowed_device_management_levels)
1657
+ @allowed_encryption_statuses = args[:allowed_encryption_statuses] if args.key?(:allowed_encryption_statuses)
1658
+ @os_constraints = args[:os_constraints] if args.key?(:os_constraints)
1659
+ @require_admin_approval = args[:require_admin_approval] if args.key?(:require_admin_approval)
1660
+ @require_corp_owned = args[:require_corp_owned] if args.key?(:require_corp_owned)
1661
+ @require_screenlock = args[:require_screenlock] if args.key?(:require_screenlock)
1662
+ end
1663
+ end
1664
+
1665
+ # Defines the conditions under which an EgressPolicy matches a request.
1666
+ # Conditions based on information about the source of the request. Note that if
1667
+ # the destination of the request is protected by a ServicePerimeter, then that
1668
+ # ServicePerimeter must have an IngressPolicy which allows access in order for
1669
+ # this request to succeed.
1670
+ class GoogleIdentityAccesscontextmanagerV1EgressFrom
1671
+ include Google::Apis::Core::Hashable
1672
+
1673
+ # A list of identities that are allowed access through this [EgressPolicy].
1674
+ # Should be in the format of email address. The email address should represent
1675
+ # individual user or service account only.
1676
+ # Corresponds to the JSON property `identities`
1677
+ # @return [Array<String>]
1678
+ attr_accessor :identities
1679
+
1680
+ # Specifies the type of identities that are allowed access to outside the
1681
+ # perimeter. If left unspecified, then members of `identities` field will be
1682
+ # allowed access.
1683
+ # Corresponds to the JSON property `identityType`
1684
+ # @return [String]
1685
+ attr_accessor :identity_type
1686
+
1687
+ def initialize(**args)
1688
+ update!(**args)
1689
+ end
1690
+
1691
+ # Update properties of this object
1692
+ def update!(**args)
1693
+ @identities = args[:identities] if args.key?(:identities)
1694
+ @identity_type = args[:identity_type] if args.key?(:identity_type)
1695
+ end
1696
+ end
1697
+
1698
+ # Policy for egress from perimeter. EgressPolicies match requests based on `
1699
+ # egress_from` and `egress_to` stanzas. For an EgressPolicy to match, both `
1700
+ # egress_from` and `egress_to` stanzas must be matched. If an EgressPolicy
1701
+ # matches a request, the request is allowed to span the ServicePerimeter
1702
+ # boundary. For example, an EgressPolicy can be used to allow VMs on networks
1703
+ # within the ServicePerimeter to access a defined set of projects outside the
1704
+ # perimeter in certain contexts (e.g. to read data from a Cloud Storage bucket
1705
+ # or query against a BigQuery dataset). EgressPolicies are concerned with the *
1706
+ # resources* that a request relates as well as the API services and API actions
1707
+ # being used. They do not related to the direction of data movement. More
1708
+ # detailed documentation for this concept can be found in the descriptions of
1709
+ # EgressFrom and EgressTo.
1710
+ class GoogleIdentityAccesscontextmanagerV1EgressPolicy
1711
+ include Google::Apis::Core::Hashable
1712
+
1713
+ # Defines the conditions under which an EgressPolicy matches a request.
1714
+ # Conditions based on information about the source of the request. Note that if
1715
+ # the destination of the request is protected by a ServicePerimeter, then that
1716
+ # ServicePerimeter must have an IngressPolicy which allows access in order for
1717
+ # this request to succeed.
1718
+ # Corresponds to the JSON property `egressFrom`
1719
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1EgressFrom]
1720
+ attr_accessor :egress_from
1721
+
1722
+ # Defines the conditions under which an EgressPolicy matches a request.
1723
+ # Conditions are based on information about the ApiOperation intended to be
1724
+ # performed on the `resources` specified. Note that if the destination of the
1725
+ # request is protected by a ServicePerimeter, then that ServicePerimeter must
1726
+ # have an IngressPolicy which allows access in order for this request to succeed.
1727
+ # Corresponds to the JSON property `egressTo`
1728
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1EgressTo]
1729
+ attr_accessor :egress_to
1730
+
1731
+ def initialize(**args)
1732
+ update!(**args)
1733
+ end
1734
+
1735
+ # Update properties of this object
1736
+ def update!(**args)
1737
+ @egress_from = args[:egress_from] if args.key?(:egress_from)
1738
+ @egress_to = args[:egress_to] if args.key?(:egress_to)
1739
+ end
1740
+ end
1741
+
1742
+ # Defines the conditions under which an EgressPolicy matches a request.
1743
+ # Conditions are based on information about the ApiOperation intended to be
1744
+ # performed on the `resources` specified. Note that if the destination of the
1745
+ # request is protected by a ServicePerimeter, then that ServicePerimeter must
1746
+ # have an IngressPolicy which allows access in order for this request to succeed.
1747
+ class GoogleIdentityAccesscontextmanagerV1EgressTo
1748
+ include Google::Apis::Core::Hashable
1749
+
1750
+ # A list of ApiOperations that this egress rule applies to. A request matches if
1751
+ # it contains an operation/service in this list.
1752
+ # Corresponds to the JSON property `operations`
1753
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1ApiOperation>]
1754
+ attr_accessor :operations
1755
+
1756
+ # A list of resources, currently only projects in the form `projects/`, that
1757
+ # match this to stanza. A request matches if it contains a resource in this list.
1758
+ # If `*` is specified for resources, then this EgressTo rule will authorize
1759
+ # access to all resources outside the perimeter.
1760
+ # Corresponds to the JSON property `resources`
1761
+ # @return [Array<String>]
1762
+ attr_accessor :resources
1763
+
1764
+ def initialize(**args)
1765
+ update!(**args)
1766
+ end
1767
+
1768
+ # Update properties of this object
1769
+ def update!(**args)
1770
+ @operations = args[:operations] if args.key?(:operations)
1771
+ @resources = args[:resources] if args.key?(:resources)
1772
+ end
1773
+ end
1774
+
1775
+ # Defines the conditions under which an IngressPolicy matches a request.
1776
+ # Conditions are based on information about the source of the request.
1777
+ class GoogleIdentityAccesscontextmanagerV1IngressFrom
1778
+ include Google::Apis::Core::Hashable
1779
+
1780
+ # A list of identities that are allowed access through this ingress policy.
1781
+ # Should be in the format of email address. The email address should represent
1782
+ # individual user or service account only.
1783
+ # Corresponds to the JSON property `identities`
1784
+ # @return [Array<String>]
1785
+ attr_accessor :identities
1786
+
1787
+ # Specifies the type of identities that are allowed access from outside the
1788
+ # perimeter. If left unspecified, then members of `identities` field will be
1789
+ # allowed access.
1790
+ # Corresponds to the JSON property `identityType`
1791
+ # @return [String]
1792
+ attr_accessor :identity_type
1793
+
1794
+ # Sources that this IngressPolicy authorizes access from.
1795
+ # Corresponds to the JSON property `sources`
1796
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1IngressSource>]
1797
+ attr_accessor :sources
1798
+
1799
+ def initialize(**args)
1800
+ update!(**args)
1801
+ end
1802
+
1803
+ # Update properties of this object
1804
+ def update!(**args)
1805
+ @identities = args[:identities] if args.key?(:identities)
1806
+ @identity_type = args[:identity_type] if args.key?(:identity_type)
1807
+ @sources = args[:sources] if args.key?(:sources)
1808
+ end
1809
+ end
1810
+
1811
+ # Policy for ingress into ServicePerimeter. IngressPolicies match requests based
1812
+ # on `ingress_from` and `ingress_to` stanzas. For an ingress policy to match,
1813
+ # both the `ingress_from` and `ingress_to` stanzas must be matched. If an
1814
+ # IngressPolicy matches a request, the request is allowed through the perimeter
1815
+ # boundary from outside the perimeter. For example, access from the internet can
1816
+ # be allowed either based on an AccessLevel or, for traffic hosted on Google
1817
+ # Cloud, the project of the source network. For access from private networks,
1818
+ # using the project of the hosting network is required. Individual ingress
1819
+ # policies can be limited by restricting which services and/or actions they
1820
+ # match using the `ingress_to` field.
1821
+ class GoogleIdentityAccesscontextmanagerV1IngressPolicy
1822
+ include Google::Apis::Core::Hashable
1823
+
1824
+ # Defines the conditions under which an IngressPolicy matches a request.
1825
+ # Conditions are based on information about the source of the request.
1826
+ # Corresponds to the JSON property `ingressFrom`
1827
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1IngressFrom]
1828
+ attr_accessor :ingress_from
1829
+
1830
+ # Defines the conditions under which an IngressPolicy matches a request.
1831
+ # Conditions are based on information about the ApiOperation intended to be
1832
+ # performed on the destination of the request.
1833
+ # Corresponds to the JSON property `ingressTo`
1834
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1IngressTo]
1835
+ attr_accessor :ingress_to
1836
+
1837
+ def initialize(**args)
1838
+ update!(**args)
1839
+ end
1840
+
1841
+ # Update properties of this object
1842
+ def update!(**args)
1843
+ @ingress_from = args[:ingress_from] if args.key?(:ingress_from)
1844
+ @ingress_to = args[:ingress_to] if args.key?(:ingress_to)
1845
+ end
1846
+ end
1847
+
1848
+ # The source that IngressPolicy authorizes access from.
1849
+ class GoogleIdentityAccesscontextmanagerV1IngressSource
1850
+ include Google::Apis::Core::Hashable
1851
+
1852
+ # An AccessLevel resource name that allow resources within the ServicePerimeters
1853
+ # to be accessed from the internet. AccessLevels listed must be in the same
1854
+ # policy as this ServicePerimeter. Referencing a nonexistent AccessLevel will
1855
+ # cause an error. If no AccessLevel names are listed, resources within the
1856
+ # perimeter can only be accessed via Google Cloud calls with request origins
1857
+ # within the perimeter. Example: `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL`
1858
+ # . If `*` is specified, then all IngressSources will be allowed.
1859
+ # Corresponds to the JSON property `accessLevel`
1860
+ # @return [String]
1861
+ attr_accessor :access_level
1862
+
1863
+ # A Google Cloud resource that is allowed to ingress the perimeter. Requests
1864
+ # from these resources will be allowed to access perimeter data. Currently only
1865
+ # projects are allowed. Format: `projects/`project_number`` The project may be
1866
+ # in any Google Cloud organization, not just the organization that the perimeter
1867
+ # is defined in. `*` is not allowed, the case of allowing all Google Cloud
1868
+ # resources only is not supported.
1869
+ # Corresponds to the JSON property `resource`
1870
+ # @return [String]
1871
+ attr_accessor :resource
1872
+
1873
+ def initialize(**args)
1874
+ update!(**args)
1875
+ end
1876
+
1877
+ # Update properties of this object
1878
+ def update!(**args)
1879
+ @access_level = args[:access_level] if args.key?(:access_level)
1880
+ @resource = args[:resource] if args.key?(:resource)
1881
+ end
1882
+ end
1883
+
1884
+ # Defines the conditions under which an IngressPolicy matches a request.
1885
+ # Conditions are based on information about the ApiOperation intended to be
1886
+ # performed on the destination of the request.
1887
+ class GoogleIdentityAccesscontextmanagerV1IngressTo
1888
+ include Google::Apis::Core::Hashable
1889
+
1890
+ # A list of ApiOperations the sources specified in corresponding IngressFrom are
1891
+ # allowed to perform in this ServicePerimeter.
1892
+ # Corresponds to the JSON property `operations`
1893
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1ApiOperation>]
1894
+ attr_accessor :operations
1895
+
1896
+ # A list of resources, currently only projects in the form `projects/`,
1897
+ # protected by this ServicePerimeter that are allowed to be accessed by sources
1898
+ # defined in the corresponding IngressFrom. A request matches if it contains a
1899
+ # resource in this list. If `*` is specified for resources, then this IngressTo
1900
+ # rule will authorize access to all resources inside the perimeter, provided
1901
+ # that the request also matches the `operations` field.
1902
+ # Corresponds to the JSON property `resources`
1903
+ # @return [Array<String>]
1904
+ attr_accessor :resources
1905
+
1906
+ def initialize(**args)
1907
+ update!(**args)
1908
+ end
1909
+
1910
+ # Update properties of this object
1911
+ def update!(**args)
1912
+ @operations = args[:operations] if args.key?(:operations)
1913
+ @resources = args[:resources] if args.key?(:resources)
1914
+ end
1915
+ end
1916
+
1917
+ # An allowed method or permission of a service specified in ApiOperation.
1918
+ class GoogleIdentityAccesscontextmanagerV1MethodSelector
1919
+ include Google::Apis::Core::Hashable
1920
+
1921
+ # Value for `method` should be a valid method name for the corresponding `
1922
+ # service_name` in ApiOperation. If `*` used as value for `method`, then ALL
1923
+ # methods and permissions are allowed.
1924
+ # Corresponds to the JSON property `method`
1925
+ # @return [String]
1926
+ attr_accessor :method_prop
1927
+
1928
+ # Value for `permission` should be a valid Cloud IAM permission for the
1929
+ # corresponding `service_name` in ApiOperation.
1930
+ # Corresponds to the JSON property `permission`
1931
+ # @return [String]
1932
+ attr_accessor :permission
1933
+
1934
+ def initialize(**args)
1935
+ update!(**args)
1936
+ end
1937
+
1938
+ # Update properties of this object
1939
+ def update!(**args)
1940
+ @method_prop = args[:method_prop] if args.key?(:method_prop)
1941
+ @permission = args[:permission] if args.key?(:permission)
1942
+ end
1943
+ end
1944
+
1945
+ # A restriction on the OS type and version of devices making requests.
1946
+ class GoogleIdentityAccesscontextmanagerV1OsConstraint
1947
+ include Google::Apis::Core::Hashable
1948
+
1949
+ # The minimum allowed OS version. If not set, any version of this OS satisfies
1950
+ # the constraint. Format: `"major.minor.patch"`. Examples: `"10.5.301"`, `"9.2.1"
1951
+ # `.
1952
+ # Corresponds to the JSON property `minimumVersion`
1953
+ # @return [String]
1954
+ attr_accessor :minimum_version
1955
+
1956
+ # Required. The allowed OS type.
1957
+ # Corresponds to the JSON property `osType`
1958
+ # @return [String]
1959
+ attr_accessor :os_type
1960
+
1961
+ # Only allows requests from devices with a verified Chrome OS. Verifications
1962
+ # includes requirements that the device is enterprise-managed, conformant to
1963
+ # domain policies, and the caller has permission to call the API targeted by the
1964
+ # request.
1965
+ # Corresponds to the JSON property `requireVerifiedChromeOs`
1966
+ # @return [Boolean]
1967
+ attr_accessor :require_verified_chrome_os
1968
+ alias_method :require_verified_chrome_os?, :require_verified_chrome_os
1969
+
1970
+ def initialize(**args)
1971
+ update!(**args)
1972
+ end
1973
+
1974
+ # Update properties of this object
1975
+ def update!(**args)
1976
+ @minimum_version = args[:minimum_version] if args.key?(:minimum_version)
1977
+ @os_type = args[:os_type] if args.key?(:os_type)
1978
+ @require_verified_chrome_os = args[:require_verified_chrome_os] if args.key?(:require_verified_chrome_os)
1979
+ end
1980
+ end
1981
+
1982
+ # `ServicePerimeter` describes a set of Google Cloud resources which can freely
1983
+ # import and export data amongst themselves, but not export outside of the `
1984
+ # ServicePerimeter`. If a request with a source within this `ServicePerimeter`
1985
+ # has a target outside of the `ServicePerimeter`, the request will be blocked.
1986
+ # Otherwise the request is allowed. There are two types of Service Perimeter -
1987
+ # Regular and Bridge. Regular Service Perimeters cannot overlap, a single Google
1988
+ # Cloud project can only belong to a single regular Service Perimeter. Service
1989
+ # Perimeter Bridges can contain only Google Cloud projects as members, a single
1990
+ # Google Cloud project may belong to multiple Service Perimeter Bridges.
1991
+ class GoogleIdentityAccesscontextmanagerV1ServicePerimeter
1992
+ include Google::Apis::Core::Hashable
1993
+
1994
+ # Description of the `ServicePerimeter` and its use. Does not affect behavior.
1995
+ # Corresponds to the JSON property `description`
1996
+ # @return [String]
1997
+ attr_accessor :description
1998
+
1999
+ # Required. Resource name for the ServicePerimeter. The `short_name` component
2000
+ # must begin with a letter and only include alphanumeric and '_'. Format: `
2001
+ # accessPolicies/`policy_id`/servicePerimeters/`short_name``
2002
+ # Corresponds to the JSON property `name`
2003
+ # @return [String]
2004
+ attr_accessor :name
2005
+
2006
+ # Perimeter type indicator. A single project is allowed to be a member of single
2007
+ # regular perimeter, but multiple service perimeter bridges. A project cannot be
2008
+ # a included in a perimeter bridge without being included in regular perimeter.
2009
+ # For perimeter bridges, the restricted service list as well as access level
2010
+ # lists must be empty.
2011
+ # Corresponds to the JSON property `perimeterType`
2012
+ # @return [String]
2013
+ attr_accessor :perimeter_type
2014
+
2015
+ # `ServicePerimeterConfig` specifies a set of Google Cloud resources that
2016
+ # describe specific Service Perimeter configuration.
2017
+ # Corresponds to the JSON property `spec`
2018
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig]
2019
+ attr_accessor :spec
2020
+
2021
+ # `ServicePerimeterConfig` specifies a set of Google Cloud resources that
2022
+ # describe specific Service Perimeter configuration.
2023
+ # Corresponds to the JSON property `status`
2024
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig]
2025
+ attr_accessor :status
2026
+
2027
+ # Human readable title. Must be unique within the Policy.
2028
+ # Corresponds to the JSON property `title`
2029
+ # @return [String]
2030
+ attr_accessor :title
2031
+
2032
+ # Use explicit dry run spec flag. Ordinarily, a dry-run spec implicitly exists
2033
+ # for all Service Perimeters, and that spec is identical to the status for those
2034
+ # Service Perimeters. When this flag is set, it inhibits the generation of the
2035
+ # implicit spec, thereby allowing the user to explicitly provide a configuration
2036
+ # ("spec") to use in a dry-run version of the Service Perimeter. This allows the
2037
+ # user to test changes to the enforced config ("status") without actually
2038
+ # enforcing them. This testing is done through analyzing the differences between
2039
+ # currently enforced and suggested restrictions. use_explicit_dry_run_spec must
2040
+ # bet set to True if any of the fields in the spec are set to non-default values.
2041
+ # Corresponds to the JSON property `useExplicitDryRunSpec`
2042
+ # @return [Boolean]
2043
+ attr_accessor :use_explicit_dry_run_spec
2044
+ alias_method :use_explicit_dry_run_spec?, :use_explicit_dry_run_spec
2045
+
2046
+ def initialize(**args)
2047
+ update!(**args)
2048
+ end
2049
+
2050
+ # Update properties of this object
2051
+ def update!(**args)
2052
+ @description = args[:description] if args.key?(:description)
2053
+ @name = args[:name] if args.key?(:name)
2054
+ @perimeter_type = args[:perimeter_type] if args.key?(:perimeter_type)
2055
+ @spec = args[:spec] if args.key?(:spec)
2056
+ @status = args[:status] if args.key?(:status)
2057
+ @title = args[:title] if args.key?(:title)
2058
+ @use_explicit_dry_run_spec = args[:use_explicit_dry_run_spec] if args.key?(:use_explicit_dry_run_spec)
2059
+ end
2060
+ end
2061
+
2062
+ # `ServicePerimeterConfig` specifies a set of Google Cloud resources that
2063
+ # describe specific Service Perimeter configuration.
2064
+ class GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig
2065
+ include Google::Apis::Core::Hashable
2066
+
2067
+ # A list of `AccessLevel` resource names that allow resources within the `
2068
+ # ServicePerimeter` to be accessed from the internet. `AccessLevels` listed must
2069
+ # be in the same policy as this `ServicePerimeter`. Referencing a nonexistent `
2070
+ # AccessLevel` is a syntax error. If no `AccessLevel` names are listed,
2071
+ # resources within the perimeter can only be accessed via Google Cloud calls
2072
+ # with request origins within the perimeter. Example: `"accessPolicies/MY_POLICY/
2073
+ # accessLevels/MY_LEVEL"`. For Service Perimeter Bridge, must be empty.
2074
+ # Corresponds to the JSON property `accessLevels`
2075
+ # @return [Array<String>]
2076
+ attr_accessor :access_levels
2077
+
2078
+ # List of EgressPolicies to apply to the perimeter. A perimeter may have
2079
+ # multiple EgressPolicies, each of which is evaluated separately. Access is
2080
+ # granted if any EgressPolicy grants it. Must be empty for a perimeter bridge.
2081
+ # Corresponds to the JSON property `egressPolicies`
2082
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1EgressPolicy>]
2083
+ attr_accessor :egress_policies
2084
+
2085
+ # List of IngressPolicies to apply to the perimeter. A perimeter may have
2086
+ # multiple IngressPolicies, each of which is evaluated separately. Access is
2087
+ # granted if any Ingress Policy grants it. Must be empty for a perimeter bridge.
2088
+ # Corresponds to the JSON property `ingressPolicies`
2089
+ # @return [Array<Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1IngressPolicy>]
2090
+ attr_accessor :ingress_policies
2091
+
2092
+ # A list of Google Cloud resources that are inside of the service perimeter.
2093
+ # Currently only projects are allowed. Format: `projects/`project_number``
2094
+ # Corresponds to the JSON property `resources`
2095
+ # @return [Array<String>]
2096
+ attr_accessor :resources
2097
+
2098
+ # Google Cloud services that are subject to the Service Perimeter restrictions.
2099
+ # For example, if `storage.googleapis.com` is specified, access to the storage
2100
+ # buckets inside the perimeter must meet the perimeter's access restrictions.
2101
+ # Corresponds to the JSON property `restrictedServices`
2102
+ # @return [Array<String>]
2103
+ attr_accessor :restricted_services
2104
+
2105
+ # Specifies how APIs are allowed to communicate within the Service Perimeter.
2106
+ # Corresponds to the JSON property `vpcAccessibleServices`
2107
+ # @return [Google::Apis::CloudassetV1::GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices]
2108
+ attr_accessor :vpc_accessible_services
2109
+
2110
+ def initialize(**args)
2111
+ update!(**args)
2112
+ end
2113
+
2114
+ # Update properties of this object
2115
+ def update!(**args)
2116
+ @access_levels = args[:access_levels] if args.key?(:access_levels)
2117
+ @egress_policies = args[:egress_policies] if args.key?(:egress_policies)
2118
+ @ingress_policies = args[:ingress_policies] if args.key?(:ingress_policies)
2119
+ @resources = args[:resources] if args.key?(:resources)
2120
+ @restricted_services = args[:restricted_services] if args.key?(:restricted_services)
2121
+ @vpc_accessible_services = args[:vpc_accessible_services] if args.key?(:vpc_accessible_services)
2122
+ end
2123
+ end
2124
+
2125
+ # Specifies how APIs are allowed to communicate within the Service Perimeter.
2126
+ class GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices
2127
+ include Google::Apis::Core::Hashable
2128
+
2129
+ # The list of APIs usable within the Service Perimeter. Must be empty unless '
2130
+ # enable_restriction' is True. You can specify a list of individual services, as
2131
+ # well as include the 'RESTRICTED-SERVICES' value, which automatically includes
2132
+ # all of the services protected by the perimeter.
2133
+ # Corresponds to the JSON property `allowedServices`
2134
+ # @return [Array<String>]
2135
+ attr_accessor :allowed_services
2136
+
2137
+ # Whether to restrict API calls within the Service Perimeter to the list of APIs
2138
+ # specified in 'allowed_services'.
2139
+ # Corresponds to the JSON property `enableRestriction`
2140
+ # @return [Boolean]
2141
+ attr_accessor :enable_restriction
2142
+ alias_method :enable_restriction?, :enable_restriction
2143
+
2144
+ def initialize(**args)
2145
+ update!(**args)
2146
+ end
2147
+
2148
+ # Update properties of this object
2149
+ def update!(**args)
2150
+ @allowed_services = args[:allowed_services] if args.key?(:allowed_services)
2151
+ @enable_restriction = args[:enable_restriction] if args.key?(:enable_restriction)
2152
+ end
2153
+ end
2154
+
2155
+ # An analysis message to group the query and results.
2156
+ class IamPolicyAnalysis
2157
+ include Google::Apis::Core::Hashable
2158
+
2159
+ # ## LINT.IfChange Keep in sync with ## logs/proto/cloud_asset_inventory/
2160
+ # iam_policy_analyzer_log.proto IAM policy analysis query message.
2161
+ # Corresponds to the JSON property `analysisQuery`
2162
+ # @return [Google::Apis::CloudassetV1::IamPolicyAnalysisQuery]
2163
+ attr_accessor :analysis_query
2164
+
2165
+ # A list of IamPolicyAnalysisResult that matches the analysis query, or empty if
2166
+ # no result is found.
2167
+ # Corresponds to the JSON property `analysisResults`
2168
+ # @return [Array<Google::Apis::CloudassetV1::IamPolicyAnalysisResult>]
2169
+ attr_accessor :analysis_results
2170
+
2171
+ # Represents whether all entries in the analysis_results have been fully
2172
+ # explored to answer the query.
2173
+ # Corresponds to the JSON property `fullyExplored`
2174
+ # @return [Boolean]
2175
+ attr_accessor :fully_explored
2176
+ alias_method :fully_explored?, :fully_explored
2177
+
2178
+ # A list of non-critical errors happened during the query handling.
2179
+ # Corresponds to the JSON property `nonCriticalErrors`
2180
+ # @return [Array<Google::Apis::CloudassetV1::IamPolicyAnalysisState>]
2181
+ attr_accessor :non_critical_errors
2182
+
2183
+ def initialize(**args)
2184
+ update!(**args)
2185
+ end
2186
+
2187
+ # Update properties of this object
2188
+ def update!(**args)
2189
+ @analysis_query = args[:analysis_query] if args.key?(:analysis_query)
2190
+ @analysis_results = args[:analysis_results] if args.key?(:analysis_results)
2191
+ @fully_explored = args[:fully_explored] if args.key?(:fully_explored)
2192
+ @non_critical_errors = args[:non_critical_errors] if args.key?(:non_critical_errors)
2193
+ end
2194
+ end
2195
+
2196
+ # Output configuration for export IAM policy analysis destination.
2197
+ class IamPolicyAnalysisOutputConfig
2198
+ include Google::Apis::Core::Hashable
2199
+
2200
+ # A BigQuery destination.
2201
+ # Corresponds to the JSON property `bigqueryDestination`
2202
+ # @return [Google::Apis::CloudassetV1::GoogleCloudAssetV1BigQueryDestination]
2203
+ attr_accessor :bigquery_destination
2204
+
2205
+ # A Cloud Storage location.
2206
+ # Corresponds to the JSON property `gcsDestination`
2207
+ # @return [Google::Apis::CloudassetV1::GoogleCloudAssetV1GcsDestination]
2208
+ attr_accessor :gcs_destination
2209
+
2210
+ def initialize(**args)
2211
+ update!(**args)
2212
+ end
2213
+
2214
+ # Update properties of this object
2215
+ def update!(**args)
2216
+ @bigquery_destination = args[:bigquery_destination] if args.key?(:bigquery_destination)
2217
+ @gcs_destination = args[:gcs_destination] if args.key?(:gcs_destination)
2218
+ end
2219
+ end
2220
+
2221
+ # ## LINT.IfChange Keep in sync with ## logs/proto/cloud_asset_inventory/
2222
+ # iam_policy_analyzer_log.proto IAM policy analysis query message.
2223
+ class IamPolicyAnalysisQuery
2224
+ include Google::Apis::Core::Hashable
2225
+
2226
+ # Specifies roles and/or permissions to analyze, to determine both the
2227
+ # identities possessing them and the resources they control. If multiple values
2228
+ # are specified, results will include roles or permissions matching any of them.
2229
+ # The total number of roles and permissions should be equal or less than 10.
2230
+ # Corresponds to the JSON property `accessSelector`
2231
+ # @return [Google::Apis::CloudassetV1::AccessSelector]
2232
+ attr_accessor :access_selector
2233
+
2234
+ # Specifies an identity for which to determine resource access, based on roles
2235
+ # assigned either directly to them or to the groups they belong to, directly or
2236
+ # indirectly.
2237
+ # Corresponds to the JSON property `identitySelector`
2238
+ # @return [Google::Apis::CloudassetV1::IdentitySelector]
2239
+ attr_accessor :identity_selector
2240
+
2241
+ # Contains query options.
2242
+ # Corresponds to the JSON property `options`
2243
+ # @return [Google::Apis::CloudassetV1::Options]
2244
+ attr_accessor :options
2245
+
2246
+ # Specifies the resource to analyze for access policies, which may be set
2247
+ # directly on the resource, or on ancestors such as organizations, folders or
2248
+ # projects.
2249
+ # Corresponds to the JSON property `resourceSelector`
2250
+ # @return [Google::Apis::CloudassetV1::ResourceSelector]
2251
+ attr_accessor :resource_selector
2252
+
2253
+ # Required. The relative name of the root asset. Only resources and IAM policies
2254
+ # within the scope will be analyzed. This can only be an organization number (
2255
+ # such as "organizations/123"), a folder number (such as "folders/123"), a
2256
+ # project ID (such as "projects/my-project-id"), or a project number (such as "
2257
+ # projects/12345"). To know how to get organization id, visit [here ](https://
2258
+ # cloud.google.com/resource-manager/docs/creating-managing-organization#
2259
+ # retrieving_your_organization_id). To know how to get folder or project id,
2260
+ # visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-
2261
+ # folders#viewing_or_listing_folders_and_projects).
2262
+ # Corresponds to the JSON property `scope`
2263
+ # @return [String]
2264
+ attr_accessor :scope
2265
+
2266
+ def initialize(**args)
2267
+ update!(**args)
2268
+ end
2269
+
2270
+ # Update properties of this object
2271
+ def update!(**args)
2272
+ @access_selector = args[:access_selector] if args.key?(:access_selector)
2273
+ @identity_selector = args[:identity_selector] if args.key?(:identity_selector)
2274
+ @options = args[:options] if args.key?(:options)
2275
+ @resource_selector = args[:resource_selector] if args.key?(:resource_selector)
2276
+ @scope = args[:scope] if args.key?(:scope)
2277
+ end
2278
+ end
2279
+
2280
+ # IAM Policy analysis result, consisting of one IAM policy binding and derived
2281
+ # access control lists.
2282
+ class IamPolicyAnalysisResult
2283
+ include Google::Apis::Core::Hashable
2284
+
2285
+ # The access control lists derived from the iam_binding that match or
2286
+ # potentially match resource and access selectors specified in the request.
2287
+ # Corresponds to the JSON property `accessControlLists`
2288
+ # @return [Array<Google::Apis::CloudassetV1::GoogleCloudAssetV1AccessControlList>]
2289
+ attr_accessor :access_control_lists
2290
+
2291
+ # The [full resource name](https://cloud.google.com/asset-inventory/docs/
2292
+ # resource-name-format) of the resource to which the iam_binding policy attaches.
2293
+ # Corresponds to the JSON property `attachedResourceFullName`
2294
+ # @return [String]
2295
+ attr_accessor :attached_resource_full_name
2296
+
2297
+ # Represents whether all analyses on the iam_binding have successfully finished.
2298
+ # Corresponds to the JSON property `fullyExplored`
2299
+ # @return [Boolean]
2300
+ attr_accessor :fully_explored
2301
+ alias_method :fully_explored?, :fully_explored
2302
+
2303
+ # Associates `members` with a `role`.
2304
+ # Corresponds to the JSON property `iamBinding`
2305
+ # @return [Google::Apis::CloudassetV1::Binding]
2306
+ attr_accessor :iam_binding
2307
+
2308
+ # The identities and group edges.
2309
+ # Corresponds to the JSON property `identityList`
2310
+ # @return [Google::Apis::CloudassetV1::GoogleCloudAssetV1IdentityList]
2311
+ attr_accessor :identity_list
2312
+
2313
+ def initialize(**args)
2314
+ update!(**args)
2315
+ end
2316
+
2317
+ # Update properties of this object
2318
+ def update!(**args)
2319
+ @access_control_lists = args[:access_control_lists] if args.key?(:access_control_lists)
2320
+ @attached_resource_full_name = args[:attached_resource_full_name] if args.key?(:attached_resource_full_name)
2321
+ @fully_explored = args[:fully_explored] if args.key?(:fully_explored)
2322
+ @iam_binding = args[:iam_binding] if args.key?(:iam_binding)
2323
+ @identity_list = args[:identity_list] if args.key?(:identity_list)
2324
+ end
2325
+ end
2326
+
2327
+ # Represents the detailed state of an entity under analysis, such as a resource,
2328
+ # an identity or an access.
2329
+ class IamPolicyAnalysisState
2330
+ include Google::Apis::Core::Hashable
2331
+
2332
+ # The human-readable description of the cause of failure.
2333
+ # Corresponds to the JSON property `cause`
2334
+ # @return [String]
2335
+ attr_accessor :cause
2336
+
2337
+ # The Google standard error code that best describes the state. For example: -
2338
+ # OK means the analysis on this entity has been successfully finished; -
2339
+ # PERMISSION_DENIED means an access denied error is encountered; -
2340
+ # DEADLINE_EXCEEDED means the analysis on this entity hasn't been started in
2341
+ # time;
2342
+ # Corresponds to the JSON property `code`
2343
+ # @return [String]
2344
+ attr_accessor :code
2345
+
2346
+ def initialize(**args)
2347
+ update!(**args)
2348
+ end
2349
+
2350
+ # Update properties of this object
2351
+ def update!(**args)
2352
+ @cause = args[:cause] if args.key?(:cause)
2353
+ @code = args[:code] if args.key?(:code)
2354
+ end
2355
+ end
2356
+
2357
+ # A result of IAM Policy search, containing information of an IAM policy.
2358
+ class IamPolicySearchResult
2359
+ include Google::Apis::Core::Hashable
2360
+
2361
+ # Explanation about the IAM policy search result.
2362
+ # Corresponds to the JSON property `explanation`
2363
+ # @return [Google::Apis::CloudassetV1::Explanation]
2364
+ attr_accessor :explanation
2365
+
2366
+ # An Identity and Access Management (IAM) policy, which specifies access
2367
+ # controls for Google Cloud resources. A `Policy` is a collection of `bindings`.
2368
+ # A `binding` binds one or more `members` to a single `role`. Members can be
2369
+ # user accounts, service accounts, Google groups, and domains (such as G Suite).
2370
+ # A `role` is a named list of permissions; each `role` can be an IAM predefined
2371
+ # role or a user-created custom role. For some types of Google Cloud resources,
2372
+ # a `binding` can also specify a `condition`, which is a logical expression that
2373
+ # allows access to a resource only if the expression evaluates to `true`. A
2374
+ # condition can add constraints based on attributes of the request, the resource,
2375
+ # or both. To learn which resources support conditions in their IAM policies,
2376
+ # see the [IAM documentation](https://cloud.google.com/iam/help/conditions/
2377
+ # resource-policies). **JSON example:** ` "bindings": [ ` "role": "roles/
2378
+ # resourcemanager.organizationAdmin", "members": [ "user:mike@example.com", "
2379
+ # group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@
2380
+ # appspot.gserviceaccount.com" ] `, ` "role": "roles/resourcemanager.
2381
+ # organizationViewer", "members": [ "user:eve@example.com" ], "condition": ` "
2382
+ # title": "expirable access", "description": "Does not grant access after Sep
2383
+ # 2020", "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')", `
2384
+ # ` ], "etag": "BwWWja0YfJA=", "version": 3 ` **YAML example:** bindings: -
2385
+ # members: - user:mike@example.com - group:admins@example.com - domain:google.
2386
+ # com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/
2387
+ # resourcemanager.organizationAdmin - members: - user:eve@example.com role:
2388
+ # roles/resourcemanager.organizationViewer condition: title: expirable access
2389
+ # description: Does not grant access after Sep 2020 expression: request.time <
2390
+ # timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a
2391
+ # description of IAM and its features, see the [IAM documentation](https://cloud.
2392
+ # google.com/iam/docs/).
2393
+ # Corresponds to the JSON property `policy`
2394
+ # @return [Google::Apis::CloudassetV1::Policy]
2395
+ attr_accessor :policy
2396
+
2397
+ # Optional. The project that the associated GCP resource belongs to, in the form
2398
+ # of projects/`PROJECT_NUMBER`. If an IAM policy is set on a resource (like VM
2399
+ # instance, Cloud Storage bucket), the project field will indicate the project
2400
+ # that contains the resource. If an IAM policy is set on a folder or orgnization,
2401
+ # the project field will be empty. To search against the `project`: * specify
2402
+ # the `scope` field as this project in your search request.
2403
+ # Corresponds to the JSON property `project`
2404
+ # @return [String]
2405
+ attr_accessor :project
2406
+
2407
+ # Required. The full resource name of the resource associated with this IAM
2408
+ # policy. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/
2409
+ # instances/instance1`. See [Cloud Asset Inventory Resource Name Format](https://
2410
+ # cloud.google.com/asset-inventory/docs/resource-name-format) for more
2411
+ # information. To search against the `resource`: * use a field query. Example: `
2412
+ # resource:organizations/123`
2413
+ # Corresponds to the JSON property `resource`
2414
+ # @return [String]
2415
+ attr_accessor :resource
2416
+
2417
+ def initialize(**args)
2418
+ update!(**args)
2419
+ end
2420
+
2421
+ # Update properties of this object
2422
+ def update!(**args)
2423
+ @explanation = args[:explanation] if args.key?(:explanation)
2424
+ @policy = args[:policy] if args.key?(:policy)
2425
+ @project = args[:project] if args.key?(:project)
2426
+ @resource = args[:resource] if args.key?(:resource)
2427
+ end
2428
+ end
2429
+
2430
+ # Specifies an identity for which to determine resource access, based on roles
2431
+ # assigned either directly to them or to the groups they belong to, directly or
2432
+ # indirectly.
2433
+ class IdentitySelector
2434
+ include Google::Apis::Core::Hashable
2435
+
2436
+ # Required. The identity appear in the form of members in [IAM policy binding](
2437
+ # https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of
2438
+ # supported forms are: "user:mike@example.com", "group:admins@example.com", "
2439
+ # domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com".
2440
+ # Notice that wildcard characters (such as * and ?) are not supported. You must
2441
+ # give a specific identity.
2442
+ # Corresponds to the JSON property `identity`
2443
+ # @return [String]
2444
+ attr_accessor :identity
2445
+
2446
+ def initialize(**args)
2447
+ update!(**args)
2448
+ end
2449
+
2450
+ # Update properties of this object
2451
+ def update!(**args)
2452
+ @identity = args[:identity] if args.key?(:identity)
2453
+ end
2454
+ end
2455
+
2456
+ # The inventory details of a VM.
2457
+ class Inventory
2458
+ include Google::Apis::Core::Hashable
2459
+
2460
+ # Inventory items related to the VM keyed by an opaque unique identifier for
2461
+ # each inventory item. The identifier is unique to each distinct and addressable
2462
+ # inventory item and will change, when there is a new package version.
2463
+ # Corresponds to the JSON property `items`
2464
+ # @return [Hash<String,Google::Apis::CloudassetV1::Item>]
2465
+ attr_accessor :items
2466
+
2467
+ # Operating system information for the VM.
2468
+ # Corresponds to the JSON property `osInfo`
2469
+ # @return [Google::Apis::CloudassetV1::OsInfo]
2470
+ attr_accessor :os_info
2471
+
2472
+ def initialize(**args)
2473
+ update!(**args)
2474
+ end
2475
+
2476
+ # Update properties of this object
2477
+ def update!(**args)
2478
+ @items = args[:items] if args.key?(:items)
2479
+ @os_info = args[:os_info] if args.key?(:os_info)
2480
+ end
2481
+ end
2482
+
2483
+ # A single piece of inventory on a VM.
2484
+ class Item
2485
+ include Google::Apis::Core::Hashable
2486
+
2487
+ # Software package information of the operating system.
2488
+ # Corresponds to the JSON property `availablePackage`
2489
+ # @return [Google::Apis::CloudassetV1::SoftwarePackage]
2490
+ attr_accessor :available_package
2491
+
2492
+ # When this inventory item was first detected.
2493
+ # Corresponds to the JSON property `createTime`
2494
+ # @return [String]
2495
+ attr_accessor :create_time
2496
+
2497
+ # Identifier for this item, unique across items for this VM.
2498
+ # Corresponds to the JSON property `id`
2499
+ # @return [String]
2500
+ attr_accessor :id
2501
+
2502
+ # Software package information of the operating system.
2503
+ # Corresponds to the JSON property `installedPackage`
2504
+ # @return [Google::Apis::CloudassetV1::SoftwarePackage]
2505
+ attr_accessor :installed_package
2506
+
2507
+ # The origin of this inventory item.
2508
+ # Corresponds to the JSON property `originType`
2509
+ # @return [String]
2510
+ attr_accessor :origin_type
2511
+
2512
+ # The specific type of inventory, correlating to its specific details.
2513
+ # Corresponds to the JSON property `type`
2514
+ # @return [String]
2515
+ attr_accessor :type
2516
+
2517
+ # When this inventory item was last modified.
2518
+ # Corresponds to the JSON property `updateTime`
2519
+ # @return [String]
2520
+ attr_accessor :update_time
2521
+
2522
+ def initialize(**args)
2523
+ update!(**args)
2524
+ end
2525
+
2526
+ # Update properties of this object
2527
+ def update!(**args)
2528
+ @available_package = args[:available_package] if args.key?(:available_package)
2529
+ @create_time = args[:create_time] if args.key?(:create_time)
2530
+ @id = args[:id] if args.key?(:id)
2531
+ @installed_package = args[:installed_package] if args.key?(:installed_package)
2532
+ @origin_type = args[:origin_type] if args.key?(:origin_type)
2533
+ @type = args[:type] if args.key?(:type)
2534
+ @update_time = args[:update_time] if args.key?(:update_time)
2535
+ end
2536
+ end
2537
+
2538
+ #
2539
+ class ListFeedsResponse
2540
+ include Google::Apis::Core::Hashable
2541
+
2542
+ # A list of feeds.
2543
+ # Corresponds to the JSON property `feeds`
2544
+ # @return [Array<Google::Apis::CloudassetV1::Feed>]
2545
+ attr_accessor :feeds
2546
+
2547
+ def initialize(**args)
2548
+ update!(**args)
2549
+ end
2550
+
2551
+ # Update properties of this object
2552
+ def update!(**args)
2553
+ @feeds = args[:feeds] if args.key?(:feeds)
2554
+ end
2555
+ end
2556
+
2557
+ # This resource represents a long-running operation that is the result of a
2558
+ # network API call.
2559
+ class Operation
2560
+ include Google::Apis::Core::Hashable
2561
+
2562
+ # If the value is `false`, it means the operation is still in progress. If `true`
2563
+ # , the operation is completed, and either `error` or `response` is available.
2564
+ # Corresponds to the JSON property `done`
2565
+ # @return [Boolean]
2566
+ attr_accessor :done
2567
+ alias_method :done?, :done
2568
+
2569
+ # The `Status` type defines a logical error model that is suitable for different
2570
+ # programming environments, including REST APIs and RPC APIs. It is used by [
2571
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
2572
+ # data: error code, error message, and error details. You can find out more
2573
+ # about this error model and how to work with it in the [API Design Guide](https:
2574
+ # //cloud.google.com/apis/design/errors).
2575
+ # Corresponds to the JSON property `error`
2576
+ # @return [Google::Apis::CloudassetV1::Status]
2577
+ attr_accessor :error
2578
+
2579
+ # Service-specific metadata associated with the operation. It typically contains
2580
+ # progress information and common metadata such as create time. Some services
2581
+ # might not provide such metadata. Any method that returns a long-running
2582
+ # operation should document the metadata type, if any.
2583
+ # Corresponds to the JSON property `metadata`
2584
+ # @return [Hash<String,Object>]
2585
+ attr_accessor :metadata
2586
+
2587
+ # The server-assigned name, which is only unique within the same service that
2588
+ # originally returns it. If you use the default HTTP mapping, the `name` should
2589
+ # be a resource name ending with `operations/`unique_id``.
2590
+ # Corresponds to the JSON property `name`
2591
+ # @return [String]
2592
+ attr_accessor :name
2593
+
2594
+ # The normal response of the operation in case of success. If the original
2595
+ # method returns no data on success, such as `Delete`, the response is `google.
2596
+ # protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`,
2597
+ # the response should be the resource. For other methods, the response should
2598
+ # have the type `XxxResponse`, where `Xxx` is the original method name. For
2599
+ # example, if the original method name is `TakeSnapshot()`, the inferred
2600
+ # response type is `TakeSnapshotResponse`.
2601
+ # Corresponds to the JSON property `response`
2602
+ # @return [Hash<String,Object>]
2603
+ attr_accessor :response
2604
+
2605
+ def initialize(**args)
2606
+ update!(**args)
2607
+ end
2608
+
2609
+ # Update properties of this object
2610
+ def update!(**args)
2611
+ @done = args[:done] if args.key?(:done)
2612
+ @error = args[:error] if args.key?(:error)
2613
+ @metadata = args[:metadata] if args.key?(:metadata)
2614
+ @name = args[:name] if args.key?(:name)
2615
+ @response = args[:response] if args.key?(:response)
2616
+ end
2617
+ end
2618
+
2619
+ # Contains query options.
2620
+ class Options
2621
+ include Google::Apis::Core::Hashable
2622
+
2623
+ # Optional. If true, the response will include access analysis from identities
2624
+ # to resources via service account impersonation. This is a very expensive
2625
+ # operation, because many derived queries will be executed. We highly recommend
2626
+ # you use AssetService.AnalyzeIamPolicyLongrunning rpc instead. For example, if
2627
+ # the request analyzes for which resources user A has permission P, and there's
2628
+ # an IAM policy states user A has iam.serviceAccounts.getAccessToken permission
2629
+ # to a service account SA, and there's another IAM policy states service account
2630
+ # SA has permission P to a GCP folder F, then user A potentially has access to
2631
+ # the GCP folder F. And those advanced analysis results will be included in
2632
+ # AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another
2633
+ # example, if the request analyzes for who has permission P to a GCP folder F,
2634
+ # and there's an IAM policy states user A has iam.serviceAccounts.actAs
2635
+ # permission to a service account SA, and there's another IAM policy states
2636
+ # service account SA has permission P to the GCP folder F, then user A
2637
+ # potentially has access to the GCP folder F. And those advanced analysis
2638
+ # results will be included in AnalyzeIamPolicyResponse.
2639
+ # service_account_impersonation_analysis. Default is false.
2640
+ # Corresponds to the JSON property `analyzeServiceAccountImpersonation`
2641
+ # @return [Boolean]
2642
+ attr_accessor :analyze_service_account_impersonation
2643
+ alias_method :analyze_service_account_impersonation?, :analyze_service_account_impersonation
2644
+
2645
+ # Optional. If true, the identities section of the result will expand any Google
2646
+ # groups appearing in an IAM policy binding. If IamPolicyAnalysisQuery.
2647
+ # identity_selector is specified, the identity in the result will be determined
2648
+ # by the selector, and this flag is not allowed to set. Default is false.
2649
+ # Corresponds to the JSON property `expandGroups`
2650
+ # @return [Boolean]
2651
+ attr_accessor :expand_groups
2652
+ alias_method :expand_groups?, :expand_groups
2653
+
2654
+ # Optional. If true and IamPolicyAnalysisQuery.resource_selector is not
2655
+ # specified, the resource section of the result will expand any resource
2656
+ # attached to an IAM policy to include resources lower in the resource hierarchy.
2657
+ # For example, if the request analyzes for which resources user A has
2658
+ # permission P, and the results include an IAM policy with P on a GCP folder,
2659
+ # the results will also include resources in that folder with permission P. If
2660
+ # true and IamPolicyAnalysisQuery.resource_selector is specified, the resource
2661
+ # section of the result will expand the specified resource to include resources
2662
+ # lower in the resource hierarchy. Only project or lower resources are supported.
2663
+ # Folder and organization resource cannot be used together with this option.
2664
+ # For example, if the request analyzes for which users have permission P on a
2665
+ # GCP project with this option enabled, the results will include all users who
2666
+ # have permission P on that project or any lower resource. Default is false.
2667
+ # Corresponds to the JSON property `expandResources`
2668
+ # @return [Boolean]
2669
+ attr_accessor :expand_resources
2670
+ alias_method :expand_resources?, :expand_resources
2671
+
2672
+ # Optional. If true, the access section of result will expand any roles
2673
+ # appearing in IAM policy bindings to include their permissions. If
2674
+ # IamPolicyAnalysisQuery.access_selector is specified, the access section of the
2675
+ # result will be determined by the selector, and this flag is not allowed to set.
2676
+ # Default is false.
2677
+ # Corresponds to the JSON property `expandRoles`
2678
+ # @return [Boolean]
2679
+ attr_accessor :expand_roles
2680
+ alias_method :expand_roles?, :expand_roles
2681
+
2682
+ # Optional. If true, the result will output group identity edges, starting from
2683
+ # the binding's group members, to any expanded identities. Default is false.
2684
+ # Corresponds to the JSON property `outputGroupEdges`
2685
+ # @return [Boolean]
2686
+ attr_accessor :output_group_edges
2687
+ alias_method :output_group_edges?, :output_group_edges
2688
+
2689
+ # Optional. If true, the result will output resource edges, starting from the
2690
+ # policy attached resource, to any expanded resources. Default is false.
2691
+ # Corresponds to the JSON property `outputResourceEdges`
2692
+ # @return [Boolean]
2693
+ attr_accessor :output_resource_edges
2694
+ alias_method :output_resource_edges?, :output_resource_edges
2695
+
2696
+ def initialize(**args)
2697
+ update!(**args)
2698
+ end
2699
+
2700
+ # Update properties of this object
2701
+ def update!(**args)
2702
+ @analyze_service_account_impersonation = args[:analyze_service_account_impersonation] if args.key?(:analyze_service_account_impersonation)
2703
+ @expand_groups = args[:expand_groups] if args.key?(:expand_groups)
2704
+ @expand_resources = args[:expand_resources] if args.key?(:expand_resources)
2705
+ @expand_roles = args[:expand_roles] if args.key?(:expand_roles)
2706
+ @output_group_edges = args[:output_group_edges] if args.key?(:output_group_edges)
2707
+ @output_resource_edges = args[:output_resource_edges] if args.key?(:output_resource_edges)
2708
+ end
2709
+ end
2710
+
2711
+ # Operating system information for the VM.
2712
+ class OsInfo
2713
+ include Google::Apis::Core::Hashable
2714
+
2715
+ # The system architecture of the operating system.
2716
+ # Corresponds to the JSON property `architecture`
2717
+ # @return [String]
2718
+ attr_accessor :architecture
2719
+
2720
+ # The VM hostname.
2721
+ # Corresponds to the JSON property `hostname`
2722
+ # @return [String]
2723
+ attr_accessor :hostname
2724
+
2725
+ # The kernel release of the operating system.
2726
+ # Corresponds to the JSON property `kernelRelease`
2727
+ # @return [String]
2728
+ attr_accessor :kernel_release
2729
+
2730
+ # The kernel version of the operating system.
2731
+ # Corresponds to the JSON property `kernelVersion`
2732
+ # @return [String]
2733
+ attr_accessor :kernel_version
2734
+
2735
+ # The operating system long name. For example 'Debian GNU/Linux 9' or 'Microsoft
2736
+ # Window Server 2019 Datacenter'.
2737
+ # Corresponds to the JSON property `longName`
2738
+ # @return [String]
2739
+ attr_accessor :long_name
2740
+
2741
+ # The current version of the OS Config agent running on the VM.
2742
+ # Corresponds to the JSON property `osconfigAgentVersion`
2743
+ # @return [String]
2744
+ attr_accessor :osconfig_agent_version
2745
+
2746
+ # The operating system short name. For example, 'windows' or 'debian'.
2747
+ # Corresponds to the JSON property `shortName`
2748
+ # @return [String]
2749
+ attr_accessor :short_name
2750
+
2751
+ # The version of the operating system.
2752
+ # Corresponds to the JSON property `version`
2753
+ # @return [String]
2754
+ attr_accessor :version
2755
+
2756
+ def initialize(**args)
2757
+ update!(**args)
2758
+ end
2759
+
2760
+ # Update properties of this object
2761
+ def update!(**args)
2762
+ @architecture = args[:architecture] if args.key?(:architecture)
2763
+ @hostname = args[:hostname] if args.key?(:hostname)
2764
+ @kernel_release = args[:kernel_release] if args.key?(:kernel_release)
2765
+ @kernel_version = args[:kernel_version] if args.key?(:kernel_version)
2766
+ @long_name = args[:long_name] if args.key?(:long_name)
2767
+ @osconfig_agent_version = args[:osconfig_agent_version] if args.key?(:osconfig_agent_version)
2768
+ @short_name = args[:short_name] if args.key?(:short_name)
2769
+ @version = args[:version] if args.key?(:version)
2770
+ end
2771
+ end
2772
+
2773
+ # Output configuration for export assets destination.
2774
+ class OutputConfig
2775
+ include Google::Apis::Core::Hashable
2776
+
2777
+ # A BigQuery destination for exporting assets to.
2778
+ # Corresponds to the JSON property `bigqueryDestination`
2779
+ # @return [Google::Apis::CloudassetV1::BigQueryDestination]
2780
+ attr_accessor :bigquery_destination
2781
+
2782
+ # A Cloud Storage location.
2783
+ # Corresponds to the JSON property `gcsDestination`
2784
+ # @return [Google::Apis::CloudassetV1::GcsDestination]
2785
+ attr_accessor :gcs_destination
2786
+
2787
+ def initialize(**args)
2788
+ update!(**args)
2789
+ end
2790
+
2791
+ # Update properties of this object
2792
+ def update!(**args)
2793
+ @bigquery_destination = args[:bigquery_destination] if args.key?(:bigquery_destination)
2794
+ @gcs_destination = args[:gcs_destination] if args.key?(:gcs_destination)
2795
+ end
2796
+ end
2797
+
2798
+ # Specifications of BigQuery partitioned table as export destination.
2799
+ class PartitionSpec
2800
+ include Google::Apis::Core::Hashable
2801
+
2802
+ # The partition key for BigQuery partitioned table.
2803
+ # Corresponds to the JSON property `partitionKey`
2804
+ # @return [String]
2805
+ attr_accessor :partition_key
2806
+
2807
+ def initialize(**args)
2808
+ update!(**args)
2809
+ end
2810
+
2811
+ # Update properties of this object
2812
+ def update!(**args)
2813
+ @partition_key = args[:partition_key] if args.key?(:partition_key)
2814
+ end
2815
+ end
2816
+
2817
+ # IAM permissions
2818
+ class Permissions
2819
+ include Google::Apis::Core::Hashable
2820
+
2821
+ # A list of permissions. A sample permission string: `compute.disk.get`.
2822
+ # Corresponds to the JSON property `permissions`
2823
+ # @return [Array<String>]
2824
+ attr_accessor :permissions
2825
+
2826
+ def initialize(**args)
2827
+ update!(**args)
2828
+ end
2829
+
2830
+ # Update properties of this object
2831
+ def update!(**args)
2832
+ @permissions = args[:permissions] if args.key?(:permissions)
2833
+ end
2834
+ end
2835
+
2836
+ # An Identity and Access Management (IAM) policy, which specifies access
2837
+ # controls for Google Cloud resources. A `Policy` is a collection of `bindings`.
2838
+ # A `binding` binds one or more `members` to a single `role`. Members can be
2839
+ # user accounts, service accounts, Google groups, and domains (such as G Suite).
2840
+ # A `role` is a named list of permissions; each `role` can be an IAM predefined
2841
+ # role or a user-created custom role. For some types of Google Cloud resources,
2842
+ # a `binding` can also specify a `condition`, which is a logical expression that
2843
+ # allows access to a resource only if the expression evaluates to `true`. A
2844
+ # condition can add constraints based on attributes of the request, the resource,
2845
+ # or both. To learn which resources support conditions in their IAM policies,
2846
+ # see the [IAM documentation](https://cloud.google.com/iam/help/conditions/
2847
+ # resource-policies). **JSON example:** ` "bindings": [ ` "role": "roles/
2848
+ # resourcemanager.organizationAdmin", "members": [ "user:mike@example.com", "
2849
+ # group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@
2850
+ # appspot.gserviceaccount.com" ] `, ` "role": "roles/resourcemanager.
2851
+ # organizationViewer", "members": [ "user:eve@example.com" ], "condition": ` "
2852
+ # title": "expirable access", "description": "Does not grant access after Sep
2853
+ # 2020", "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')", `
2854
+ # ` ], "etag": "BwWWja0YfJA=", "version": 3 ` **YAML example:** bindings: -
2855
+ # members: - user:mike@example.com - group:admins@example.com - domain:google.
2856
+ # com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/
2857
+ # resourcemanager.organizationAdmin - members: - user:eve@example.com role:
2858
+ # roles/resourcemanager.organizationViewer condition: title: expirable access
2859
+ # description: Does not grant access after Sep 2020 expression: request.time <
2860
+ # timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a
2861
+ # description of IAM and its features, see the [IAM documentation](https://cloud.
2862
+ # google.com/iam/docs/).
2863
+ class Policy
2864
+ include Google::Apis::Core::Hashable
2865
+
2866
+ # Specifies cloud audit logging configuration for this policy.
2867
+ # Corresponds to the JSON property `auditConfigs`
2868
+ # @return [Array<Google::Apis::CloudassetV1::AuditConfig>]
2869
+ attr_accessor :audit_configs
2870
+
2871
+ # Associates a list of `members` to a `role`. Optionally, may specify a `
2872
+ # condition` that determines how and when the `bindings` are applied. Each of
2873
+ # the `bindings` must contain at least one member.
2874
+ # Corresponds to the JSON property `bindings`
2875
+ # @return [Array<Google::Apis::CloudassetV1::Binding>]
2876
+ attr_accessor :bindings
2877
+
2878
+ # `etag` is used for optimistic concurrency control as a way to help prevent
2879
+ # simultaneous updates of a policy from overwriting each other. It is strongly
2880
+ # suggested that systems make use of the `etag` in the read-modify-write cycle
2881
+ # to perform policy updates in order to avoid race conditions: An `etag` is
2882
+ # returned in the response to `getIamPolicy`, and systems are expected to put
2883
+ # that etag in the request to `setIamPolicy` to ensure that their change will be
2884
+ # applied to the same version of the policy. **Important:** If you use IAM
2885
+ # Conditions, you must include the `etag` field whenever you call `setIamPolicy`.
2886
+ # If you omit this field, then IAM allows you to overwrite a version `3` policy
2887
+ # with a version `1` policy, and all of the conditions in the version `3` policy
2888
+ # are lost.
2889
+ # Corresponds to the JSON property `etag`
2890
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
2891
+ # @return [String]
2892
+ attr_accessor :etag
2893
+
2894
+ # Specifies the format of the policy. Valid values are `0`, `1`, and `3`.
2895
+ # Requests that specify an invalid value are rejected. Any operation that
2896
+ # affects conditional role bindings must specify version `3`. This requirement
2897
+ # applies to the following operations: * Getting a policy that includes a
2898
+ # conditional role binding * Adding a conditional role binding to a policy *
2899
+ # Changing a conditional role binding in a policy * Removing any role binding,
2900
+ # with or without a condition, from a policy that includes conditions **
2901
+ # Important:** If you use IAM Conditions, you must include the `etag` field
2902
+ # whenever you call `setIamPolicy`. If you omit this field, then IAM allows you
2903
+ # to overwrite a version `3` policy with a version `1` policy, and all of the
2904
+ # conditions in the version `3` policy are lost. If a policy does not include
2905
+ # any conditions, operations on that policy may specify any valid version or
2906
+ # leave the field unset. To learn which resources support conditions in their
2907
+ # IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/
2908
+ # conditions/resource-policies).
2909
+ # Corresponds to the JSON property `version`
2910
+ # @return [Fixnum]
2911
+ attr_accessor :version
2912
+
2913
+ def initialize(**args)
2914
+ update!(**args)
2915
+ end
2916
+
2917
+ # Update properties of this object
2918
+ def update!(**args)
2919
+ @audit_configs = args[:audit_configs] if args.key?(:audit_configs)
2920
+ @bindings = args[:bindings] if args.key?(:bindings)
2921
+ @etag = args[:etag] if args.key?(:etag)
2922
+ @version = args[:version] if args.key?(:version)
2923
+ end
2924
+ end
2925
+
2926
+ # A Pub/Sub destination.
2927
+ class PubsubDestination
2928
+ include Google::Apis::Core::Hashable
2929
+
2930
+ # The name of the Pub/Sub topic to publish to. Example: `projects/PROJECT_ID/
2931
+ # topics/TOPIC_ID`.
2932
+ # Corresponds to the JSON property `topic`
2933
+ # @return [String]
2934
+ attr_accessor :topic
2935
+
2936
+ def initialize(**args)
2937
+ update!(**args)
2938
+ end
2939
+
2940
+ # Update properties of this object
2941
+ def update!(**args)
2942
+ @topic = args[:topic] if args.key?(:topic)
2943
+ end
2944
+ end
2945
+
2946
+ # A representation of a Google Cloud resource.
2947
+ class Resource
2948
+ include Google::Apis::Core::Hashable
2949
+
2950
+ # The content of the resource, in which some sensitive fields are removed and
2951
+ # may not be present.
2952
+ # Corresponds to the JSON property `data`
2953
+ # @return [Hash<String,Object>]
2954
+ attr_accessor :data
2955
+
2956
+ # The URL of the discovery document containing the resource's JSON schema.
2957
+ # Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` This
2958
+ # value is unspecified for resources that do not have an API based on a
2959
+ # discovery document, such as Cloud Bigtable.
2960
+ # Corresponds to the JSON property `discoveryDocumentUri`
2961
+ # @return [String]
2962
+ attr_accessor :discovery_document_uri
2963
+
2964
+ # The JSON schema name listed in the discovery document. Example: `Project` This
2965
+ # value is unspecified for resources that do not have an API based on a
2966
+ # discovery document, such as Cloud Bigtable.
2967
+ # Corresponds to the JSON property `discoveryName`
2968
+ # @return [String]
2969
+ attr_accessor :discovery_name
2970
+
2971
+ # The location of the resource in Google Cloud, such as its zone and region. For
2972
+ # more information, see https://cloud.google.com/about/locations/.
2973
+ # Corresponds to the JSON property `location`
2974
+ # @return [String]
2975
+ attr_accessor :location
2976
+
2977
+ # The full name of the immediate parent of this resource. See [Resource Names](
2978
+ # https://cloud.google.com/apis/design/resource_names#full_resource_name) for
2979
+ # more information. For Google Cloud assets, this value is the parent resource
2980
+ # defined in the [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/
2981
+ # overview#policy_hierarchy). Example: `//cloudresourcemanager.googleapis.com/
2982
+ # projects/my_project_123` For third-party assets, this field may be set
2983
+ # differently.
2984
+ # Corresponds to the JSON property `parent`
2985
+ # @return [String]
2986
+ attr_accessor :parent
2987
+
2988
+ # The REST URL for accessing the resource. An HTTP `GET` request using this URL
2989
+ # returns the resource itself. Example: `https://cloudresourcemanager.googleapis.
2990
+ # com/v1/projects/my-project-123` This value is unspecified for resources
2991
+ # without a REST API.
2992
+ # Corresponds to the JSON property `resourceUrl`
2993
+ # @return [String]
2994
+ attr_accessor :resource_url
2995
+
2996
+ # The API version. Example: `v1`
2997
+ # Corresponds to the JSON property `version`
2998
+ # @return [String]
2999
+ attr_accessor :version
3000
+
3001
+ def initialize(**args)
3002
+ update!(**args)
3003
+ end
3004
+
3005
+ # Update properties of this object
3006
+ def update!(**args)
3007
+ @data = args[:data] if args.key?(:data)
3008
+ @discovery_document_uri = args[:discovery_document_uri] if args.key?(:discovery_document_uri)
3009
+ @discovery_name = args[:discovery_name] if args.key?(:discovery_name)
3010
+ @location = args[:location] if args.key?(:location)
3011
+ @parent = args[:parent] if args.key?(:parent)
3012
+ @resource_url = args[:resource_url] if args.key?(:resource_url)
3013
+ @version = args[:version] if args.key?(:version)
3014
+ end
3015
+ end
3016
+
3017
+ # A result of Resource Search, containing information of a cloud resource.
3018
+ class ResourceSearchResult
3019
+ include Google::Apis::Core::Hashable
3020
+
3021
+ # Optional. The additional searchable attributes of this resource. The
3022
+ # attributes may vary from one resource type to another. Examples: `projectId`
3023
+ # for Project, `dnsName` for DNS ManagedZone. This field contains a subset of
3024
+ # the resource metadata fields that are returned by the List or Get APIs
3025
+ # provided by the corresponding GCP service (e.g., Compute Engine). see [API
3026
+ # references and supported searchable attributes](https://cloud.google.com/asset-
3027
+ # inventory/docs/supported-asset-types#searchable_asset_types) for more
3028
+ # information. You can search values of these fields through free text search.
3029
+ # However, you should not consume the field programically as the field names and
3030
+ # values may change as the GCP service updates to a new incompatible API version.
3031
+ # To search against the `additional_attributes`: * use a free text query to
3032
+ # match the attributes values. Example: to search `additional_attributes = `
3033
+ # dnsName: "foobar" ``, you can issue a query `foobar`.
3034
+ # Corresponds to the JSON property `additionalAttributes`
3035
+ # @return [Hash<String,Object>]
3036
+ attr_accessor :additional_attributes
3037
+
3038
+ # Required. The type of this resource. Example: `compute.googleapis.com/Disk`.
3039
+ # To search against the `asset_type`: * specify the `asset_type` field in your
3040
+ # search request.
3041
+ # Corresponds to the JSON property `assetType`
3042
+ # @return [String]
3043
+ attr_accessor :asset_type
3044
+
3045
+ # Optional. One or more paragraphs of text description of this resource. Maximum
3046
+ # length could be up to 1M bytes. This field is available only when the resource'
3047
+ # s proto contains it. To search against the `description`: * use a field query.
3048
+ # Example: `description:"*important instance*"` * use a free text query. Example:
3049
+ # `"*important instance*"`
3050
+ # Corresponds to the JSON property `description`
3051
+ # @return [String]
3052
+ attr_accessor :description
3053
+
3054
+ # Optional. The display name of this resource. This field is available only when
3055
+ # the resource's proto contains it. To search against the `display_name`: * use
3056
+ # a field query. Example: `displayName:"My Instance"` * use a free text query.
3057
+ # Example: `"My Instance"`
3058
+ # Corresponds to the JSON property `displayName`
3059
+ # @return [String]
3060
+ attr_accessor :display_name
3061
+
3062
+ # Optional. Labels associated with this resource. See [Labelling and grouping
3063
+ # GCP resources](https://cloud.google.com/blog/products/gcp/labelling-and-
3064
+ # grouping-your-google-cloud-platform-resources) for more information. This
3065
+ # field is available only when the resource's proto contains it. To search
3066
+ # against the `labels`: * use a field query: - query on any label's key or value.
3067
+ # Example: `labels:prod` - query by a given label. Example: `labels.env:prod` -
3068
+ # query by a given label's existence. Example: `labels.env:*` * use a free text
3069
+ # query. Example: `prod`
3070
+ # Corresponds to the JSON property `labels`
3071
+ # @return [Hash<String,String>]
3072
+ attr_accessor :labels
3073
+
3074
+ # Optional. Location can be `global`, regional like `us-east1`, or zonal like `
3075
+ # us-west1-b`. This field is available only when the resource's proto contains
3076
+ # it. To search against the `location`: * use a field query. Example: `location:
3077
+ # us-west*` * use a free text query. Example: `us-west*`
3078
+ # Corresponds to the JSON property `location`
3079
+ # @return [String]
3080
+ attr_accessor :location
3081
+
3082
+ # Required. The full resource name of this resource. Example: `//compute.
3083
+ # googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. See [
3084
+ # Cloud Asset Inventory Resource Name Format](https://cloud.google.com/asset-
3085
+ # inventory/docs/resource-name-format) for more information. To search against
3086
+ # the `name`: * use a field query. Example: `name:instance1` * use a free text
3087
+ # query. Example: `instance1`
3088
+ # Corresponds to the JSON property `name`
3089
+ # @return [String]
3090
+ attr_accessor :name
3091
+
3092
+ # Optional. Network tags associated with this resource. Like labels, network
3093
+ # tags are a type of annotations used to group GCP resources. See [Labelling GCP
3094
+ # resources](https://cloud.google.com/blog/products/gcp/labelling-and-grouping-
3095
+ # your-google-cloud-platform-resources) for more information. This field is
3096
+ # available only when the resource's proto contains it. To search against the `
3097
+ # network_tags`: * use a field query. Example: `networkTags:internal` * use a
3098
+ # free text query. Example: `internal`
3099
+ # Corresponds to the JSON property `networkTags`
3100
+ # @return [Array<String>]
3101
+ attr_accessor :network_tags
3102
+
3103
+ # Optional. The project that this resource belongs to, in the form of projects/`
3104
+ # PROJECT_NUMBER`. This field is available when the resource belongs to a
3105
+ # project. To search against the `project`: * specify the `scope` field as this
3106
+ # project in your search request.
3107
+ # Corresponds to the JSON property `project`
3108
+ # @return [String]
3109
+ attr_accessor :project
3110
+
3111
+ def initialize(**args)
3112
+ update!(**args)
3113
+ end
3114
+
3115
+ # Update properties of this object
3116
+ def update!(**args)
3117
+ @additional_attributes = args[:additional_attributes] if args.key?(:additional_attributes)
3118
+ @asset_type = args[:asset_type] if args.key?(:asset_type)
3119
+ @description = args[:description] if args.key?(:description)
3120
+ @display_name = args[:display_name] if args.key?(:display_name)
3121
+ @labels = args[:labels] if args.key?(:labels)
3122
+ @location = args[:location] if args.key?(:location)
3123
+ @name = args[:name] if args.key?(:name)
3124
+ @network_tags = args[:network_tags] if args.key?(:network_tags)
3125
+ @project = args[:project] if args.key?(:project)
3126
+ end
3127
+ end
3128
+
3129
+ # Specifies the resource to analyze for access policies, which may be set
3130
+ # directly on the resource, or on ancestors such as organizations, folders or
3131
+ # projects.
3132
+ class ResourceSelector
3133
+ include Google::Apis::Core::Hashable
3134
+
3135
+ # Required. The [full resource name] (https://cloud.google.com/asset-inventory/
3136
+ # docs/resource-name-format) of a resource of [supported resource types](https://
3137
+ # cloud.google.com/asset-inventory/docs/supported-asset-types#
3138
+ # analyzable_asset_types).
3139
+ # Corresponds to the JSON property `fullResourceName`
3140
+ # @return [String]
3141
+ attr_accessor :full_resource_name
3142
+
3143
+ def initialize(**args)
3144
+ update!(**args)
3145
+ end
3146
+
3147
+ # Update properties of this object
3148
+ def update!(**args)
3149
+ @full_resource_name = args[:full_resource_name] if args.key?(:full_resource_name)
3150
+ end
3151
+ end
3152
+
3153
+ # Search all IAM policies response.
3154
+ class SearchAllIamPoliciesResponse
3155
+ include Google::Apis::Core::Hashable
3156
+
3157
+ # Set if there are more results than those appearing in this response; to get
3158
+ # the next set of results, call this method again, using this value as the `
3159
+ # page_token`.
3160
+ # Corresponds to the JSON property `nextPageToken`
3161
+ # @return [String]
3162
+ attr_accessor :next_page_token
3163
+
3164
+ # A list of IamPolicy that match the search query. Related information such as
3165
+ # the associated resource is returned along with the policy.
3166
+ # Corresponds to the JSON property `results`
3167
+ # @return [Array<Google::Apis::CloudassetV1::IamPolicySearchResult>]
3168
+ attr_accessor :results
3169
+
3170
+ def initialize(**args)
3171
+ update!(**args)
3172
+ end
3173
+
3174
+ # Update properties of this object
3175
+ def update!(**args)
3176
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
3177
+ @results = args[:results] if args.key?(:results)
3178
+ end
3179
+ end
3180
+
3181
+ # Search all resources response.
3182
+ class SearchAllResourcesResponse
3183
+ include Google::Apis::Core::Hashable
3184
+
3185
+ # If there are more results than those appearing in this response, then `
3186
+ # next_page_token` is included. To get the next set of results, call this method
3187
+ # again using the value of `next_page_token` as `page_token`.
3188
+ # Corresponds to the JSON property `nextPageToken`
3189
+ # @return [String]
3190
+ attr_accessor :next_page_token
3191
+
3192
+ # A list of Resources that match the search query. It contains the resource
3193
+ # standard metadata information.
3194
+ # Corresponds to the JSON property `results`
3195
+ # @return [Array<Google::Apis::CloudassetV1::ResourceSearchResult>]
3196
+ attr_accessor :results
3197
+
3198
+ def initialize(**args)
3199
+ update!(**args)
3200
+ end
3201
+
3202
+ # Update properties of this object
3203
+ def update!(**args)
3204
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
3205
+ @results = args[:results] if args.key?(:results)
3206
+ end
3207
+ end
3208
+
3209
+ # Software package information of the operating system.
3210
+ class SoftwarePackage
3211
+ include Google::Apis::Core::Hashable
3212
+
3213
+ # Information related to the a standard versioned package. This includes package
3214
+ # info for APT, Yum, Zypper, and Googet package managers.
3215
+ # Corresponds to the JSON property `aptPackage`
3216
+ # @return [Google::Apis::CloudassetV1::VersionedPackage]
3217
+ attr_accessor :apt_package
3218
+
3219
+ # Information related to the a standard versioned package. This includes package
3220
+ # info for APT, Yum, Zypper, and Googet package managers.
3221
+ # Corresponds to the JSON property `cosPackage`
3222
+ # @return [Google::Apis::CloudassetV1::VersionedPackage]
3223
+ attr_accessor :cos_package
3224
+
3225
+ # Information related to the a standard versioned package. This includes package
3226
+ # info for APT, Yum, Zypper, and Googet package managers.
3227
+ # Corresponds to the JSON property `googetPackage`
3228
+ # @return [Google::Apis::CloudassetV1::VersionedPackage]
3229
+ attr_accessor :googet_package
3230
+
3231
+ # Information related to a Quick Fix Engineering package. Fields are taken from
3232
+ # Windows QuickFixEngineering Interface and match the source names: https://docs.
3233
+ # microsoft.com/en-us/windows/win32/cimwin32prov/win32-quickfixengineering
3234
+ # Corresponds to the JSON property `qfePackage`
3235
+ # @return [Google::Apis::CloudassetV1::WindowsQuickFixEngineeringPackage]
3236
+ attr_accessor :qfe_package
3237
+
3238
+ # Details related to a Windows Update package. Field data and names are taken
3239
+ # from Windows Update API IUpdate Interface: https://docs.microsoft.com/en-us/
3240
+ # windows/win32/api/_wua/ Descriptive fields like title, and description are
3241
+ # localized based on the locale of the VM being updated.
3242
+ # Corresponds to the JSON property `wuaPackage`
3243
+ # @return [Google::Apis::CloudassetV1::WindowsUpdatePackage]
3244
+ attr_accessor :wua_package
3245
+
3246
+ # Information related to the a standard versioned package. This includes package
3247
+ # info for APT, Yum, Zypper, and Googet package managers.
3248
+ # Corresponds to the JSON property `yumPackage`
3249
+ # @return [Google::Apis::CloudassetV1::VersionedPackage]
3250
+ attr_accessor :yum_package
3251
+
3252
+ # Information related to the a standard versioned package. This includes package
3253
+ # info for APT, Yum, Zypper, and Googet package managers.
3254
+ # Corresponds to the JSON property `zypperPackage`
3255
+ # @return [Google::Apis::CloudassetV1::VersionedPackage]
3256
+ attr_accessor :zypper_package
3257
+
3258
+ # Details related to a Zypper Patch.
3259
+ # Corresponds to the JSON property `zypperPatch`
3260
+ # @return [Google::Apis::CloudassetV1::ZypperPatch]
3261
+ attr_accessor :zypper_patch
3262
+
3263
+ def initialize(**args)
3264
+ update!(**args)
3265
+ end
3266
+
3267
+ # Update properties of this object
3268
+ def update!(**args)
3269
+ @apt_package = args[:apt_package] if args.key?(:apt_package)
3270
+ @cos_package = args[:cos_package] if args.key?(:cos_package)
3271
+ @googet_package = args[:googet_package] if args.key?(:googet_package)
3272
+ @qfe_package = args[:qfe_package] if args.key?(:qfe_package)
3273
+ @wua_package = args[:wua_package] if args.key?(:wua_package)
3274
+ @yum_package = args[:yum_package] if args.key?(:yum_package)
3275
+ @zypper_package = args[:zypper_package] if args.key?(:zypper_package)
3276
+ @zypper_patch = args[:zypper_patch] if args.key?(:zypper_patch)
3277
+ end
3278
+ end
3279
+
3280
+ # The `Status` type defines a logical error model that is suitable for different
3281
+ # programming environments, including REST APIs and RPC APIs. It is used by [
3282
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
3283
+ # data: error code, error message, and error details. You can find out more
3284
+ # about this error model and how to work with it in the [API Design Guide](https:
3285
+ # //cloud.google.com/apis/design/errors).
3286
+ class Status
3287
+ include Google::Apis::Core::Hashable
3288
+
3289
+ # The status code, which should be an enum value of google.rpc.Code.
3290
+ # Corresponds to the JSON property `code`
3291
+ # @return [Fixnum]
3292
+ attr_accessor :code
3293
+
3294
+ # A list of messages that carry the error details. There is a common set of
3295
+ # message types for APIs to use.
3296
+ # Corresponds to the JSON property `details`
3297
+ # @return [Array<Hash<String,Object>>]
3298
+ attr_accessor :details
3299
+
3300
+ # A developer-facing error message, which should be in English. Any user-facing
3301
+ # error message should be localized and sent in the google.rpc.Status.details
3302
+ # field, or localized by the client.
3303
+ # Corresponds to the JSON property `message`
3304
+ # @return [String]
3305
+ attr_accessor :message
3306
+
3307
+ def initialize(**args)
3308
+ update!(**args)
3309
+ end
3310
+
3311
+ # Update properties of this object
3312
+ def update!(**args)
3313
+ @code = args[:code] if args.key?(:code)
3314
+ @details = args[:details] if args.key?(:details)
3315
+ @message = args[:message] if args.key?(:message)
3316
+ end
3317
+ end
3318
+
3319
+ # An asset in Google Cloud and its temporal metadata, including the time window
3320
+ # when it was observed and its status during that window.
3321
+ class TemporalAsset
3322
+ include Google::Apis::Core::Hashable
3323
+
3324
+ # An asset in Google Cloud. An asset can be any resource in the Google Cloud [
3325
+ # resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-
3326
+ # platform-resource-hierarchy), a resource outside the Google Cloud resource
3327
+ # hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy
3328
+ # (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/
3329
+ # asset-inventory/docs/supported-asset-types) for more information.
3330
+ # Corresponds to the JSON property `asset`
3331
+ # @return [Google::Apis::CloudassetV1::Asset]
3332
+ attr_accessor :asset
3333
+
3334
+ # Whether the asset has been deleted or not.
3335
+ # Corresponds to the JSON property `deleted`
3336
+ # @return [Boolean]
3337
+ attr_accessor :deleted
3338
+ alias_method :deleted?, :deleted
3339
+
3340
+ # An asset in Google Cloud. An asset can be any resource in the Google Cloud [
3341
+ # resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-
3342
+ # platform-resource-hierarchy), a resource outside the Google Cloud resource
3343
+ # hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy
3344
+ # (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/
3345
+ # asset-inventory/docs/supported-asset-types) for more information.
3346
+ # Corresponds to the JSON property `priorAsset`
3347
+ # @return [Google::Apis::CloudassetV1::Asset]
3348
+ attr_accessor :prior_asset
3349
+
3350
+ # State of prior_asset.
3351
+ # Corresponds to the JSON property `priorAssetState`
3352
+ # @return [String]
3353
+ attr_accessor :prior_asset_state
3354
+
3355
+ # A time window specified by its `start_time` and `end_time`.
3356
+ # Corresponds to the JSON property `window`
3357
+ # @return [Google::Apis::CloudassetV1::TimeWindow]
3358
+ attr_accessor :window
3359
+
3360
+ def initialize(**args)
3361
+ update!(**args)
3362
+ end
3363
+
3364
+ # Update properties of this object
3365
+ def update!(**args)
3366
+ @asset = args[:asset] if args.key?(:asset)
3367
+ @deleted = args[:deleted] if args.key?(:deleted)
3368
+ @prior_asset = args[:prior_asset] if args.key?(:prior_asset)
3369
+ @prior_asset_state = args[:prior_asset_state] if args.key?(:prior_asset_state)
3370
+ @window = args[:window] if args.key?(:window)
3371
+ end
3372
+ end
3373
+
3374
+ # A time window specified by its `start_time` and `end_time`.
3375
+ class TimeWindow
3376
+ include Google::Apis::Core::Hashable
3377
+
3378
+ # End time of the time window (inclusive). If not specified, the current
3379
+ # timestamp is used instead.
3380
+ # Corresponds to the JSON property `endTime`
3381
+ # @return [String]
3382
+ attr_accessor :end_time
3383
+
3384
+ # Start time of the time window (exclusive).
3385
+ # Corresponds to the JSON property `startTime`
3386
+ # @return [String]
3387
+ attr_accessor :start_time
3388
+
3389
+ def initialize(**args)
3390
+ update!(**args)
3391
+ end
3392
+
3393
+ # Update properties of this object
3394
+ def update!(**args)
3395
+ @end_time = args[:end_time] if args.key?(:end_time)
3396
+ @start_time = args[:start_time] if args.key?(:start_time)
3397
+ end
3398
+ end
3399
+
3400
+ # Update asset feed request.
3401
+ class UpdateFeedRequest
3402
+ include Google::Apis::Core::Hashable
3403
+
3404
+ # An asset feed used to export asset updates to a destinations. An asset feed
3405
+ # filter controls what updates are exported. The asset feed must be created
3406
+ # within a project, organization, or folder. Supported destinations are: Pub/Sub
3407
+ # topics.
3408
+ # Corresponds to the JSON property `feed`
3409
+ # @return [Google::Apis::CloudassetV1::Feed]
3410
+ attr_accessor :feed
3411
+
3412
+ # Required. Only updates the `feed` fields indicated by this mask. The field
3413
+ # mask must not be empty, and it must not contain fields that are immutable or
3414
+ # only set by the server.
3415
+ # Corresponds to the JSON property `updateMask`
3416
+ # @return [String]
3417
+ attr_accessor :update_mask
3418
+
3419
+ def initialize(**args)
3420
+ update!(**args)
3421
+ end
3422
+
3423
+ # Update properties of this object
3424
+ def update!(**args)
3425
+ @feed = args[:feed] if args.key?(:feed)
3426
+ @update_mask = args[:update_mask] if args.key?(:update_mask)
3427
+ end
3428
+ end
3429
+
3430
+ # Information related to the a standard versioned package. This includes package
3431
+ # info for APT, Yum, Zypper, and Googet package managers.
3432
+ class VersionedPackage
3433
+ include Google::Apis::Core::Hashable
3434
+
3435
+ # The system architecture this package is intended for.
3436
+ # Corresponds to the JSON property `architecture`
3437
+ # @return [String]
3438
+ attr_accessor :architecture
3439
+
3440
+ # The name of the package.
3441
+ # Corresponds to the JSON property `packageName`
3442
+ # @return [String]
3443
+ attr_accessor :package_name
3444
+
3445
+ # The version of the package.
3446
+ # Corresponds to the JSON property `version`
3447
+ # @return [String]
3448
+ attr_accessor :version
3449
+
3450
+ def initialize(**args)
3451
+ update!(**args)
3452
+ end
3453
+
3454
+ # Update properties of this object
3455
+ def update!(**args)
3456
+ @architecture = args[:architecture] if args.key?(:architecture)
3457
+ @package_name = args[:package_name] if args.key?(:package_name)
3458
+ @version = args[:version] if args.key?(:version)
3459
+ end
3460
+ end
3461
+
3462
+ # Information related to a Quick Fix Engineering package. Fields are taken from
3463
+ # Windows QuickFixEngineering Interface and match the source names: https://docs.
3464
+ # microsoft.com/en-us/windows/win32/cimwin32prov/win32-quickfixengineering
3465
+ class WindowsQuickFixEngineeringPackage
3466
+ include Google::Apis::Core::Hashable
3467
+
3468
+ # A short textual description of the QFE update.
3469
+ # Corresponds to the JSON property `caption`
3470
+ # @return [String]
3471
+ attr_accessor :caption
3472
+
3473
+ # A textual description of the QFE update.
3474
+ # Corresponds to the JSON property `description`
3475
+ # @return [String]
3476
+ attr_accessor :description
3477
+
3478
+ # Unique identifier associated with a particular QFE update.
3479
+ # Corresponds to the JSON property `hotFixId`
3480
+ # @return [String]
3481
+ attr_accessor :hot_fix_id
3482
+
3483
+ # Date that the QFE update was installed. Mapped from installed_on field.
3484
+ # Corresponds to the JSON property `installTime`
3485
+ # @return [String]
3486
+ attr_accessor :install_time
3487
+
3488
+ def initialize(**args)
3489
+ update!(**args)
3490
+ end
3491
+
3492
+ # Update properties of this object
3493
+ def update!(**args)
3494
+ @caption = args[:caption] if args.key?(:caption)
3495
+ @description = args[:description] if args.key?(:description)
3496
+ @hot_fix_id = args[:hot_fix_id] if args.key?(:hot_fix_id)
3497
+ @install_time = args[:install_time] if args.key?(:install_time)
3498
+ end
3499
+ end
3500
+
3501
+ # Categories specified by the Windows Update.
3502
+ class WindowsUpdateCategory
3503
+ include Google::Apis::Core::Hashable
3504
+
3505
+ # The identifier of the windows update category.
3506
+ # Corresponds to the JSON property `id`
3507
+ # @return [String]
3508
+ attr_accessor :id
3509
+
3510
+ # The name of the windows update category.
3511
+ # Corresponds to the JSON property `name`
3512
+ # @return [String]
3513
+ attr_accessor :name
3514
+
3515
+ def initialize(**args)
3516
+ update!(**args)
3517
+ end
3518
+
3519
+ # Update properties of this object
3520
+ def update!(**args)
3521
+ @id = args[:id] if args.key?(:id)
3522
+ @name = args[:name] if args.key?(:name)
3523
+ end
3524
+ end
3525
+
3526
+ # Details related to a Windows Update package. Field data and names are taken
3527
+ # from Windows Update API IUpdate Interface: https://docs.microsoft.com/en-us/
3528
+ # windows/win32/api/_wua/ Descriptive fields like title, and description are
3529
+ # localized based on the locale of the VM being updated.
3530
+ class WindowsUpdatePackage
3531
+ include Google::Apis::Core::Hashable
3532
+
3533
+ # The categories that are associated with this update package.
3534
+ # Corresponds to the JSON property `categories`
3535
+ # @return [Array<Google::Apis::CloudassetV1::WindowsUpdateCategory>]
3536
+ attr_accessor :categories
3537
+
3538
+ # The localized description of the update package.
3539
+ # Corresponds to the JSON property `description`
3540
+ # @return [String]
3541
+ attr_accessor :description
3542
+
3543
+ # A collection of Microsoft Knowledge Base article IDs that are associated with
3544
+ # the update package.
3545
+ # Corresponds to the JSON property `kbArticleIds`
3546
+ # @return [Array<String>]
3547
+ attr_accessor :kb_article_ids
3548
+
3549
+ # The last published date of the update, in (UTC) date and time.
3550
+ # Corresponds to the JSON property `lastDeploymentChangeTime`
3551
+ # @return [String]
3552
+ attr_accessor :last_deployment_change_time
3553
+
3554
+ # A collection of URLs that provide more information about the update package.
3555
+ # Corresponds to the JSON property `moreInfoUrls`
3556
+ # @return [Array<String>]
3557
+ attr_accessor :more_info_urls
3558
+
3559
+ # The revision number of this update package.
3560
+ # Corresponds to the JSON property `revisionNumber`
3561
+ # @return [Fixnum]
3562
+ attr_accessor :revision_number
3563
+
3564
+ # A hyperlink to the language-specific support information for the update.
3565
+ # Corresponds to the JSON property `supportUrl`
3566
+ # @return [String]
3567
+ attr_accessor :support_url
3568
+
3569
+ # The localized title of the update package.
3570
+ # Corresponds to the JSON property `title`
3571
+ # @return [String]
3572
+ attr_accessor :title
3573
+
3574
+ # Gets the identifier of an update package. Stays the same across revisions.
3575
+ # Corresponds to the JSON property `updateId`
3576
+ # @return [String]
3577
+ attr_accessor :update_id
3578
+
3579
+ def initialize(**args)
3580
+ update!(**args)
3581
+ end
3582
+
3583
+ # Update properties of this object
3584
+ def update!(**args)
3585
+ @categories = args[:categories] if args.key?(:categories)
3586
+ @description = args[:description] if args.key?(:description)
3587
+ @kb_article_ids = args[:kb_article_ids] if args.key?(:kb_article_ids)
3588
+ @last_deployment_change_time = args[:last_deployment_change_time] if args.key?(:last_deployment_change_time)
3589
+ @more_info_urls = args[:more_info_urls] if args.key?(:more_info_urls)
3590
+ @revision_number = args[:revision_number] if args.key?(:revision_number)
3591
+ @support_url = args[:support_url] if args.key?(:support_url)
3592
+ @title = args[:title] if args.key?(:title)
3593
+ @update_id = args[:update_id] if args.key?(:update_id)
3594
+ end
3595
+ end
3596
+
3597
+ # Details related to a Zypper Patch.
3598
+ class ZypperPatch
3599
+ include Google::Apis::Core::Hashable
3600
+
3601
+ # The category of the patch.
3602
+ # Corresponds to the JSON property `category`
3603
+ # @return [String]
3604
+ attr_accessor :category
3605
+
3606
+ # The name of the patch.
3607
+ # Corresponds to the JSON property `patchName`
3608
+ # @return [String]
3609
+ attr_accessor :patch_name
3610
+
3611
+ # The severity specified for this patch
3612
+ # Corresponds to the JSON property `severity`
3613
+ # @return [String]
3614
+ attr_accessor :severity
3615
+
3616
+ # Any summary information provided about this patch.
3617
+ # Corresponds to the JSON property `summary`
3618
+ # @return [String]
3619
+ attr_accessor :summary
3620
+
3621
+ def initialize(**args)
3622
+ update!(**args)
3623
+ end
3624
+
3625
+ # Update properties of this object
3626
+ def update!(**args)
3627
+ @category = args[:category] if args.key?(:category)
3628
+ @patch_name = args[:patch_name] if args.key?(:patch_name)
3629
+ @severity = args[:severity] if args.key?(:severity)
3630
+ @summary = args[:summary] if args.key?(:summary)
3631
+ end
3632
+ end
3633
+ end
3634
+ end
3635
+ end