| // This is a generated file (see the discoveryapis_generator project). |
| |
| // ignore_for_file: camel_case_types |
| // ignore_for_file: comment_references |
| // ignore_for_file: file_names |
| // ignore_for_file: library_names |
| // ignore_for_file: lines_longer_than_80_chars |
| // ignore_for_file: non_constant_identifier_names |
| // ignore_for_file: prefer_expression_function_bodies |
| // ignore_for_file: prefer_interpolation_to_compose_strings |
| // ignore_for_file: unnecessary_brace_in_string_interps |
| // ignore_for_file: unnecessary_cast |
| // ignore_for_file: unnecessary_lambdas |
| // ignore_for_file: unnecessary_parenthesis |
| // ignore_for_file: unnecessary_string_interpolations |
| |
| /// Cloud Asset API - v1 |
| /// |
| /// The cloud asset API manages the history and inventory of cloud resources. |
| /// |
| /// For more information, see |
| /// <https://cloud.google.com/asset-inventory/docs/quickstart> |
| /// |
| /// Create an instance of [CloudAssetApi] to access these resources: |
| /// |
| /// - [FeedsResource] |
| /// - [OperationsResource] |
| /// - [V1Resource] |
| library cloudasset.v1; |
| |
| import 'dart:async' as async; |
| import 'dart:convert' as convert; |
| import 'dart:core' as core; |
| |
| import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons; |
| import 'package:http/http.dart' as http; |
| |
| import '../src/user_agent.dart'; |
| |
| export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' |
| show ApiRequestError, DetailedApiRequestError; |
| |
| /// The cloud asset API manages the history and inventory of cloud resources. |
| class CloudAssetApi { |
| /// View and manage your data across Google Cloud Platform services |
| static const cloudPlatformScope = |
| 'https://www.googleapis.com/auth/cloud-platform'; |
| |
| final commons.ApiRequester _requester; |
| |
| FeedsResource get feeds => FeedsResource(_requester); |
| OperationsResource get operations => OperationsResource(_requester); |
| V1Resource get v1 => V1Resource(_requester); |
| |
| CloudAssetApi(http.Client client, |
| {core.String rootUrl = 'https://cloudasset.googleapis.com/', |
| core.String servicePath = ''}) |
| : _requester = |
| commons.ApiRequester(client, rootUrl, servicePath, userAgent); |
| } |
| |
| class FeedsResource { |
| final commons.ApiRequester _requester; |
| |
| FeedsResource(commons.ApiRequester client) : _requester = client; |
| |
| /// Creates a feed in a parent project/folder/organization to listen to its |
| /// asset updates. |
| /// |
| /// [request] - The metadata request object. |
| /// |
| /// Request parameters: |
| /// |
| /// [parent] - Required. The name of the project/folder/organization where |
| /// this feed should be created in. It can only be an organization number |
| /// (such as "organizations/123"), a folder number (such as "folders/123"), a |
| /// project ID (such as "projects/my-project-id")", or a project number (such |
| /// as "projects/12345"). |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [Feed]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<Feed> create( |
| CreateFeedRequest request, |
| core.String parent, { |
| core.String $fields, |
| }) async { |
| final _body = |
| request == null ? null : convert.json.encode(request.toJson()); |
| if (parent == null) { |
| throw core.ArgumentError('Parameter parent is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = |
| 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/feeds'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'POST', |
| body: _body, |
| queryParams: _queryParams, |
| ); |
| return Feed.fromJson(_response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Deletes an asset feed. |
| /// |
| /// Request parameters: |
| /// |
| /// [name] - Required. The name of the feed and it must be in the format of: |
| /// projects/project_number/feeds/feed_id folders/folder_number/feeds/feed_id |
| /// organizations/organization_number/feeds/feed_id |
| /// Value must have pattern `^\[^/\]+/\[^/\]+/feeds/\[^/\]+$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [Empty]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<Empty> delete( |
| core.String name, { |
| core.String $fields, |
| }) async { |
| if (name == null) { |
| throw core.ArgumentError('Parameter name is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name'); |
| |
| final _response = await _requester.request( |
| _url, |
| 'DELETE', |
| queryParams: _queryParams, |
| ); |
| return Empty.fromJson(_response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Gets details about an asset feed. |
| /// |
| /// Request parameters: |
| /// |
| /// [name] - Required. The name of the Feed and it must be in the format of: |
| /// projects/project_number/feeds/feed_id folders/folder_number/feeds/feed_id |
| /// organizations/organization_number/feeds/feed_id |
| /// Value must have pattern `^\[^/\]+/\[^/\]+/feeds/\[^/\]+$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [Feed]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<Feed> get( |
| core.String name, { |
| core.String $fields, |
| }) async { |
| if (name == null) { |
| throw core.ArgumentError('Parameter name is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name'); |
| |
| final _response = await _requester.request( |
| _url, |
| 'GET', |
| queryParams: _queryParams, |
| ); |
| return Feed.fromJson(_response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Lists all asset feeds in a parent project/folder/organization. |
| /// |
| /// Request parameters: |
| /// |
| /// [parent] - Required. The parent project/folder/organization whose feeds |
| /// are to be listed. It can only be using project/folder/organization number |
| /// (such as "folders/12345")", or a project ID (such as |
| /// "projects/my-project-id"). |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [ListFeedsResponse]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<ListFeedsResponse> list( |
| core.String parent, { |
| core.String $fields, |
| }) async { |
| if (parent == null) { |
| throw core.ArgumentError('Parameter parent is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = |
| 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/feeds'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'GET', |
| queryParams: _queryParams, |
| ); |
| return ListFeedsResponse.fromJson( |
| _response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Updates an asset feed configuration. |
| /// |
| /// [request] - The metadata request object. |
| /// |
| /// Request parameters: |
| /// |
| /// [name] - Required. The format will be |
| /// projects/{project_number}/feeds/{client-assigned_feed_identifier} or |
| /// folders/{folder_number}/feeds/{client-assigned_feed_identifier} or |
| /// organizations/{organization_number}/feeds/{client-assigned_feed_identifier} |
| /// The client-assigned feed identifier must be unique within the parent |
| /// project/folder/organization. |
| /// Value must have pattern `^\[^/\]+/\[^/\]+/feeds/\[^/\]+$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [Feed]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<Feed> patch( |
| UpdateFeedRequest request, |
| core.String name, { |
| core.String $fields, |
| }) async { |
| final _body = |
| request == null ? null : convert.json.encode(request.toJson()); |
| if (name == null) { |
| throw core.ArgumentError('Parameter name is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name'); |
| |
| final _response = await _requester.request( |
| _url, |
| 'PATCH', |
| body: _body, |
| queryParams: _queryParams, |
| ); |
| return Feed.fromJson(_response as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| class OperationsResource { |
| final commons.ApiRequester _requester; |
| |
| OperationsResource(commons.ApiRequester client) : _requester = client; |
| |
| /// Gets the latest state of a long-running operation. |
| /// |
| /// Clients can use this method to poll the operation result at intervals as |
| /// recommended by the API service. |
| /// |
| /// Request parameters: |
| /// |
| /// [name] - The name of the operation resource. |
| /// Value must have pattern `^\[^/\]+/\[^/\]+/operations/\[^/\]+/.*$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [Operation]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<Operation> get( |
| core.String name, { |
| core.String $fields, |
| }) async { |
| if (name == null) { |
| throw core.ArgumentError('Parameter name is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name'); |
| |
| final _response = await _requester.request( |
| _url, |
| 'GET', |
| queryParams: _queryParams, |
| ); |
| return Operation.fromJson(_response as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| class V1Resource { |
| final commons.ApiRequester _requester; |
| |
| V1Resource(commons.ApiRequester client) : _requester = client; |
| |
| /// Analyzes IAM policies to answer which identities have what accesses on |
| /// which resources. |
| /// |
| /// Request parameters: |
| /// |
| /// [scope] - Required. The relative name of the root asset. Only resources |
| /// and IAM policies within the scope will be analyzed. This can only be an |
| /// organization number (such as "organizations/123"), a folder number (such |
| /// as "folders/123"), a project ID (such as "projects/my-project-id"), or a |
| /// project number (such as "projects/12345"). To know how to get organization |
| /// id, visit |
| /// [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). |
| /// To know how to get folder or project id, visit |
| /// [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects). |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [analysisQuery_accessSelector_permissions] - Optional. The permissions to |
| /// appear in result. |
| /// |
| /// [analysisQuery_accessSelector_roles] - Optional. The roles to appear in |
| /// result. |
| /// |
| /// [analysisQuery_identitySelector_identity] - Required. The identity appear |
| /// in the form of members in |
| /// [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). |
| /// The examples of supported forms are: "user:mike@example.com", |
| /// "group:admins@example.com", "domain:google.com", |
| /// "serviceAccount:my-project-id@appspot.gserviceaccount.com". Notice that |
| /// wildcard characters (such as * and ?) are not supported. You must give a |
| /// specific identity. |
| /// |
| /// [analysisQuery_options_analyzeServiceAccountImpersonation] - Optional. If |
| /// true, the response will include access analysis from identities to |
| /// resources via service account impersonation. This is a very expensive |
| /// operation, because many derived queries will be executed. We highly |
| /// recommend you use AssetService.AnalyzeIamPolicyLongrunning rpc instead. |
| /// For example, if the request analyzes for which resources user A has |
| /// permission P, and there's an IAM policy states user A has |
| /// iam.serviceAccounts.getAccessToken permission to a service account SA, and |
| /// there's another IAM policy states service account SA has permission P to a |
| /// GCP folder F, then user A potentially has access to the GCP folder F. And |
| /// those advanced analysis results will be included in |
| /// AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another |
| /// example, if the request analyzes for who has permission P to a GCP folder |
| /// F, and there's an IAM policy states user A has iam.serviceAccounts.actAs |
| /// permission to a service account SA, and there's another IAM policy states |
| /// service account SA has permission P to the GCP folder F, then user A |
| /// potentially has access to the GCP folder F. And those advanced analysis |
| /// results will be included in |
| /// AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default |
| /// is false. |
| /// |
| /// [analysisQuery_options_expandGroups] - Optional. If true, the identities |
| /// section of the result will expand any Google groups appearing in an IAM |
| /// policy binding. If IamPolicyAnalysisQuery.identity_selector is specified, |
| /// the identity in the result will be determined by the selector, and this |
| /// flag is not allowed to set. Default is false. |
| /// |
| /// [analysisQuery_options_expandResources] - Optional. If true and |
| /// IamPolicyAnalysisQuery.resource_selector is not specified, the resource |
| /// section of the result will expand any resource attached to an IAM policy |
| /// to include resources lower in the resource hierarchy. For example, if the |
| /// request analyzes for which resources user A has permission P, and the |
| /// results include an IAM policy with P on a GCP folder, the results will |
| /// also include resources in that folder with permission P. If true and |
| /// IamPolicyAnalysisQuery.resource_selector is specified, the resource |
| /// section of the result will expand the specified resource to include |
| /// resources lower in the resource hierarchy. Only project or lower resources |
| /// are supported. Folder and organization resource cannot be used together |
| /// with this option. For example, if the request analyzes for which users |
| /// have permission P on a GCP project with this option enabled, the results |
| /// will include all users who have permission P on that project or any lower |
| /// resource. Default is false. |
| /// |
| /// [analysisQuery_options_expandRoles] - Optional. If true, the access |
| /// section of result will expand any roles appearing in IAM policy bindings |
| /// to include their permissions. If IamPolicyAnalysisQuery.access_selector is |
| /// specified, the access section of the result will be determined by the |
| /// selector, and this flag is not allowed to set. Default is false. |
| /// |
| /// [analysisQuery_options_outputGroupEdges] - Optional. If true, the result |
| /// will output group identity edges, starting from the binding's group |
| /// members, to any expanded identities. Default is false. |
| /// |
| /// [analysisQuery_options_outputResourceEdges] - Optional. If true, the |
| /// result will output resource edges, starting from the policy attached |
| /// resource, to any expanded resources. Default is false. |
| /// |
| /// [analysisQuery_resourceSelector_fullResourceName] - Required. The |
| /// [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) |
| /// of a resource of |
| /// [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types). |
| /// |
| /// [executionTimeout] - Optional. Amount of time executable has to complete. |
| /// See JSON representation of |
| /// [Duration](https://developers.google.com/protocol-buffers/docs/proto3#json). |
| /// If this field is set with a value less than the RPC deadline, and the |
| /// execution of your query hasn't finished in the specified execution |
| /// timeout, you will get a response with partial result. Otherwise, your |
| /// query's execution will continue until the RPC deadline. If it's not |
| /// finished until then, you will get a DEADLINE_EXCEEDED error. Default is |
| /// empty. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [AnalyzeIamPolicyResponse]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<AnalyzeIamPolicyResponse> analyzeIamPolicy( |
| core.String scope, { |
| core.List<core.String> analysisQuery_accessSelector_permissions, |
| core.List<core.String> analysisQuery_accessSelector_roles, |
| core.String analysisQuery_identitySelector_identity, |
| core.bool analysisQuery_options_analyzeServiceAccountImpersonation, |
| core.bool analysisQuery_options_expandGroups, |
| core.bool analysisQuery_options_expandResources, |
| core.bool analysisQuery_options_expandRoles, |
| core.bool analysisQuery_options_outputGroupEdges, |
| core.bool analysisQuery_options_outputResourceEdges, |
| core.String analysisQuery_resourceSelector_fullResourceName, |
| core.String executionTimeout, |
| core.String $fields, |
| }) async { |
| if (scope == null) { |
| throw core.ArgumentError('Parameter scope is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if (analysisQuery_accessSelector_permissions != null) { |
| _queryParams['analysisQuery.accessSelector.permissions'] = |
| analysisQuery_accessSelector_permissions; |
| } |
| if (analysisQuery_accessSelector_roles != null) { |
| _queryParams['analysisQuery.accessSelector.roles'] = |
| analysisQuery_accessSelector_roles; |
| } |
| if (analysisQuery_identitySelector_identity != null) { |
| _queryParams['analysisQuery.identitySelector.identity'] = [ |
| analysisQuery_identitySelector_identity |
| ]; |
| } |
| if (analysisQuery_options_analyzeServiceAccountImpersonation != null) { |
| _queryParams['analysisQuery.options.analyzeServiceAccountImpersonation'] = |
| ['${analysisQuery_options_analyzeServiceAccountImpersonation}']; |
| } |
| if (analysisQuery_options_expandGroups != null) { |
| _queryParams['analysisQuery.options.expandGroups'] = [ |
| '${analysisQuery_options_expandGroups}' |
| ]; |
| } |
| if (analysisQuery_options_expandResources != null) { |
| _queryParams['analysisQuery.options.expandResources'] = [ |
| '${analysisQuery_options_expandResources}' |
| ]; |
| } |
| if (analysisQuery_options_expandRoles != null) { |
| _queryParams['analysisQuery.options.expandRoles'] = [ |
| '${analysisQuery_options_expandRoles}' |
| ]; |
| } |
| if (analysisQuery_options_outputGroupEdges != null) { |
| _queryParams['analysisQuery.options.outputGroupEdges'] = [ |
| '${analysisQuery_options_outputGroupEdges}' |
| ]; |
| } |
| if (analysisQuery_options_outputResourceEdges != null) { |
| _queryParams['analysisQuery.options.outputResourceEdges'] = [ |
| '${analysisQuery_options_outputResourceEdges}' |
| ]; |
| } |
| if (analysisQuery_resourceSelector_fullResourceName != null) { |
| _queryParams['analysisQuery.resourceSelector.fullResourceName'] = [ |
| analysisQuery_resourceSelector_fullResourceName |
| ]; |
| } |
| if (executionTimeout != null) { |
| _queryParams['executionTimeout'] = [executionTimeout]; |
| } |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + |
| commons.Escaper.ecapeVariableReserved('$scope') + |
| ':analyzeIamPolicy'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'GET', |
| queryParams: _queryParams, |
| ); |
| return AnalyzeIamPolicyResponse.fromJson( |
| _response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Analyzes IAM policies asynchronously to answer which identities have what |
| /// accesses on which resources, and writes the analysis results to a Google |
| /// Cloud Storage or a BigQuery destination. |
| /// |
| /// For Cloud Storage destination, the output format is the JSON format that |
| /// represents a AnalyzeIamPolicyResponse. This method implements the |
| /// google.longrunning.Operation, which allows you to track the operation |
| /// status. We recommend intervals of at least 2 seconds with exponential |
| /// backoff retry to poll the operation result. The metadata contains the |
| /// request to help callers to map responses to requests. |
| /// |
| /// [request] - The metadata request object. |
| /// |
| /// Request parameters: |
| /// |
| /// [scope] - Required. The relative name of the root asset. Only resources |
| /// and IAM policies within the scope will be analyzed. This can only be an |
| /// organization number (such as "organizations/123"), a folder number (such |
| /// as "folders/123"), a project ID (such as "projects/my-project-id"), or a |
| /// project number (such as "projects/12345"). To know how to get organization |
| /// id, visit |
| /// [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). |
| /// To know how to get folder or project id, visit |
| /// [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects). |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [Operation]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<Operation> analyzeIamPolicyLongrunning( |
| AnalyzeIamPolicyLongrunningRequest request, |
| core.String scope, { |
| core.String $fields, |
| }) async { |
| final _body = |
| request == null ? null : convert.json.encode(request.toJson()); |
| if (scope == null) { |
| throw core.ArgumentError('Parameter scope is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + |
| commons.Escaper.ecapeVariableReserved('$scope') + |
| ':analyzeIamPolicyLongrunning'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'POST', |
| body: _body, |
| queryParams: _queryParams, |
| ); |
| return Operation.fromJson(_response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Batch gets the update history of assets that overlap a time window. |
| /// |
| /// For IAM_POLICY content, this API outputs history when the asset and its |
| /// attached IAM POLICY both exist. This can create gaps in the output |
| /// history. Otherwise, this API outputs history with asset in both non-delete |
| /// or deleted status. If a specified asset does not exist, this API returns |
| /// an INVALID_ARGUMENT error. |
| /// |
| /// Request parameters: |
| /// |
| /// [parent] - Required. The relative name of the root asset. It can only be |
| /// an organization number (such as "organizations/123"), a project ID (such |
| /// as "projects/my-project-id")", or a project number (such as |
| /// "projects/12345"). |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [assetNames] - A list of the full names of the assets. See: |
| /// https://cloud.google.com/asset-inventory/docs/resource-name-format |
| /// Example: |
| /// `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. |
| /// The request becomes a no-op if the asset name list is empty, and the max |
| /// size of the asset name list is 100 in one request. |
| /// |
| /// [contentType] - Optional. The content type. |
| /// Possible string values are: |
| /// - "CONTENT_TYPE_UNSPECIFIED" : Unspecified content type. |
| /// - "RESOURCE" : Resource metadata. |
| /// - "IAM_POLICY" : The actual IAM policy set on a resource. |
| /// - "ORG_POLICY" : The Cloud Organization Policy set on an asset. |
| /// - "ACCESS_POLICY" : The Cloud Access context manager Policy set on an |
| /// asset. |
| /// - "OS_INVENTORY" : The runtime OS Inventory information. |
| /// |
| /// [readTimeWindow_endTime] - End time of the time window (inclusive). If not |
| /// specified, the current timestamp is used instead. |
| /// |
| /// [readTimeWindow_startTime] - Start time of the time window (exclusive). |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [BatchGetAssetsHistoryResponse]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<BatchGetAssetsHistoryResponse> batchGetAssetsHistory( |
| core.String parent, { |
| core.List<core.String> assetNames, |
| core.String contentType, |
| core.String readTimeWindow_endTime, |
| core.String readTimeWindow_startTime, |
| core.String $fields, |
| }) async { |
| if (parent == null) { |
| throw core.ArgumentError('Parameter parent is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if (assetNames != null) { |
| _queryParams['assetNames'] = assetNames; |
| } |
| if (contentType != null) { |
| _queryParams['contentType'] = [contentType]; |
| } |
| if (readTimeWindow_endTime != null) { |
| _queryParams['readTimeWindow.endTime'] = [readTimeWindow_endTime]; |
| } |
| if (readTimeWindow_startTime != null) { |
| _queryParams['readTimeWindow.startTime'] = [readTimeWindow_startTime]; |
| } |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + |
| commons.Escaper.ecapeVariableReserved('$parent') + |
| ':batchGetAssetsHistory'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'GET', |
| queryParams: _queryParams, |
| ); |
| return BatchGetAssetsHistoryResponse.fromJson( |
| _response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Exports assets with time and resource types to a given Cloud Storage |
| /// location/BigQuery table. |
| /// |
| /// For Cloud Storage location destinations, the output format is |
| /// newline-delimited JSON. Each line represents a google.cloud.asset.v1.Asset |
| /// in the JSON format; for BigQuery table destinations, the output table |
| /// stores the fields in asset proto as columns. This API implements the |
| /// google.longrunning.Operation API , which allows you to keep track of the |
| /// export. We recommend intervals of at least 2 seconds with exponential |
| /// retry to poll the export operation result. For regular-size resource |
| /// parent, the export operation usually finishes within 5 minutes. |
| /// |
| /// [request] - The metadata request object. |
| /// |
| /// Request parameters: |
| /// |
| /// [parent] - Required. The relative name of the root asset. This can only be |
| /// an organization number (such as "organizations/123"), a project ID (such |
| /// as "projects/my-project-id"), or a project number (such as |
| /// "projects/12345"), or a folder number (such as "folders/123"). |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [Operation]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<Operation> exportAssets( |
| ExportAssetsRequest request, |
| core.String parent, { |
| core.String $fields, |
| }) async { |
| final _body = |
| request == null ? null : convert.json.encode(request.toJson()); |
| if (parent == null) { |
| throw core.ArgumentError('Parameter parent is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + |
| commons.Escaper.ecapeVariableReserved('$parent') + |
| ':exportAssets'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'POST', |
| body: _body, |
| queryParams: _queryParams, |
| ); |
| return Operation.fromJson(_response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Searches all IAM policies within the specified scope, such as a project, |
| /// folder, or organization. |
| /// |
| /// The caller must be granted the `cloudasset.assets.searchAllIamPolicies` |
| /// permission on the desired scope, otherwise the request will be rejected. |
| /// |
| /// Request parameters: |
| /// |
| /// [scope] - Required. A scope can be a project, a folder, or an |
| /// organization. The search is limited to the IAM policies within the |
| /// `scope`. The caller must be granted the |
| /// \[`cloudasset.assets.searchAllIamPolicies`\](http://cloud.google.com/asset-inventory/docs/access-control#required_permissions) |
| /// permission on the desired scope. The allowed values are: * |
| /// projects/{PROJECT_ID} (e.g., "projects/foo-bar") * |
| /// projects/{PROJECT_NUMBER} (e.g., "projects/12345678") * |
| /// folders/{FOLDER_NUMBER} (e.g., "folders/1234567") * |
| /// organizations/{ORGANIZATION_NUMBER} (e.g., "organizations/123456") |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [pageSize] - Optional. The page size for search result pagination. Page |
| /// size is capped at 500 even if a larger value is given. If set to zero, |
| /// server will pick an appropriate default. Returned results may be fewer |
| /// than requested. When this happens, there could be more results as long as |
| /// `next_page_token` is returned. |
| /// |
| /// [pageToken] - Optional. If present, retrieve the next batch of results |
| /// from the preceding call to this method. `page_token` must be the value of |
| /// `next_page_token` from the previous response. The values of all other |
| /// method parameters must be identical to those in the previous call. |
| /// |
| /// [query] - Optional. The query statement. See |
| /// [how to construct a query](https://cloud.google.com/asset-inventory/docs/searching-iam-policies#how_to_construct_a_query) |
| /// for more information. If not specified or empty, it will search all the |
| /// IAM policies within the specified `scope`. Note that the query string is |
| /// compared against each Cloud IAM policy binding, including its members, |
| /// roles, and Cloud IAM conditions. The returned Cloud IAM policies will only |
| /// contain the bindings that match your query. To learn more about the IAM |
| /// policy structure, see |
| /// [IAM policy doc](https://cloud.google.com/iam/docs/policies#structure). |
| /// Examples: * `policy:amy@gmail.com` to find IAM policy bindings that |
| /// specify user "amy@gmail.com". * `policy:roles/compute.admin` to find IAM |
| /// policy bindings that specify the Compute Admin role. * `policy:comp*` to |
| /// find IAM policy bindings that contain "comp" as a prefix of any word in |
| /// the binding. * `policy.role.permissions:storage.buckets.update` to find |
| /// IAM policy bindings that specify a role containing |
| /// "storage.buckets.update" permission. Note that if callers don't have |
| /// `iam.roles.get` access to a role's included permissions, policy bindings |
| /// that specify this role will be dropped from the search results. * |
| /// `policy.role.permissions:upd*` to find IAM policy bindings that specify a |
| /// role containing "upd" as a prefix of any word in the role permission. Note |
| /// that if callers don't have `iam.roles.get` access to a role's included |
| /// permissions, policy bindings that specify this role will be dropped from |
| /// the search results. * `resource:organizations/123456` to find IAM policy |
| /// bindings that are set on "organizations/123456". * |
| /// `resource=//cloudresourcemanager.googleapis.com/projects/myproject` to |
| /// find IAM policy bindings that are set on the project named "myproject". * |
| /// `Important` to find IAM policy bindings that contain "Important" as a word |
| /// in any of the searchable fields (except for the included permissions). * |
| /// `resource:(instance1 OR instance2) policy:amy` to find IAM policy bindings |
| /// that are set on resources "instance1" or "instance2" and also specify user |
| /// "amy". |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [SearchAllIamPoliciesResponse]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<SearchAllIamPoliciesResponse> searchAllIamPolicies( |
| core.String scope, { |
| core.int pageSize, |
| core.String pageToken, |
| core.String query, |
| core.String $fields, |
| }) async { |
| if (scope == null) { |
| throw core.ArgumentError('Parameter scope is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if (pageSize != null) { |
| _queryParams['pageSize'] = ['${pageSize}']; |
| } |
| if (pageToken != null) { |
| _queryParams['pageToken'] = [pageToken]; |
| } |
| if (query != null) { |
| _queryParams['query'] = [query]; |
| } |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + |
| commons.Escaper.ecapeVariableReserved('$scope') + |
| ':searchAllIamPolicies'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'GET', |
| queryParams: _queryParams, |
| ); |
| return SearchAllIamPoliciesResponse.fromJson( |
| _response as core.Map<core.String, core.dynamic>); |
| } |
| |
| /// Searches all Cloud resources within the specified scope, such as a |
| /// project, folder, or organization. |
| /// |
| /// The caller must be granted the `cloudasset.assets.searchAllResources` |
| /// permission on the desired scope, otherwise the request will be rejected. |
| /// |
| /// Request parameters: |
| /// |
| /// [scope] - Required. A scope can be a project, a folder, or an |
| /// organization. The search is limited to the resources within the `scope`. |
| /// The caller must be granted the |
| /// \[`cloudasset.assets.searchAllResources`\](http://cloud.google.com/asset-inventory/docs/access-control#required_permissions) |
| /// permission on the desired scope. The allowed values are: * |
| /// projects/{PROJECT_ID} (e.g., "projects/foo-bar") * |
| /// projects/{PROJECT_NUMBER} (e.g., "projects/12345678") * |
| /// folders/{FOLDER_NUMBER} (e.g., "folders/1234567") * |
| /// organizations/{ORGANIZATION_NUMBER} (e.g., "organizations/123456") |
| /// Value must have pattern `^\[^/\]+/\[^/\]+$`. |
| /// |
| /// [assetTypes] - Optional. A list of asset types that this request searches |
| /// for. If empty, it will search all the |
| /// [searchable asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#searchable_asset_types). |
| /// Regular expressions are also supported. For example: * |
| /// "compute.googleapis.com.*" snapshots resources whose asset type starts |
| /// with "compute.googleapis.com". * ".*Instance" snapshots resources whose |
| /// asset type ends with "Instance". * ".*Instance.*" snapshots resources |
| /// whose asset type contains "Instance". See |
| /// [RE2](https://github.com/google/re2/wiki/Syntax) for all supported regular |
| /// expression syntax. If the regular expression does not match any supported |
| /// asset type, an INVALID_ARGUMENT error will be returned. |
| /// |
| /// [orderBy] - Optional. A comma separated list of fields specifying the |
| /// sorting order of the results. The default order is ascending. Add " DESC" |
| /// after the field name to indicate descending order. Redundant space |
| /// characters are ignored. Example: "location DESC, name". Only string fields |
| /// in the response are sortable, including `name`, `displayName`, |
| /// `description`, `location`. All the other fields such as repeated fields |
| /// (e.g., `networkTags`), map fields (e.g., `labels`) and struct fields |
| /// (e.g., `additionalAttributes`) are not supported. |
| /// |
| /// [pageSize] - Optional. The page size for search result pagination. Page |
| /// size is capped at 500 even if a larger value is given. If set to zero, |
| /// server will pick an appropriate default. Returned results may be fewer |
| /// than requested. When this happens, there could be more results as long as |
| /// `next_page_token` is returned. |
| /// |
| /// [pageToken] - Optional. If present, then retrieve the next batch of |
| /// results from the preceding call to this method. `page_token` must be the |
| /// value of `next_page_token` from the previous response. The values of all |
| /// other method parameters, must be identical to those in the previous call. |
| /// |
| /// [query] - Optional. The query statement. See |
| /// [how to construct a query](http://cloud.google.com/asset-inventory/docs/searching-resources#how_to_construct_a_query) |
| /// for more information. If not specified or empty, it will search all the |
| /// resources within the specified `scope`. Examples: * `name:Important` to |
| /// find Cloud resources whose name contains "Important" as a word. * |
| /// `name=Important` to find the Cloud resource whose name is exactly |
| /// "Important". * `displayName:Impor*` to find Cloud resources whose display |
| /// name contains "Impor" as a prefix of any word in the field. * |
| /// `location:us-west*` to find Cloud resources whose location contains both |
| /// "us" and "west" as prefixes. * `labels:prod` to find Cloud resources whose |
| /// labels contain "prod" as a key or value. * `labels.env:prod` to find Cloud |
| /// resources that have a label "env" and its value is "prod". * |
| /// `labels.env:*` to find Cloud resources that have a label "env". * |
| /// `Important` to find Cloud resources that contain "Important" as a word in |
| /// any of the searchable fields. * `Impor*` to find Cloud resources that |
| /// contain "Impor" as a prefix of any word in any of the searchable fields. * |
| /// `Important location:(us-west1 OR global)` to find Cloud resources that |
| /// contain "Important" as a word in any of the searchable fields and are also |
| /// located in the "us-west1" region or the "global" location. |
| /// |
| /// [$fields] - Selector specifying which fields to include in a partial |
| /// response. |
| /// |
| /// Completes with a [SearchAllResourcesResponse]. |
| /// |
| /// Completes with a [commons.ApiRequestError] if the API endpoint returned an |
| /// error. |
| /// |
| /// If the used [http.Client] completes with an error when making a REST call, |
| /// this method will complete with the same error. |
| async.Future<SearchAllResourcesResponse> searchAllResources( |
| core.String scope, { |
| core.List<core.String> assetTypes, |
| core.String orderBy, |
| core.int pageSize, |
| core.String pageToken, |
| core.String query, |
| core.String $fields, |
| }) async { |
| if (scope == null) { |
| throw core.ArgumentError('Parameter scope is required.'); |
| } |
| final _queryParams = <core.String, core.List<core.String>>{}; |
| if (assetTypes != null) { |
| _queryParams['assetTypes'] = assetTypes; |
| } |
| if (orderBy != null) { |
| _queryParams['orderBy'] = [orderBy]; |
| } |
| if (pageSize != null) { |
| _queryParams['pageSize'] = ['${pageSize}']; |
| } |
| if (pageToken != null) { |
| _queryParams['pageToken'] = [pageToken]; |
| } |
| if (query != null) { |
| _queryParams['query'] = [query]; |
| } |
| if ($fields != null) { |
| _queryParams['fields'] = [$fields]; |
| } |
| |
| final _url = 'v1/' + |
| commons.Escaper.ecapeVariableReserved('$scope') + |
| ':searchAllResources'; |
| |
| final _response = await _requester.request( |
| _url, |
| 'GET', |
| queryParams: _queryParams, |
| ); |
| return SearchAllResourcesResponse.fromJson( |
| _response as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| /// Specifies roles and/or permissions to analyze, to determine both the |
| /// identities possessing them and the resources they control. |
| /// |
| /// If multiple values are specified, results will include roles or permissions |
| /// matching any of them. The total number of roles and permissions should be |
| /// equal or less than 10. |
| class AccessSelector { |
| /// The permissions to appear in result. |
| /// |
| /// Optional. |
| core.List<core.String> permissions; |
| |
| /// The roles to appear in result. |
| /// |
| /// Optional. |
| core.List<core.String> roles; |
| |
| AccessSelector(); |
| |
| AccessSelector.fromJson(core.Map _json) { |
| if (_json.containsKey('permissions')) { |
| permissions = (_json['permissions'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('roles')) { |
| roles = (_json['roles'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (permissions != null) { |
| _json['permissions'] = permissions; |
| } |
| if (roles != null) { |
| _json['roles'] = roles; |
| } |
| return _json; |
| } |
| } |
| |
| /// A request message for AssetService.AnalyzeIamPolicyLongrunning. |
| class AnalyzeIamPolicyLongrunningRequest { |
| /// The request query. |
| /// |
| /// Required. |
| IamPolicyAnalysisQuery analysisQuery; |
| |
| /// Output configuration indicating where the results will be output to. |
| /// |
| /// Required. |
| IamPolicyAnalysisOutputConfig outputConfig; |
| |
| AnalyzeIamPolicyLongrunningRequest(); |
| |
| AnalyzeIamPolicyLongrunningRequest.fromJson(core.Map _json) { |
| if (_json.containsKey('analysisQuery')) { |
| analysisQuery = IamPolicyAnalysisQuery.fromJson( |
| _json['analysisQuery'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('outputConfig')) { |
| outputConfig = IamPolicyAnalysisOutputConfig.fromJson( |
| _json['outputConfig'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (analysisQuery != null) { |
| _json['analysisQuery'] = analysisQuery.toJson(); |
| } |
| if (outputConfig != null) { |
| _json['outputConfig'] = outputConfig.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A response message for AssetService.AnalyzeIamPolicy. |
| class AnalyzeIamPolicyResponse { |
| /// Represents whether all entries in the main_analysis and |
| /// service_account_impersonation_analysis have been fully explored to answer |
| /// the query in the request. |
| core.bool fullyExplored; |
| |
| /// The main analysis that matches the original request. |
| IamPolicyAnalysis mainAnalysis; |
| |
| /// The service account impersonation analysis if |
| /// AnalyzeIamPolicyRequest.analyze_service_account_impersonation is enabled. |
| core.List<IamPolicyAnalysis> serviceAccountImpersonationAnalysis; |
| |
| AnalyzeIamPolicyResponse(); |
| |
| AnalyzeIamPolicyResponse.fromJson(core.Map _json) { |
| if (_json.containsKey('fullyExplored')) { |
| fullyExplored = _json['fullyExplored'] as core.bool; |
| } |
| if (_json.containsKey('mainAnalysis')) { |
| mainAnalysis = IamPolicyAnalysis.fromJson( |
| _json['mainAnalysis'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('serviceAccountImpersonationAnalysis')) { |
| serviceAccountImpersonationAnalysis = |
| (_json['serviceAccountImpersonationAnalysis'] as core.List) |
| .map<IamPolicyAnalysis>((value) => IamPolicyAnalysis.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (fullyExplored != null) { |
| _json['fullyExplored'] = fullyExplored; |
| } |
| if (mainAnalysis != null) { |
| _json['mainAnalysis'] = mainAnalysis.toJson(); |
| } |
| if (serviceAccountImpersonationAnalysis != null) { |
| _json['serviceAccountImpersonationAnalysis'] = |
| serviceAccountImpersonationAnalysis |
| .map((value) => value.toJson()) |
| .toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// An asset in Google Cloud. |
| /// |
| /// An asset can be any resource in the Google Cloud |
| /// [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), |
| /// a resource outside the Google Cloud resource hierarchy (such as Google |
| /// Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM |
| /// policy). See |
| /// [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) |
| /// for more information. |
| class Asset { |
| /// Please also refer to the |
| /// [access level user guide](https://cloud.google.com/access-context-manager/docs/overview#access-levels). |
| GoogleIdentityAccesscontextmanagerV1AccessLevel accessLevel; |
| |
| /// Please also refer to the |
| /// [access policy user guide](https://cloud.google.com/access-context-manager/docs/overview#access-policies). |
| GoogleIdentityAccesscontextmanagerV1AccessPolicy accessPolicy; |
| |
| /// The ancestry path of an asset in Google Cloud |
| /// [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), |
| /// represented as a list of relative resource names. |
| /// |
| /// An ancestry path starts with the closest ancestor in the hierarchy and |
| /// ends at root. If the asset is a project, folder, or organization, the |
| /// ancestry path starts from the asset itself. Example: |
| /// `["projects/123456789", "folders/5432", "organizations/1234"]` |
| core.List<core.String> ancestors; |
| |
| /// The type of the asset. |
| /// |
| /// Example: `compute.googleapis.com/Disk` See |
| /// [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) |
| /// for more information. |
| core.String assetType; |
| |
| /// A representation of the Cloud IAM policy set on a Google Cloud resource. |
| /// |
| /// There can be a maximum of one Cloud IAM policy set on any given resource. |
| /// In addition, Cloud IAM policies inherit their granted access scope from |
| /// any policies set on parent resources in the resource hierarchy. Therefore, |
| /// the effectively policy is the union of both the policy set on this |
| /// resource and each policy set on all of the resource's ancestry resource |
| /// levels in the hierarchy. See |
| /// [this topic](https://cloud.google.com/iam/docs/policies#inheritance) for |
| /// more information. |
| Policy iamPolicy; |
| |
| /// The full name of the asset. |
| /// |
| /// Example: |
| /// `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` |
| /// See |
| /// [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) |
| /// for more information. |
| core.String name; |
| |
| /// A representation of an |
| /// [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview#organization_policy). |
| /// |
| /// There can be more than one organization policy with different constraints |
| /// set on a given resource. |
| core.List<GoogleCloudOrgpolicyV1Policy> orgPolicy; |
| |
| /// A representation of runtime OS Inventory information. |
| /// |
| /// See |
| /// [this topic](https://cloud.google.com/compute/docs/instances/os-inventory-management) |
| /// for more information. |
| Inventory osInventory; |
| |
| /// A representation of the resource. |
| Resource resource; |
| |
| /// Please also refer to the |
| /// [service perimeter user guide](https://cloud.google.com/vpc-service-controls/docs/overview). |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeter servicePerimeter; |
| |
| /// The last update timestamp of an asset. |
| /// |
| /// update_time is updated when create/update/delete operation is performed. |
| core.String updateTime; |
| |
| Asset(); |
| |
| Asset.fromJson(core.Map _json) { |
| if (_json.containsKey('accessLevel')) { |
| accessLevel = GoogleIdentityAccesscontextmanagerV1AccessLevel.fromJson( |
| _json['accessLevel'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('accessPolicy')) { |
| accessPolicy = GoogleIdentityAccesscontextmanagerV1AccessPolicy.fromJson( |
| _json['accessPolicy'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('ancestors')) { |
| ancestors = (_json['ancestors'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('assetType')) { |
| assetType = _json['assetType'] as core.String; |
| } |
| if (_json.containsKey('iamPolicy')) { |
| iamPolicy = Policy.fromJson( |
| _json['iamPolicy'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| if (_json.containsKey('orgPolicy')) { |
| orgPolicy = (_json['orgPolicy'] as core.List) |
| .map<GoogleCloudOrgpolicyV1Policy>((value) => |
| GoogleCloudOrgpolicyV1Policy.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('osInventory')) { |
| osInventory = Inventory.fromJson( |
| _json['osInventory'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('resource')) { |
| resource = Resource.fromJson( |
| _json['resource'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('servicePerimeter')) { |
| servicePerimeter = |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeter.fromJson( |
| _json['servicePerimeter'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('updateTime')) { |
| updateTime = _json['updateTime'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (accessLevel != null) { |
| _json['accessLevel'] = accessLevel.toJson(); |
| } |
| if (accessPolicy != null) { |
| _json['accessPolicy'] = accessPolicy.toJson(); |
| } |
| if (ancestors != null) { |
| _json['ancestors'] = ancestors; |
| } |
| if (assetType != null) { |
| _json['assetType'] = assetType; |
| } |
| if (iamPolicy != null) { |
| _json['iamPolicy'] = iamPolicy.toJson(); |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| if (orgPolicy != null) { |
| _json['orgPolicy'] = orgPolicy.map((value) => value.toJson()).toList(); |
| } |
| if (osInventory != null) { |
| _json['osInventory'] = osInventory.toJson(); |
| } |
| if (resource != null) { |
| _json['resource'] = resource.toJson(); |
| } |
| if (servicePerimeter != null) { |
| _json['servicePerimeter'] = servicePerimeter.toJson(); |
| } |
| if (updateTime != null) { |
| _json['updateTime'] = updateTime; |
| } |
| return _json; |
| } |
| } |
| |
| /// Specifies the audit configuration for a service. |
| /// |
| /// The configuration determines which permission types are logged, and what |
| /// identities, if any, are exempted from logging. An AuditConfig must have one |
| /// or more AuditLogConfigs. If there are AuditConfigs for both `allServices` |
| /// and a specific service, the union of the two AuditConfigs is used for that |
| /// service: the log_types specified in each AuditConfig are enabled, and the |
| /// exempted_members in each AuditLogConfig are exempted. Example Policy with |
| /// multiple AuditConfigs: { "audit_configs": \[ { "service": "allServices", |
| /// "audit_log_configs": \[ { "log_type": "DATA_READ", "exempted_members": \[ |
| /// "user:jose@example.com" \] }, { "log_type": "DATA_WRITE" }, { "log_type": |
| /// "ADMIN_READ" } \] }, { "service": "sampleservice.googleapis.com", |
| /// "audit_log_configs": \[ { "log_type": "DATA_READ" }, { "log_type": |
| /// "DATA_WRITE", "exempted_members": \[ "user:aliya@example.com" \] } \] } \] } |
| /// For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ |
| /// logging. It also exempts jose@example.com from DATA_READ logging, and |
| /// aliya@example.com from DATA_WRITE logging. |
| class AuditConfig { |
| /// The configuration for logging of each type of permission. |
| core.List<AuditLogConfig> auditLogConfigs; |
| |
| /// Specifies a service that will be enabled for audit logging. |
| /// |
| /// For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. |
| /// `allServices` is a special value that covers all services. |
| core.String service; |
| |
| AuditConfig(); |
| |
| AuditConfig.fromJson(core.Map _json) { |
| if (_json.containsKey('auditLogConfigs')) { |
| auditLogConfigs = (_json['auditLogConfigs'] as core.List) |
| .map<AuditLogConfig>((value) => AuditLogConfig.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('service')) { |
| service = _json['service'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (auditLogConfigs != null) { |
| _json['auditLogConfigs'] = |
| auditLogConfigs.map((value) => value.toJson()).toList(); |
| } |
| if (service != null) { |
| _json['service'] = service; |
| } |
| return _json; |
| } |
| } |
| |
| /// Provides the configuration for logging a type of permissions. |
| /// |
| /// Example: { "audit_log_configs": \[ { "log_type": "DATA_READ", |
| /// "exempted_members": \[ "user:jose@example.com" \] }, { "log_type": |
| /// "DATA_WRITE" } \] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while |
| /// exempting jose@example.com from DATA_READ logging. |
| class AuditLogConfig { |
| /// Specifies the identities that do not cause logging for this type of |
| /// permission. |
| /// |
| /// Follows the same format of Binding.members. |
| core.List<core.String> exemptedMembers; |
| |
| /// The log type that this config enables. |
| /// Possible string values are: |
| /// - "LOG_TYPE_UNSPECIFIED" : Default case. Should never be this. |
| /// - "ADMIN_READ" : Admin reads. Example: CloudIAM getIamPolicy |
| /// - "DATA_WRITE" : Data writes. Example: CloudSQL Users create |
| /// - "DATA_READ" : Data reads. Example: CloudSQL Users list |
| core.String logType; |
| |
| AuditLogConfig(); |
| |
| AuditLogConfig.fromJson(core.Map _json) { |
| if (_json.containsKey('exemptedMembers')) { |
| exemptedMembers = (_json['exemptedMembers'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('logType')) { |
| logType = _json['logType'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (exemptedMembers != null) { |
| _json['exemptedMembers'] = exemptedMembers; |
| } |
| if (logType != null) { |
| _json['logType'] = logType; |
| } |
| return _json; |
| } |
| } |
| |
| /// Batch get assets history response. |
| class BatchGetAssetsHistoryResponse { |
| /// A list of assets with valid time windows. |
| core.List<TemporalAsset> assets; |
| |
| BatchGetAssetsHistoryResponse(); |
| |
| BatchGetAssetsHistoryResponse.fromJson(core.Map _json) { |
| if (_json.containsKey('assets')) { |
| assets = (_json['assets'] as core.List) |
| .map<TemporalAsset>((value) => TemporalAsset.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (assets != null) { |
| _json['assets'] = assets.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A BigQuery destination for exporting assets to. |
| class BigQueryDestination { |
| /// The BigQuery dataset in format "projects/projectId/datasets/datasetId", to |
| /// which the snapshot result should be exported. |
| /// |
| /// If this dataset does not exist, the export call returns an |
| /// INVALID_ARGUMENT error. |
| /// |
| /// Required. |
| core.String dataset; |
| |
| /// If the destination table already exists and this flag is `TRUE`, the table |
| /// will be overwritten by the contents of assets snapshot. |
| /// |
| /// If the flag is `FALSE` or unset and the destination table already exists, |
| /// the export call returns an INVALID_ARGUMEMT error. |
| core.bool force; |
| |
| /// \[partition_spec\] determines whether to export to partitioned table(s) |
| /// and how to partition the data. |
| /// |
| /// If \[partition_spec\] is unset or \[partition_spec.partition_key\] is |
| /// unset or `PARTITION_KEY_UNSPECIFIED`, the snapshot results will be |
| /// exported to non-partitioned table(s). \[force\] will decide whether to |
| /// overwrite existing table(s). If \[partition_spec\] is specified. First, |
| /// the snapshot results will be written to partitioned table(s) with two |
| /// additional timestamp columns, readTime and requestTime, one of which will |
| /// be the partition key. Secondly, in the case when any destination table |
| /// already exists, it will first try to update existing table's schema as |
| /// necessary by appending additional columns. Then, if \[force\] is `TRUE`, |
| /// the corresponding partition will be overwritten by the snapshot results |
| /// (data in different partitions will remain intact); if \[force\] is unset |
| /// or `FALSE`, it will append the data. An error will be returned if the |
| /// schema update or data appension fails. |
| PartitionSpec partitionSpec; |
| |
| /// If this flag is `TRUE`, the snapshot results will be written to one or |
| /// multiple tables, each of which contains results of one asset type. |
| /// |
| /// The \[force\] and \[partition_spec\] fields will apply to each of them. |
| /// Field \[table\] will be concatenated with "_" and the asset type names |
| /// (see https://cloud.google.com/asset-inventory/docs/supported-asset-types |
| /// for supported asset types) to construct per-asset-type table names, in |
| /// which all non-alphanumeric characters like "." and "/" will be substituted |
| /// by "_". Example: if field \[table\] is "mytable" and snapshot results |
| /// contain "storage.googleapis.com/Bucket" assets, the corresponding table |
| /// name will be "mytable_storage_googleapis_com_Bucket". If any of these |
| /// tables does not exist, a new table with the concatenated name will be |
| /// created. When \[content_type\] in the ExportAssetsRequest is `RESOURCE`, |
| /// the schema of each table will include RECORD-type columns mapped to the |
| /// nested fields in the Asset.resource.data field of that asset type (up to |
| /// the 15 nested level BigQuery supports |
| /// (https://cloud.google.com/bigquery/docs/nested-repeated#limitations)). The |
| /// fields in >15 nested levels will be stored in JSON format string as a |
| /// child column of its parent RECORD column. If error occurs when exporting |
| /// to any table, the whole export call will return an error but the export |
| /// results that already succeed will persist. Example: if exporting to |
| /// table_type_A succeeds when exporting to table_type_B fails during one |
| /// export call, the results in table_type_A will persist and there will not |
| /// be partial results persisting in a table. |
| core.bool separateTablesPerAssetType; |
| |
| /// The BigQuery table to which the snapshot result should be written. |
| /// |
| /// If this table does not exist, a new table with the given name will be |
| /// created. |
| /// |
| /// Required. |
| core.String table; |
| |
| BigQueryDestination(); |
| |
| BigQueryDestination.fromJson(core.Map _json) { |
| if (_json.containsKey('dataset')) { |
| dataset = _json['dataset'] as core.String; |
| } |
| if (_json.containsKey('force')) { |
| force = _json['force'] as core.bool; |
| } |
| if (_json.containsKey('partitionSpec')) { |
| partitionSpec = PartitionSpec.fromJson( |
| _json['partitionSpec'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('separateTablesPerAssetType')) { |
| separateTablesPerAssetType = |
| _json['separateTablesPerAssetType'] as core.bool; |
| } |
| if (_json.containsKey('table')) { |
| table = _json['table'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (dataset != null) { |
| _json['dataset'] = dataset; |
| } |
| if (force != null) { |
| _json['force'] = force; |
| } |
| if (partitionSpec != null) { |
| _json['partitionSpec'] = partitionSpec.toJson(); |
| } |
| if (separateTablesPerAssetType != null) { |
| _json['separateTablesPerAssetType'] = separateTablesPerAssetType; |
| } |
| if (table != null) { |
| _json['table'] = table; |
| } |
| return _json; |
| } |
| } |
| |
| /// Associates `members` with a `role`. |
| class Binding { |
| /// The condition that is associated with this binding. |
| /// |
| /// If the condition evaluates to `true`, then this binding applies to the |
| /// current request. If the condition evaluates to `false`, then this binding |
| /// does not apply to the current request. However, a different role binding |
| /// might grant the same role to one or more of the members in this binding. |
| /// To learn which resources support conditions in their IAM policies, see the |
| /// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). |
| Expr condition; |
| |
| /// Specifies the identities requesting access for a Cloud Platform resource. |
| /// |
| /// `members` can have the following values: * `allUsers`: A special |
| /// identifier that represents anyone who is on the internet; with or without |
| /// a Google account. * `allAuthenticatedUsers`: A special identifier that |
| /// represents anyone who is authenticated with a Google account or a service |
| /// account. * `user:{emailid}`: An email address that represents a specific |
| /// Google account. For example, `alice@example.com` . * |
| /// `serviceAccount:{emailid}`: An email address that represents a service |
| /// account. For example, `my-other-app@appspot.gserviceaccount.com`. * |
| /// `group:{emailid}`: An email address that represents a Google group. For |
| /// example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: |
| /// An email address (plus unique identifier) representing a user that has |
| /// been recently deleted. For example, |
| /// `alice@example.com?uid=123456789012345678901`. If the user is recovered, |
| /// this value reverts to `user:{emailid}` and the recovered user retains the |
| /// role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: |
| /// An email address (plus unique identifier) representing a service account |
| /// that has been recently deleted. For example, |
| /// `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If |
| /// the service account is undeleted, this value reverts to |
| /// `serviceAccount:{emailid}` and the undeleted service account retains the |
| /// role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email |
| /// address (plus unique identifier) representing a Google group that has been |
| /// recently deleted. For example, |
| /// `admins@example.com?uid=123456789012345678901`. If the group is recovered, |
| /// this value reverts to `group:{emailid}` and the recovered group retains |
| /// the role in the binding. * `domain:{domain}`: The G Suite domain (primary) |
| /// that represents all the users of that domain. For example, `google.com` or |
| /// `example.com`. |
| core.List<core.String> members; |
| |
| /// Role that is assigned to `members`. |
| /// |
| /// For example, `roles/viewer`, `roles/editor`, or `roles/owner`. |
| core.String role; |
| |
| Binding(); |
| |
| Binding.fromJson(core.Map _json) { |
| if (_json.containsKey('condition')) { |
| condition = Expr.fromJson( |
| _json['condition'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('members')) { |
| members = (_json['members'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('role')) { |
| role = _json['role'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (condition != null) { |
| _json['condition'] = condition.toJson(); |
| } |
| if (members != null) { |
| _json['members'] = members; |
| } |
| if (role != null) { |
| _json['role'] = role; |
| } |
| return _json; |
| } |
| } |
| |
| /// Create asset feed request. |
| class CreateFeedRequest { |
| /// The feed details. |
| /// |
| /// The field `name` must be empty and it will be generated in the format of: |
| /// projects/project_number/feeds/feed_id folders/folder_number/feeds/feed_id |
| /// organizations/organization_number/feeds/feed_id |
| /// |
| /// Required. |
| Feed feed; |
| |
| /// This is the client-assigned asset feed identifier and it needs to be |
| /// unique under a specific parent project/folder/organization. |
| /// |
| /// Required. |
| core.String feedId; |
| |
| CreateFeedRequest(); |
| |
| CreateFeedRequest.fromJson(core.Map _json) { |
| if (_json.containsKey('feed')) { |
| feed = |
| Feed.fromJson(_json['feed'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('feedId')) { |
| feedId = _json['feedId'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (feed != null) { |
| _json['feed'] = feed.toJson(); |
| } |
| if (feedId != null) { |
| _json['feedId'] = feedId; |
| } |
| return _json; |
| } |
| } |
| |
| /// A generic empty message that you can re-use to avoid defining duplicated |
| /// empty messages in your APIs. |
| /// |
| /// A typical example is to use it as the request or the response type of an API |
| /// method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns |
| /// (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON |
| /// object `{}`. |
| class Empty { |
| Empty(); |
| |
| Empty.fromJson( |
| // ignore: avoid_unused_constructor_parameters |
| core.Map _json); |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| return _json; |
| } |
| } |
| |
| /// Explanation about the IAM policy search result. |
| class Explanation { |
| /// The map from roles to their included permissions that match the permission |
| /// query (i.e., a query containing `policy.role.permissions:`). |
| /// |
| /// Example: if query `policy.role.permissions:compute.disk.get` matches a |
| /// policy binding that contains owner role, the matched_permissions will be |
| /// `{"roles/owner": ["compute.disk.get"]}`. The roles can also be found in |
| /// the returned `policy` bindings. Note that the map is populated only for |
| /// requests with permission queries. |
| core.Map<core.String, Permissions> matchedPermissions; |
| |
| Explanation(); |
| |
| Explanation.fromJson(core.Map _json) { |
| if (_json.containsKey('matchedPermissions')) { |
| matchedPermissions = (_json['matchedPermissions'] as core.Map) |
| .cast<core.String, core.Map>() |
| .map( |
| (key, item) => core.MapEntry( |
| key, |
| Permissions.fromJson(item as core.Map<core.String, core.dynamic>), |
| ), |
| ); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (matchedPermissions != null) { |
| _json['matchedPermissions'] = matchedPermissions |
| .map((key, item) => core.MapEntry(key, item.toJson())); |
| } |
| return _json; |
| } |
| } |
| |
| /// Export asset request. |
| class ExportAssetsRequest { |
| /// A list of asset types to take a snapshot for. |
| /// |
| /// For example: "compute.googleapis.com/Disk". Regular expressions are also |
| /// supported. For example: * "compute.googleapis.com.*" snapshots resources |
| /// whose asset type starts with "compute.googleapis.com". * ".*Instance" |
| /// snapshots resources whose asset type ends with "Instance". * |
| /// ".*Instance.*" snapshots resources whose asset type contains "Instance". |
| /// See [RE2](https://github.com/google/re2/wiki/Syntax) for all supported |
| /// regular expression syntax. If the regular expression does not match any |
| /// supported asset type, an INVALID_ARGUMENT error will be returned. If |
| /// specified, only matching assets will be returned, otherwise, it will |
| /// snapshot all asset types. See |
| /// [Introduction to Cloud Asset Inventory](https://cloud.google.com/asset-inventory/docs/overview) |
| /// for all supported asset types. |
| core.List<core.String> assetTypes; |
| |
| /// Asset content type. |
| /// |
| /// If not specified, no content but the asset name will be returned. |
| /// Possible string values are: |
| /// - "CONTENT_TYPE_UNSPECIFIED" : Unspecified content type. |
| /// - "RESOURCE" : Resource metadata. |
| /// - "IAM_POLICY" : The actual IAM policy set on a resource. |
| /// - "ORG_POLICY" : The Cloud Organization Policy set on an asset. |
| /// - "ACCESS_POLICY" : The Cloud Access context manager Policy set on an |
| /// asset. |
| /// - "OS_INVENTORY" : The runtime OS Inventory information. |
| core.String contentType; |
| |
| /// Output configuration indicating where the results will be output to. |
| /// |
| /// Required. |
| OutputConfig outputConfig; |
| |
| /// Timestamp to take an asset snapshot. |
| /// |
| /// This can only be set to a timestamp between the current time and the |
| /// current time minus 35 days (inclusive). If not specified, the current time |
| /// will be used. Due to delays in resource data collection and indexing, |
| /// there is a volatile window during which running the same query may get |
| /// different results. |
| core.String readTime; |
| |
| ExportAssetsRequest(); |
| |
| ExportAssetsRequest.fromJson(core.Map _json) { |
| if (_json.containsKey('assetTypes')) { |
| assetTypes = (_json['assetTypes'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('contentType')) { |
| contentType = _json['contentType'] as core.String; |
| } |
| if (_json.containsKey('outputConfig')) { |
| outputConfig = OutputConfig.fromJson( |
| _json['outputConfig'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('readTime')) { |
| readTime = _json['readTime'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (assetTypes != null) { |
| _json['assetTypes'] = assetTypes; |
| } |
| if (contentType != null) { |
| _json['contentType'] = contentType; |
| } |
| if (outputConfig != null) { |
| _json['outputConfig'] = outputConfig.toJson(); |
| } |
| if (readTime != null) { |
| _json['readTime'] = readTime; |
| } |
| return _json; |
| } |
| } |
| |
| /// Represents a textual expression in the Common Expression Language (CEL) |
| /// syntax. |
| /// |
| /// CEL is a C-like expression language. The syntax and semantics of CEL are |
| /// documented at https://github.com/google/cel-spec. Example (Comparison): |
| /// title: "Summary size limit" description: "Determines if a summary is less |
| /// than 100 chars" expression: "document.summary.size() < 100" Example |
| /// (Equality): title: "Requestor is owner" description: "Determines if |
| /// requestor is the document owner" expression: "document.owner == |
| /// request.auth.claims.email" Example (Logic): title: "Public documents" |
| /// description: "Determine whether the document should be publicly visible" |
| /// expression: "document.type != 'private' && document.type != 'internal'" |
| /// Example (Data Manipulation): title: "Notification string" description: |
| /// "Create a notification string with a timestamp." expression: "'New message |
| /// received at ' + string(document.create_time)" The exact variables and |
| /// functions that may be referenced within an expression are determined by the |
| /// service that evaluates it. See the service documentation for additional |
| /// information. |
| class Expr { |
| /// Description of the expression. |
| /// |
| /// This is a longer text which describes the expression, e.g. when hovered |
| /// over it in a UI. |
| /// |
| /// Optional. |
| core.String description; |
| |
| /// Textual representation of an expression in Common Expression Language |
| /// syntax. |
| core.String expression; |
| |
| /// String indicating the location of the expression for error reporting, e.g. |
| /// a file name and a position in the file. |
| /// |
| /// Optional. |
| core.String location; |
| |
| /// Title for the expression, i.e. a short string describing its purpose. |
| /// |
| /// This can be used e.g. in UIs which allow to enter the expression. |
| /// |
| /// Optional. |
| core.String title; |
| |
| Expr(); |
| |
| Expr.fromJson(core.Map _json) { |
| if (_json.containsKey('description')) { |
| description = _json['description'] as core.String; |
| } |
| if (_json.containsKey('expression')) { |
| expression = _json['expression'] as core.String; |
| } |
| if (_json.containsKey('location')) { |
| location = _json['location'] as core.String; |
| } |
| if (_json.containsKey('title')) { |
| title = _json['title'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (description != null) { |
| _json['description'] = description; |
| } |
| if (expression != null) { |
| _json['expression'] = expression; |
| } |
| if (location != null) { |
| _json['location'] = location; |
| } |
| if (title != null) { |
| _json['title'] = title; |
| } |
| return _json; |
| } |
| } |
| |
| /// An asset feed used to export asset updates to a destinations. |
| /// |
| /// An asset feed filter controls what updates are exported. The asset feed must |
| /// be created within a project, organization, or folder. Supported destinations |
| /// are: Pub/Sub topics. |
| class Feed { |
| /// A list of the full names of the assets to receive updates. |
| /// |
| /// You must specify either or both of asset_names and asset_types. Only asset |
| /// updates matching specified asset_names or asset_types are exported to the |
| /// feed. Example: |
| /// `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. |
| /// See |
| /// [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) |
| /// for more info. |
| core.List<core.String> assetNames; |
| |
| /// A list of types of the assets to receive updates. |
| /// |
| /// You must specify either or both of asset_names and asset_types. Only asset |
| /// updates matching specified asset_names or asset_types are exported to the |
| /// feed. Example: `"compute.googleapis.com/Disk"` See |
| /// [this topic](https://cloud.google.com/asset-inventory/docs/supported-asset-types) |
| /// for a list of all supported asset types. |
| core.List<core.String> assetTypes; |
| |
| /// A condition which determines whether an asset update should be published. |
| /// |
| /// If specified, an asset will be returned only when the expression evaluates |
| /// to true. When set, `expression` field in the `Expr` must be a valid |
| /// [CEL expression](https://github.com/google/cel-spec) on a TemporalAsset |
| /// with name `temporal_asset`. Example: a Feed with expression |
| /// ("temporal_asset.deleted == true") will only publish Asset deletions. |
| /// Other fields of `Expr` are optional. See our |
| /// [user guide](https://cloud.google.com/asset-inventory/docs/monitoring-asset-changes#feed_with_condition) |
| /// for detailed instructions. |
| Expr condition; |
| |
| /// Asset content type. |
| /// |
| /// If not specified, no content but the asset name and type will be returned. |
| /// Possible string values are: |
| /// - "CONTENT_TYPE_UNSPECIFIED" : Unspecified content type. |
| /// - "RESOURCE" : Resource metadata. |
| /// - "IAM_POLICY" : The actual IAM policy set on a resource. |
| /// - "ORG_POLICY" : The Cloud Organization Policy set on an asset. |
| /// - "ACCESS_POLICY" : The Cloud Access context manager Policy set on an |
| /// asset. |
| /// - "OS_INVENTORY" : The runtime OS Inventory information. |
| core.String contentType; |
| |
| /// Feed output configuration defining where the asset updates are published |
| /// to. |
| /// |
| /// Required. |
| FeedOutputConfig feedOutputConfig; |
| |
| /// The format will be |
| /// projects/{project_number}/feeds/{client-assigned_feed_identifier} or |
| /// folders/{folder_number}/feeds/{client-assigned_feed_identifier} or |
| /// organizations/{organization_number}/feeds/{client-assigned_feed_identifier} |
| /// The client-assigned feed identifier must be unique within the parent |
| /// project/folder/organization. |
| /// |
| /// Required. |
| core.String name; |
| |
| Feed(); |
| |
| Feed.fromJson(core.Map _json) { |
| if (_json.containsKey('assetNames')) { |
| assetNames = (_json['assetNames'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('assetTypes')) { |
| assetTypes = (_json['assetTypes'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('condition')) { |
| condition = Expr.fromJson( |
| _json['condition'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('contentType')) { |
| contentType = _json['contentType'] as core.String; |
| } |
| if (_json.containsKey('feedOutputConfig')) { |
| feedOutputConfig = FeedOutputConfig.fromJson( |
| _json['feedOutputConfig'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (assetNames != null) { |
| _json['assetNames'] = assetNames; |
| } |
| if (assetTypes != null) { |
| _json['assetTypes'] = assetTypes; |
| } |
| if (condition != null) { |
| _json['condition'] = condition.toJson(); |
| } |
| if (contentType != null) { |
| _json['contentType'] = contentType; |
| } |
| if (feedOutputConfig != null) { |
| _json['feedOutputConfig'] = feedOutputConfig.toJson(); |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| return _json; |
| } |
| } |
| |
| /// Output configuration for asset feed destination. |
| class FeedOutputConfig { |
| /// Destination on Pub/Sub. |
| PubsubDestination pubsubDestination; |
| |
| FeedOutputConfig(); |
| |
| FeedOutputConfig.fromJson(core.Map _json) { |
| if (_json.containsKey('pubsubDestination')) { |
| pubsubDestination = PubsubDestination.fromJson( |
| _json['pubsubDestination'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (pubsubDestination != null) { |
| _json['pubsubDestination'] = pubsubDestination.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A Cloud Storage location. |
| class GcsDestination { |
| /// The uri of the Cloud Storage object. |
| /// |
| /// It's the same uri that is used by gsutil. Example: |
| /// "gs://bucket_name/object_name". See |
| /// [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) |
| /// for more information. |
| core.String uri; |
| |
| /// The uri prefix of all generated Cloud Storage objects. |
| /// |
| /// Example: "gs://bucket_name/object_name_prefix". Each object uri is in |
| /// format: "gs://bucket_name/object_name_prefix// and only contains assets |
| /// for that type. starts from 0. Example: |
| /// "gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0" is the |
| /// first shard of output objects containing all compute.googleapis.com/Disk |
| /// assets. An INVALID_ARGUMENT error will be returned if file with the same |
| /// name "gs://bucket_name/object_name_prefix" already exists. |
| core.String uriPrefix; |
| |
| GcsDestination(); |
| |
| GcsDestination.fromJson(core.Map _json) { |
| if (_json.containsKey('uri')) { |
| uri = _json['uri'] as core.String; |
| } |
| if (_json.containsKey('uriPrefix')) { |
| uriPrefix = _json['uriPrefix'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (uri != null) { |
| _json['uri'] = uri; |
| } |
| if (uriPrefix != null) { |
| _json['uriPrefix'] = uriPrefix; |
| } |
| return _json; |
| } |
| } |
| |
| /// An IAM role or permission under analysis. |
| class GoogleCloudAssetV1Access { |
| /// The analysis state of this access. |
| IamPolicyAnalysisState analysisState; |
| |
| /// The permission. |
| core.String permission; |
| |
| /// The role. |
| core.String role; |
| |
| GoogleCloudAssetV1Access(); |
| |
| GoogleCloudAssetV1Access.fromJson(core.Map _json) { |
| if (_json.containsKey('analysisState')) { |
| analysisState = IamPolicyAnalysisState.fromJson( |
| _json['analysisState'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('permission')) { |
| permission = _json['permission'] as core.String; |
| } |
| if (_json.containsKey('role')) { |
| role = _json['role'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (analysisState != null) { |
| _json['analysisState'] = analysisState.toJson(); |
| } |
| if (permission != null) { |
| _json['permission'] = permission; |
| } |
| if (role != null) { |
| _json['role'] = role; |
| } |
| return _json; |
| } |
| } |
| |
| /// An access control list, derived from the above IAM policy binding, which |
| /// contains a set of resources and accesses. |
| /// |
| /// May include one item from each set to compose an access control entry. |
| /// NOTICE that there could be multiple access control lists for one IAM policy |
| /// binding. The access control lists are created based on resource and access |
| /// combinations. For example, assume we have the following cases in one IAM |
| /// policy binding: - Permission P1 and P2 apply to resource R1 and R2; - |
| /// Permission P3 applies to resource R2 and R3; This will result in the |
| /// following access control lists: - AccessControlList 1: \[R1, R2\], \[P1, |
| /// P2\] - AccessControlList 2: \[R2, R3\], \[P3\] |
| class GoogleCloudAssetV1AccessControlList { |
| /// The accesses that match one of the following conditions: - The |
| /// access_selector, if it is specified in request; - Otherwise, access |
| /// specifiers reachable from the policy binding's role. |
| core.List<GoogleCloudAssetV1Access> accesses; |
| |
| /// Resource edges of the graph starting from the policy attached resource to |
| /// any descendant resources. |
| /// |
| /// The Edge.source_node contains the full resource name of a parent resource |
| /// and Edge.target_node contains the full resource name of a child resource. |
| /// This field is present only if the output_resource_edges option is enabled |
| /// in request. |
| core.List<GoogleCloudAssetV1Edge> resourceEdges; |
| |
| /// The resources that match one of the following conditions: - The |
| /// resource_selector, if it is specified in request; - Otherwise, resources |
| /// reachable from the policy attached resource. |
| core.List<GoogleCloudAssetV1Resource> resources; |
| |
| GoogleCloudAssetV1AccessControlList(); |
| |
| GoogleCloudAssetV1AccessControlList.fromJson(core.Map _json) { |
| if (_json.containsKey('accesses')) { |
| accesses = (_json['accesses'] as core.List) |
| .map<GoogleCloudAssetV1Access>((value) => |
| GoogleCloudAssetV1Access.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('resourceEdges')) { |
| resourceEdges = (_json['resourceEdges'] as core.List) |
| .map<GoogleCloudAssetV1Edge>((value) => |
| GoogleCloudAssetV1Edge.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('resources')) { |
| resources = (_json['resources'] as core.List) |
| .map<GoogleCloudAssetV1Resource>((value) => |
| GoogleCloudAssetV1Resource.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (accesses != null) { |
| _json['accesses'] = accesses.map((value) => value.toJson()).toList(); |
| } |
| if (resourceEdges != null) { |
| _json['resourceEdges'] = |
| resourceEdges.map((value) => value.toJson()).toList(); |
| } |
| if (resources != null) { |
| _json['resources'] = resources.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A BigQuery destination. |
| class GoogleCloudAssetV1BigQueryDestination { |
| /// The BigQuery dataset in format "projects/projectId/datasets/datasetId", to |
| /// which the analysis results should be exported. |
| /// |
| /// If this dataset does not exist, the export call will return an |
| /// INVALID_ARGUMENT error. |
| /// |
| /// Required. |
| core.String dataset; |
| |
| /// The partition key for BigQuery partitioned table. |
| /// Possible string values are: |
| /// - "PARTITION_KEY_UNSPECIFIED" : Unspecified partition key. Tables won't be |
| /// partitioned using this option. |
| /// - "REQUEST_TIME" : The time when the request is received. If specified as |
| /// partition key, the result table(s) is partitoned by the RequestTime |
| /// column, an additional timestamp column representing when the request was |
| /// received. |
| core.String partitionKey; |
| |
| /// The prefix of the BigQuery tables to which the analysis results will be |
| /// written. |
| /// |
| /// Tables will be created based on this table_prefix if not exist: * |
| /// _analysis table will contain export operation's metadata. * |
| /// _analysis_result will contain all the IamPolicyAnalysisResult. When |
| /// \[partition_key\] is specified, both tables will be partitioned based on |
| /// the \[partition_key\]. |
| /// |
| /// Required. |
| core.String tablePrefix; |
| |
| /// Specifies the action that occurs if the destination table or partition |
| /// already exists. |
| /// |
| /// The following values are supported: * WRITE_TRUNCATE: If the table or |
| /// partition already exists, BigQuery overwrites the entire table or all the |
| /// partitions data. * WRITE_APPEND: If the table or partition already exists, |
| /// BigQuery appends the data to the table or the latest partition. * |
| /// WRITE_EMPTY: If the table already exists and contains data, an error is |
| /// returned. The default value is WRITE_APPEND. Each action is atomic and |
| /// only occurs if BigQuery is able to complete the job successfully. Details |
| /// are at |
| /// https://cloud.google.com/bigquery/docs/loading-data-local#appending_to_or_overwriting_a_table_using_a_local_file. |
| /// |
| /// Optional. |
| core.String writeDisposition; |
| |
| GoogleCloudAssetV1BigQueryDestination(); |
| |
| GoogleCloudAssetV1BigQueryDestination.fromJson(core.Map _json) { |
| if (_json.containsKey('dataset')) { |
| dataset = _json['dataset'] as core.String; |
| } |
| if (_json.containsKey('partitionKey')) { |
| partitionKey = _json['partitionKey'] as core.String; |
| } |
| if (_json.containsKey('tablePrefix')) { |
| tablePrefix = _json['tablePrefix'] as core.String; |
| } |
| if (_json.containsKey('writeDisposition')) { |
| writeDisposition = _json['writeDisposition'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (dataset != null) { |
| _json['dataset'] = dataset; |
| } |
| if (partitionKey != null) { |
| _json['partitionKey'] = partitionKey; |
| } |
| if (tablePrefix != null) { |
| _json['tablePrefix'] = tablePrefix; |
| } |
| if (writeDisposition != null) { |
| _json['writeDisposition'] = writeDisposition; |
| } |
| return _json; |
| } |
| } |
| |
| /// A directional edge. |
| class GoogleCloudAssetV1Edge { |
| /// The source node of the edge. |
| /// |
| /// For example, it could be a full resource name for a resource node or an |
| /// email of an identity. |
| core.String sourceNode; |
| |
| /// The target node of the edge. |
| /// |
| /// For example, it could be a full resource name for a resource node or an |
| /// email of an identity. |
| core.String targetNode; |
| |
| GoogleCloudAssetV1Edge(); |
| |
| GoogleCloudAssetV1Edge.fromJson(core.Map _json) { |
| if (_json.containsKey('sourceNode')) { |
| sourceNode = _json['sourceNode'] as core.String; |
| } |
| if (_json.containsKey('targetNode')) { |
| targetNode = _json['targetNode'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (sourceNode != null) { |
| _json['sourceNode'] = sourceNode; |
| } |
| if (targetNode != null) { |
| _json['targetNode'] = targetNode; |
| } |
| return _json; |
| } |
| } |
| |
| /// A Cloud Storage location. |
| class GoogleCloudAssetV1GcsDestination { |
| /// The uri of the Cloud Storage object. |
| /// |
| /// It's the same uri that is used by gsutil. For example: |
| /// "gs://bucket_name/object_name". See \[Quickstart: Using the gsutil |
| /// tool\](https://cloud.google.com/storage/docs/quickstart-gsutil) for |
| /// examples. |
| /// |
| /// Required. |
| core.String uri; |
| |
| GoogleCloudAssetV1GcsDestination(); |
| |
| GoogleCloudAssetV1GcsDestination.fromJson(core.Map _json) { |
| if (_json.containsKey('uri')) { |
| uri = _json['uri'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (uri != null) { |
| _json['uri'] = uri; |
| } |
| return _json; |
| } |
| } |
| |
| /// An identity under analysis. |
| class GoogleCloudAssetV1Identity { |
| /// The analysis state of this identity. |
| IamPolicyAnalysisState analysisState; |
| |
| /// The identity name in any form of members appear in |
| /// [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding), |
| /// such as: - user:foo@google.com - group:group1@google.com - |
| /// serviceAccount:s1@prj1.iam.gserviceaccount.com - |
| /// projectOwner:some_project_id - domain:google.com - allUsers - etc. |
| core.String name; |
| |
| GoogleCloudAssetV1Identity(); |
| |
| GoogleCloudAssetV1Identity.fromJson(core.Map _json) { |
| if (_json.containsKey('analysisState')) { |
| analysisState = IamPolicyAnalysisState.fromJson( |
| _json['analysisState'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (analysisState != null) { |
| _json['analysisState'] = analysisState.toJson(); |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| return _json; |
| } |
| } |
| |
| /// The identities and group edges. |
| class GoogleCloudAssetV1IdentityList { |
| /// Group identity edges of the graph starting from the binding's group |
| /// members to any node of the identities. |
| /// |
| /// The Edge.source_node contains a group, such as `group:parent@google.com`. |
| /// The Edge.target_node contains a member of the group, such as |
| /// `group:child@google.com` or `user:foo@google.com`. This field is present |
| /// only if the output_group_edges option is enabled in request. |
| core.List<GoogleCloudAssetV1Edge> groupEdges; |
| |
| /// Only the identities that match one of the following conditions will be |
| /// presented: - The identity_selector, if it is specified in request; - |
| /// Otherwise, identities reachable from the policy binding's members. |
| core.List<GoogleCloudAssetV1Identity> identities; |
| |
| GoogleCloudAssetV1IdentityList(); |
| |
| GoogleCloudAssetV1IdentityList.fromJson(core.Map _json) { |
| if (_json.containsKey('groupEdges')) { |
| groupEdges = (_json['groupEdges'] as core.List) |
| .map<GoogleCloudAssetV1Edge>((value) => |
| GoogleCloudAssetV1Edge.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('identities')) { |
| identities = (_json['identities'] as core.List) |
| .map<GoogleCloudAssetV1Identity>((value) => |
| GoogleCloudAssetV1Identity.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (groupEdges != null) { |
| _json['groupEdges'] = groupEdges.map((value) => value.toJson()).toList(); |
| } |
| if (identities != null) { |
| _json['identities'] = identities.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A Google Cloud resource under analysis. |
| class GoogleCloudAssetV1Resource { |
| /// The analysis state of this resource. |
| IamPolicyAnalysisState analysisState; |
| |
| /// The |
| /// [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) |
| core.String fullResourceName; |
| |
| GoogleCloudAssetV1Resource(); |
| |
| GoogleCloudAssetV1Resource.fromJson(core.Map _json) { |
| if (_json.containsKey('analysisState')) { |
| analysisState = IamPolicyAnalysisState.fromJson( |
| _json['analysisState'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('fullResourceName')) { |
| fullResourceName = _json['fullResourceName'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (analysisState != null) { |
| _json['analysisState'] = analysisState.toJson(); |
| } |
| if (fullResourceName != null) { |
| _json['fullResourceName'] = fullResourceName; |
| } |
| return _json; |
| } |
| } |
| |
| /// Used in `policy_type` to specify how `boolean_policy` will behave at this |
| /// resource. |
| class GoogleCloudOrgpolicyV1BooleanPolicy { |
| /// If `true`, then the `Policy` is enforced. |
| /// |
| /// If `false`, then any configuration is acceptable. Suppose you have a |
| /// `Constraint` `constraints/compute.disableSerialPortAccess` with |
| /// `constraint_default` set to `ALLOW`. A `Policy` for that `Constraint` |
| /// exhibits the following behavior: - If the `Policy` at this resource has |
| /// enforced set to `false`, serial port connection attempts will be allowed. |
| /// - If the `Policy` at this resource has enforced set to `true`, serial port |
| /// connection attempts will be refused. - If the `Policy` at this resource is |
| /// `RestoreDefault`, serial port connection attempts will be allowed. - If no |
| /// `Policy` is set at this resource or anywhere higher in the resource |
| /// hierarchy, serial port connection attempts will be allowed. - If no |
| /// `Policy` is set at this resource, but one exists higher in the resource |
| /// hierarchy, the behavior is as if the`Policy` were set at this resource. |
| /// The following examples demonstrate the different possible layerings: |
| /// Example 1 (nearest `Constraint` wins): `organizations/foo` has a `Policy` |
| /// with: {enforced: false} `projects/bar` has no `Policy` set. The constraint |
| /// at `projects/bar` and `organizations/foo` will not be enforced. Example 2 |
| /// (enforcement gets replaced): `organizations/foo` has a `Policy` with: |
| /// {enforced: false} `projects/bar` has a `Policy` with: {enforced: true} The |
| /// constraint at `organizations/foo` is not enforced. The constraint at |
| /// `projects/bar` is enforced. Example 3 (RestoreDefault): |
| /// `organizations/foo` has a `Policy` with: {enforced: true} `projects/bar` |
| /// has a `Policy` with: {RestoreDefault: {}} The constraint at |
| /// `organizations/foo` is enforced. The constraint at `projects/bar` is not |
| /// enforced, because `constraint_default` for the `Constraint` is `ALLOW`. |
| core.bool enforced; |
| |
| GoogleCloudOrgpolicyV1BooleanPolicy(); |
| |
| GoogleCloudOrgpolicyV1BooleanPolicy.fromJson(core.Map _json) { |
| if (_json.containsKey('enforced')) { |
| enforced = _json['enforced'] as core.bool; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (enforced != null) { |
| _json['enforced'] = enforced; |
| } |
| return _json; |
| } |
| } |
| |
| /// Used in `policy_type` to specify how `list_policy` behaves at this resource. |
| /// |
| /// `ListPolicy` can define specific values and subtrees of Cloud Resource |
| /// Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are |
| /// allowed or denied by setting the `allowed_values` and `denied_values` |
| /// fields. This is achieved by using the `under:` and optional `is:` prefixes. |
| /// The `under:` prefix is used to denote resource subtree values. The `is:` |
| /// prefix is used to denote specific values, and is required only if the value |
| /// contains a ":". Values prefixed with "is:" are treated the same as values |
| /// with no prefix. Ancestry subtrees must be in one of the following formats: - |
| /// "projects/", e.g. "projects/tokyo-rain-123" - "folders/", e.g. |
| /// "folders/1234" - "organizations/", e.g. "organizations/1234" The |
| /// `supports_under` field of the associated `Constraint` defines whether |
| /// ancestry prefixes can be used. You can set `allowed_values` and |
| /// `denied_values` in the same `Policy` if `all_values` is |
| /// `ALL_VALUES_UNSPECIFIED`. `ALLOW` or `DENY` are used to allow or deny all |
| /// values. If `all_values` is set to either `ALLOW` or `DENY`, `allowed_values` |
| /// and `denied_values` must be unset. |
| class GoogleCloudOrgpolicyV1ListPolicy { |
| /// The policy all_values state. |
| /// Possible string values are: |
| /// - "ALL_VALUES_UNSPECIFIED" : Indicates that allowed_values or |
| /// denied_values must be set. |
| /// - "ALLOW" : A policy with this set allows all values. |
| /// - "DENY" : A policy with this set denies all values. |
| core.String allValues; |
| |
| /// List of values allowed at this resource. |
| /// |
| /// Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`. |
| core.List<core.String> allowedValues; |
| |
| /// List of values denied at this resource. |
| /// |
| /// Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`. |
| core.List<core.String> deniedValues; |
| |
| /// Determines the inheritance behavior for this `Policy`. |
| /// |
| /// By default, a `ListPolicy` set at a resource supersedes any `Policy` set |
| /// anywhere up the resource hierarchy. However, if `inherit_from_parent` is |
| /// set to `true`, then the values from the effective `Policy` of the parent |
| /// resource are inherited, meaning the values set in this `Policy` are added |
| /// to the values inherited up the hierarchy. Setting `Policy` hierarchies |
| /// that inherit both allowed values and denied values isn't recommended in |
| /// most circumstances to keep the configuration simple and understandable. |
| /// However, it is possible to set a `Policy` with `allowed_values` set that |
| /// inherits a `Policy` with `denied_values` set. In this case, the values |
| /// that are allowed must be in `allowed_values` and not present in |
| /// `denied_values`. For example, suppose you have a `Constraint` |
| /// `constraints/serviceuser.services`, which has a `constraint_type` of |
| /// `list_constraint`, and with `constraint_default` set to `ALLOW`. Suppose |
| /// that at the Organization level, a `Policy` is applied that restricts the |
| /// allowed API activations to {`E1`, `E2`}. Then, if a `Policy` is applied to |
| /// a project below the Organization that has `inherit_from_parent` set to |
| /// `false` and field all_values set to DENY, then an attempt to activate any |
| /// API will be denied. The following examples demonstrate different possible |
| /// layerings for `projects/bar` parented by `organizations/foo`: Example 1 |
| /// (no inherited values): `organizations/foo` has a `Policy` with values: |
| /// {allowed_values: "E1" allowed_values:"E2"} `projects/bar` has |
| /// `inherit_from_parent` `false` and values: {allowed_values: "E3" |
| /// allowed_values: "E4"} The accepted values at `organizations/foo` are `E1`, |
| /// `E2`. The accepted values at `projects/bar` are `E3`, and `E4`. Example 2 |
| /// (inherited values): `organizations/foo` has a `Policy` with values: |
| /// {allowed_values: "E1" allowed_values:"E2"} `projects/bar` has a `Policy` |
| /// with values: {value: "E3" value: "E4" inherit_from_parent: true} The |
| /// accepted values at `organizations/foo` are `E1`, `E2`. The accepted values |
| /// at `projects/bar` are `E1`, `E2`, `E3`, and `E4`. Example 3 (inheriting |
| /// both allowed and denied values): `organizations/foo` has a `Policy` with |
| /// values: {allowed_values: "E1" allowed_values: "E2"} `projects/bar` has a |
| /// `Policy` with: {denied_values: "E1"} The accepted values at |
| /// `organizations/foo` are `E1`, `E2`. The value accepted at `projects/bar` |
| /// is `E2`. Example 4 (RestoreDefault): `organizations/foo` has a `Policy` |
| /// with values: {allowed_values: "E1" allowed_values:"E2"} `projects/bar` has |
| /// a `Policy` with values: {RestoreDefault: {}} The accepted values at |
| /// `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` |
| /// are either all or none depending on the value of `constraint_default` (if |
| /// `ALLOW`, all; if `DENY`, none). Example 5 (no policy inherits parent |
| /// policy): `organizations/foo` has no `Policy` set. `projects/bar` has no |
| /// `Policy` set. The accepted values at both levels are either all or none |
| /// depending on the value of `constraint_default` (if `ALLOW`, all; if |
| /// `DENY`, none). Example 6 (ListConstraint allowing all): |
| /// `organizations/foo` has a `Policy` with values: {allowed_values: "E1" |
| /// allowed_values: "E2"} `projects/bar` has a `Policy` with: {all: ALLOW} The |
| /// accepted values at `organizations/foo` are `E1`, E2`. Any value is |
| /// accepted at `projects/bar`. Example 7 (ListConstraint allowing none): |
| /// `organizations/foo` has a `Policy` with values: {allowed_values: "E1" |
| /// allowed_values: "E2"} `projects/bar` has a `Policy` with: {all: DENY} The |
| /// accepted values at `organizations/foo` are `E1`, E2`. No value is accepted |
| /// at `projects/bar`. Example 10 (allowed and denied subtrees of Resource |
| /// Manager hierarchy): Given the following resource hierarchy O1->{F1, F2}; |
| /// F1->{P1}; F2->{P2, P3}, `organizations/foo` has a `Policy` with values: |
| /// {allowed_values: "under:organizations/O1"} `projects/bar` has a `Policy` |
| /// with: {allowed_values: "under:projects/P3"} {denied_values: |
| /// "under:folders/F2"} The accepted values at `organizations/foo` are |
| /// `organizations/O1`, `folders/F1`, `folders/F2`, `projects/P1`, |
| /// `projects/P2`, `projects/P3`. The accepted values at `projects/bar` are |
| /// `organizations/O1`, `folders/F1`, `projects/P1`. |
| core.bool inheritFromParent; |
| |
| /// The Google Cloud Console will try to default to a configuration that |
| /// matches the value specified in this `Policy`. |
| /// |
| /// If `suggested_value` is not set, it will inherit the value specified |
| /// higher in the hierarchy, unless `inherit_from_parent` is `false`. |
| /// |
| /// Optional. |
| core.String suggestedValue; |
| |
| GoogleCloudOrgpolicyV1ListPolicy(); |
| |
| GoogleCloudOrgpolicyV1ListPolicy.fromJson(core.Map _json) { |
| if (_json.containsKey('allValues')) { |
| allValues = _json['allValues'] as core.String; |
| } |
| if (_json.containsKey('allowedValues')) { |
| allowedValues = (_json['allowedValues'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('deniedValues')) { |
| deniedValues = (_json['deniedValues'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('inheritFromParent')) { |
| inheritFromParent = _json['inheritFromParent'] as core.bool; |
| } |
| if (_json.containsKey('suggestedValue')) { |
| suggestedValue = _json['suggestedValue'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (allValues != null) { |
| _json['allValues'] = allValues; |
| } |
| if (allowedValues != null) { |
| _json['allowedValues'] = allowedValues; |
| } |
| if (deniedValues != null) { |
| _json['deniedValues'] = deniedValues; |
| } |
| if (inheritFromParent != null) { |
| _json['inheritFromParent'] = inheritFromParent; |
| } |
| if (suggestedValue != null) { |
| _json['suggestedValue'] = suggestedValue; |
| } |
| return _json; |
| } |
| } |
| |
| /// Defines a Cloud Organization `Policy` which is used to specify `Constraints` |
| /// for configurations of Cloud Platform resources. |
| class GoogleCloudOrgpolicyV1Policy { |
| /// For boolean `Constraints`, whether to enforce the `Constraint` or not. |
| GoogleCloudOrgpolicyV1BooleanPolicy booleanPolicy; |
| |
| /// The name of the `Constraint` the `Policy` is configuring, for example, |
| /// `constraints/serviceuser.services`. |
| /// |
| /// A \[list of available |
| /// constraints\](/resource-manager/docs/organization-policy/org-policy-constraints) |
| /// is available. Immutable after creation. |
| core.String constraint; |
| |
| /// An opaque tag indicating the current version of the `Policy`, used for |
| /// concurrency control. |
| /// |
| /// When the `Policy` is returned from either a `GetPolicy` or a |
| /// `ListOrgPolicy` request, this `etag` indicates the version of the current |
| /// `Policy` to use when executing a read-modify-write loop. When the `Policy` |
| /// is returned from a `GetEffectivePolicy` request, the `etag` will be unset. |
| /// When the `Policy` is used in a `SetOrgPolicy` method, use the `etag` value |
| /// that was returned from a `GetOrgPolicy` request as part of a |
| /// read-modify-write loop for concurrency control. Not setting the `etag`in a |
| /// `SetOrgPolicy` request will result in an unconditional write of the |
| /// `Policy`. |
| core.String etag; |
| core.List<core.int> get etagAsBytes => convert.base64.decode(etag); |
| |
| set etagAsBytes(core.List<core.int> _bytes) { |
| etag = |
| convert.base64.encode(_bytes).replaceAll('/', '_').replaceAll('+', '-'); |
| } |
| |
| /// List of values either allowed or disallowed. |
| GoogleCloudOrgpolicyV1ListPolicy listPolicy; |
| |
| /// Restores the default behavior of the constraint; independent of |
| /// `Constraint` type. |
| GoogleCloudOrgpolicyV1RestoreDefault restoreDefault; |
| |
| /// The time stamp the `Policy` was previously updated. |
| /// |
| /// This is set by the server, not specified by the caller, and represents the |
| /// last time a call to `SetOrgPolicy` was made for that `Policy`. Any value |
| /// set by the client will be ignored. |
| core.String updateTime; |
| |
| /// Version of the `Policy`. |
| /// |
| /// Default version is 0; |
| core.int version; |
| |
| GoogleCloudOrgpolicyV1Policy(); |
| |
| GoogleCloudOrgpolicyV1Policy.fromJson(core.Map _json) { |
| if (_json.containsKey('booleanPolicy')) { |
| booleanPolicy = GoogleCloudOrgpolicyV1BooleanPolicy.fromJson( |
| _json['booleanPolicy'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('constraint')) { |
| constraint = _json['constraint'] as core.String; |
| } |
| if (_json.containsKey('etag')) { |
| etag = _json['etag'] as core.String; |
| } |
| if (_json.containsKey('listPolicy')) { |
| listPolicy = GoogleCloudOrgpolicyV1ListPolicy.fromJson( |
| _json['listPolicy'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('restoreDefault')) { |
| restoreDefault = GoogleCloudOrgpolicyV1RestoreDefault.fromJson( |
| _json['restoreDefault'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('updateTime')) { |
| updateTime = _json['updateTime'] as core.String; |
| } |
| if (_json.containsKey('version')) { |
| version = _json['version'] as core.int; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (booleanPolicy != null) { |
| _json['booleanPolicy'] = booleanPolicy.toJson(); |
| } |
| if (constraint != null) { |
| _json['constraint'] = constraint; |
| } |
| if (etag != null) { |
| _json['etag'] = etag; |
| } |
| if (listPolicy != null) { |
| _json['listPolicy'] = listPolicy.toJson(); |
| } |
| if (restoreDefault != null) { |
| _json['restoreDefault'] = restoreDefault.toJson(); |
| } |
| if (updateTime != null) { |
| _json['updateTime'] = updateTime; |
| } |
| if (version != null) { |
| _json['version'] = version; |
| } |
| return _json; |
| } |
| } |
| |
| /// Ignores policies set above this resource and restores the |
| /// `constraint_default` enforcement behavior of the specific `Constraint` at |
| /// this resource. |
| /// |
| /// Suppose that `constraint_default` is set to `ALLOW` for the `Constraint` |
| /// `constraints/serviceuser.services`. Suppose that organization foo.com sets a |
| /// `Policy` at their Organization resource node that restricts the allowed |
| /// service activations to deny all service activations. They could then set a |
| /// `Policy` with the `policy_type` `restore_default` on several experimental |
| /// projects, restoring the `constraint_default` enforcement of the `Constraint` |
| /// for only those projects, allowing those projects to have all services |
| /// activated. |
| class GoogleCloudOrgpolicyV1RestoreDefault { |
| GoogleCloudOrgpolicyV1RestoreDefault(); |
| |
| GoogleCloudOrgpolicyV1RestoreDefault.fromJson( |
| // ignore: avoid_unused_constructor_parameters |
| core.Map _json); |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| return _json; |
| } |
| } |
| |
| /// An `AccessLevel` is a label that can be applied to requests to Google Cloud |
| /// services, along with a list of requirements necessary for the label to be |
| /// applied. |
| class GoogleIdentityAccesscontextmanagerV1AccessLevel { |
| /// A `BasicLevel` composed of `Conditions`. |
| GoogleIdentityAccesscontextmanagerV1BasicLevel basic; |
| |
| /// A `CustomLevel` written in the Common Expression Language. |
| GoogleIdentityAccesscontextmanagerV1CustomLevel custom; |
| |
| /// Description of the `AccessLevel` and its use. |
| /// |
| /// Does not affect behavior. |
| core.String description; |
| |
| /// Resource name for the Access Level. |
| /// |
| /// The `short_name` component must begin with a letter and only include |
| /// alphanumeric and '_'. Format: |
| /// `accessPolicies/{policy_id}/accessLevels/{short_name}`. The maximum length |
| /// of the `short_name` component is 50 characters. |
| /// |
| /// Required. |
| core.String name; |
| |
| /// Human readable title. |
| /// |
| /// Must be unique within the Policy. |
| core.String title; |
| |
| GoogleIdentityAccesscontextmanagerV1AccessLevel(); |
| |
| GoogleIdentityAccesscontextmanagerV1AccessLevel.fromJson(core.Map _json) { |
| if (_json.containsKey('basic')) { |
| basic = GoogleIdentityAccesscontextmanagerV1BasicLevel.fromJson( |
| _json['basic'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('custom')) { |
| custom = GoogleIdentityAccesscontextmanagerV1CustomLevel.fromJson( |
| _json['custom'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('description')) { |
| description = _json['description'] as core.String; |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| if (_json.containsKey('title')) { |
| title = _json['title'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (basic != null) { |
| _json['basic'] = basic.toJson(); |
| } |
| if (custom != null) { |
| _json['custom'] = custom.toJson(); |
| } |
| if (description != null) { |
| _json['description'] = description; |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| if (title != null) { |
| _json['title'] = title; |
| } |
| return _json; |
| } |
| } |
| |
| /// `AccessPolicy` is a container for `AccessLevels` (which define the necessary |
| /// attributes to use Google Cloud services) and `ServicePerimeters` (which |
| /// define regions of services able to freely pass data within a perimeter). |
| /// |
| /// An access policy is globally visible within an organization, and the |
| /// restrictions it specifies apply to all projects within an organization. |
| class GoogleIdentityAccesscontextmanagerV1AccessPolicy { |
| /// An opaque identifier for the current version of the `AccessPolicy`. |
| /// |
| /// This will always be a strongly validated etag, meaning that two Access |
| /// Polices will be identical if and only if their etags are identical. |
| /// Clients should not expect this to be in any specific format. |
| /// |
| /// Output only. |
| core.String etag; |
| |
| /// Resource name of the `AccessPolicy`. |
| /// |
| /// Format: `accessPolicies/{policy_id}` |
| /// |
| /// Output only. |
| core.String name; |
| |
| /// The parent of this `AccessPolicy` in the Cloud Resource Hierarchy. |
| /// |
| /// Currently immutable once created. Format: |
| /// `organizations/{organization_id}` |
| /// |
| /// Required. |
| core.String parent; |
| |
| /// Human readable title. |
| /// |
| /// Does not affect behavior. |
| /// |
| /// Required. |
| core.String title; |
| |
| GoogleIdentityAccesscontextmanagerV1AccessPolicy(); |
| |
| GoogleIdentityAccesscontextmanagerV1AccessPolicy.fromJson(core.Map _json) { |
| if (_json.containsKey('etag')) { |
| etag = _json['etag'] as core.String; |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| if (_json.containsKey('parent')) { |
| parent = _json['parent'] as core.String; |
| } |
| if (_json.containsKey('title')) { |
| title = _json['title'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (etag != null) { |
| _json['etag'] = etag; |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| if (parent != null) { |
| _json['parent'] = parent; |
| } |
| if (title != null) { |
| _json['title'] = title; |
| } |
| return _json; |
| } |
| } |
| |
| /// Identification for an API Operation. |
| class GoogleIdentityAccesscontextmanagerV1ApiOperation { |
| /// API methods or permissions to allow. |
| /// |
| /// Method or permission must belong to the service specified by |
| /// `service_name` field. A single MethodSelector entry with `*` specified for |
| /// the `method` field will allow all methods AND permissions for the service |
| /// specified in `service_name`. |
| core.List<GoogleIdentityAccesscontextmanagerV1MethodSelector> methodSelectors; |
| |
| /// The name of the API whose methods or permissions the IngressPolicy or |
| /// EgressPolicy want to allow. |
| /// |
| /// A single ApiOperation with `service_name` field set to `*` will allow all |
| /// methods AND permissions for all services. |
| core.String serviceName; |
| |
| GoogleIdentityAccesscontextmanagerV1ApiOperation(); |
| |
| GoogleIdentityAccesscontextmanagerV1ApiOperation.fromJson(core.Map _json) { |
| if (_json.containsKey('methodSelectors')) { |
| methodSelectors = (_json['methodSelectors'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1MethodSelector>((value) => |
| GoogleIdentityAccesscontextmanagerV1MethodSelector.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('serviceName')) { |
| serviceName = _json['serviceName'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (methodSelectors != null) { |
| _json['methodSelectors'] = |
| methodSelectors.map((value) => value.toJson()).toList(); |
| } |
| if (serviceName != null) { |
| _json['serviceName'] = serviceName; |
| } |
| return _json; |
| } |
| } |
| |
| /// `BasicLevel` is an `AccessLevel` using a set of recommended features. |
| class GoogleIdentityAccesscontextmanagerV1BasicLevel { |
| /// How the `conditions` list should be combined to determine if a request is |
| /// granted this `AccessLevel`. |
| /// |
| /// If AND is used, each `Condition` in `conditions` must be satisfied for the |
| /// `AccessLevel` to be applied. If OR is used, at least one `Condition` in |
| /// `conditions` must be satisfied for the `AccessLevel` to be applied. |
| /// Default behavior is AND. |
| /// Possible string values are: |
| /// - "AND" : All `Conditions` must be true for the `BasicLevel` to be true. |
| /// - "OR" : If at least one `Condition` is true, then the `BasicLevel` is |
| /// true. |
| core.String combiningFunction; |
| |
| /// A list of requirements for the `AccessLevel` to be granted. |
| /// |
| /// Required. |
| core.List<GoogleIdentityAccesscontextmanagerV1Condition> conditions; |
| |
| GoogleIdentityAccesscontextmanagerV1BasicLevel(); |
| |
| GoogleIdentityAccesscontextmanagerV1BasicLevel.fromJson(core.Map _json) { |
| if (_json.containsKey('combiningFunction')) { |
| combiningFunction = _json['combiningFunction'] as core.String; |
| } |
| if (_json.containsKey('conditions')) { |
| conditions = (_json['conditions'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1Condition>((value) => |
| GoogleIdentityAccesscontextmanagerV1Condition.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (combiningFunction != null) { |
| _json['combiningFunction'] = combiningFunction; |
| } |
| if (conditions != null) { |
| _json['conditions'] = conditions.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A condition necessary for an `AccessLevel` to be granted. |
| /// |
| /// The Condition is an AND over its fields. So a Condition is true if: 1) the |
| /// request IP is from one of the listed subnetworks AND 2) the originating |
| /// device complies with the listed device policy AND 3) all listed access |
| /// levels are granted AND 4) the request was sent at a time allowed by the |
| /// DateTimeRestriction. |
| class GoogleIdentityAccesscontextmanagerV1Condition { |
| /// Device specific restrictions, all restrictions must hold for the Condition |
| /// to be true. |
| /// |
| /// If not specified, all devices are allowed. |
| GoogleIdentityAccesscontextmanagerV1DevicePolicy devicePolicy; |
| |
| /// CIDR block IP subnetwork specification. |
| /// |
| /// May be IPv4 or IPv6. Note that for a CIDR IP address block, the specified |
| /// IP address portion must be properly truncated (i.e. all the host bits must |
| /// be zero) or the input is considered malformed. For example, "192.0.2.0/24" |
| /// is accepted but "192.0.2.1/24" is not. Similarly, for IPv6, |
| /// "2001:db8::/32" is accepted whereas "2001:db8::1/32" is not. The |
| /// originating IP of a request must be in one of the listed subnets in order |
| /// for this Condition to be true. If empty, all IP addresses are allowed. |
| core.List<core.String> ipSubnetworks; |
| |
| /// The request must be made by one of the provided user or service accounts. |
| /// |
| /// Groups are not supported. Syntax: `user:{emailid}` |
| /// `serviceAccount:{emailid}` If not specified, a request may come from any |
| /// user. |
| core.List<core.String> members; |
| |
| /// Whether to negate the Condition. |
| /// |
| /// If true, the Condition becomes a NAND over its non-empty fields, each |
| /// field must be false for the Condition overall to be satisfied. Defaults to |
| /// false. |
| core.bool negate; |
| |
| /// The request must originate from one of the provided countries/regions. |
| /// |
| /// Must be valid ISO 3166-1 alpha-2 codes. |
| core.List<core.String> regions; |
| |
| /// A list of other access levels defined in the same `Policy`, referenced by |
| /// resource name. |
| /// |
| /// Referencing an `AccessLevel` which does not exist is an error. All access |
| /// levels listed must be granted for the Condition to be true. Example: |
| /// "`accessPolicies/MY_POLICY/accessLevels/LEVEL_NAME"` |
| core.List<core.String> requiredAccessLevels; |
| |
| GoogleIdentityAccesscontextmanagerV1Condition(); |
| |
| GoogleIdentityAccesscontextmanagerV1Condition.fromJson(core.Map _json) { |
| if (_json.containsKey('devicePolicy')) { |
| devicePolicy = GoogleIdentityAccesscontextmanagerV1DevicePolicy.fromJson( |
| _json['devicePolicy'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('ipSubnetworks')) { |
| ipSubnetworks = (_json['ipSubnetworks'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('members')) { |
| members = (_json['members'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('negate')) { |
| negate = _json['negate'] as core.bool; |
| } |
| if (_json.containsKey('regions')) { |
| regions = (_json['regions'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('requiredAccessLevels')) { |
| requiredAccessLevels = (_json['requiredAccessLevels'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (devicePolicy != null) { |
| _json['devicePolicy'] = devicePolicy.toJson(); |
| } |
| if (ipSubnetworks != null) { |
| _json['ipSubnetworks'] = ipSubnetworks; |
| } |
| if (members != null) { |
| _json['members'] = members; |
| } |
| if (negate != null) { |
| _json['negate'] = negate; |
| } |
| if (regions != null) { |
| _json['regions'] = regions; |
| } |
| if (requiredAccessLevels != null) { |
| _json['requiredAccessLevels'] = requiredAccessLevels; |
| } |
| return _json; |
| } |
| } |
| |
| /// `CustomLevel` is an `AccessLevel` using the Cloud Common Expression Language |
| /// to represent the necessary conditions for the level to apply to a request. |
| /// |
| /// See CEL spec at: https://github.com/google/cel-spec |
| class GoogleIdentityAccesscontextmanagerV1CustomLevel { |
| /// A Cloud CEL expression evaluating to a boolean. |
| /// |
| /// Required. |
| Expr expr; |
| |
| GoogleIdentityAccesscontextmanagerV1CustomLevel(); |
| |
| GoogleIdentityAccesscontextmanagerV1CustomLevel.fromJson(core.Map _json) { |
| if (_json.containsKey('expr')) { |
| expr = |
| Expr.fromJson(_json['expr'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (expr != null) { |
| _json['expr'] = expr.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// `DevicePolicy` specifies device specific restrictions necessary to acquire a |
| /// given access level. |
| /// |
| /// A `DevicePolicy` specifies requirements for requests from devices to be |
| /// granted access levels, it does not do any enforcement on the device. |
| /// `DevicePolicy` acts as an AND over all specified fields, and each repeated |
| /// field is an OR over its elements. Any unset fields are ignored. For example, |
| /// if the proto is { os_type : DESKTOP_WINDOWS, os_type : DESKTOP_LINUX, |
| /// encryption_status: ENCRYPTED}, then the DevicePolicy will be true for |
| /// requests originating from encrypted Linux desktops and encrypted Windows |
| /// desktops. |
| class GoogleIdentityAccesscontextmanagerV1DevicePolicy { |
| /// Allowed device management levels, an empty list allows all management |
| /// levels. |
| core.List<core.String> allowedDeviceManagementLevels; |
| |
| /// Allowed encryptions statuses, an empty list allows all statuses. |
| core.List<core.String> allowedEncryptionStatuses; |
| |
| /// Allowed OS versions, an empty list allows all types and all versions. |
| core.List<GoogleIdentityAccesscontextmanagerV1OsConstraint> osConstraints; |
| |
| /// Whether the device needs to be approved by the customer admin. |
| core.bool requireAdminApproval; |
| |
| /// Whether the device needs to be corp owned. |
| core.bool requireCorpOwned; |
| |
| /// Whether or not screenlock is required for the DevicePolicy to be true. |
| /// |
| /// Defaults to `false`. |
| core.bool requireScreenlock; |
| |
| GoogleIdentityAccesscontextmanagerV1DevicePolicy(); |
| |
| GoogleIdentityAccesscontextmanagerV1DevicePolicy.fromJson(core.Map _json) { |
| if (_json.containsKey('allowedDeviceManagementLevels')) { |
| allowedDeviceManagementLevels = |
| (_json['allowedDeviceManagementLevels'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('allowedEncryptionStatuses')) { |
| allowedEncryptionStatuses = |
| (_json['allowedEncryptionStatuses'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('osConstraints')) { |
| osConstraints = (_json['osConstraints'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1OsConstraint>((value) => |
| GoogleIdentityAccesscontextmanagerV1OsConstraint.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('requireAdminApproval')) { |
| requireAdminApproval = _json['requireAdminApproval'] as core.bool; |
| } |
| if (_json.containsKey('requireCorpOwned')) { |
| requireCorpOwned = _json['requireCorpOwned'] as core.bool; |
| } |
| if (_json.containsKey('requireScreenlock')) { |
| requireScreenlock = _json['requireScreenlock'] as core.bool; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (allowedDeviceManagementLevels != null) { |
| _json['allowedDeviceManagementLevels'] = allowedDeviceManagementLevels; |
| } |
| if (allowedEncryptionStatuses != null) { |
| _json['allowedEncryptionStatuses'] = allowedEncryptionStatuses; |
| } |
| if (osConstraints != null) { |
| _json['osConstraints'] = |
| osConstraints.map((value) => value.toJson()).toList(); |
| } |
| if (requireAdminApproval != null) { |
| _json['requireAdminApproval'] = requireAdminApproval; |
| } |
| if (requireCorpOwned != null) { |
| _json['requireCorpOwned'] = requireCorpOwned; |
| } |
| if (requireScreenlock != null) { |
| _json['requireScreenlock'] = requireScreenlock; |
| } |
| return _json; |
| } |
| } |
| |
| /// Defines the conditions under which an EgressPolicy matches a request. |
| /// |
| /// Conditions based on information about the source of the request. Note that |
| /// if the destination of the request is protected by a ServicePerimeter, then |
| /// that ServicePerimeter must have an IngressPolicy which allows access in |
| /// order for this request to succeed. |
| class GoogleIdentityAccesscontextmanagerV1EgressFrom { |
| /// A list of identities that are allowed access through this |
| /// \[EgressPolicy\]. |
| /// |
| /// Should be in the format of email address. The email address should |
| /// represent individual user or service account only. |
| core.List<core.String> identities; |
| |
| /// Specifies the type of identities that are allowed access to outside the |
| /// perimeter. |
| /// |
| /// If left unspecified, then members of `identities` field will be allowed |
| /// access. |
| /// Possible string values are: |
| /// - "IDENTITY_TYPE_UNSPECIFIED" : No blanket identity group specified. |
| /// - "ANY_IDENTITY" : Authorize access from all identities outside the |
| /// perimeter. |
| /// - "ANY_USER_ACCOUNT" : Authorize access from all human users outside the |
| /// perimeter. |
| /// - "ANY_SERVICE_ACCOUNT" : Authorize access from all service accounts |
| /// outside the perimeter. |
| core.String identityType; |
| |
| GoogleIdentityAccesscontextmanagerV1EgressFrom(); |
| |
| GoogleIdentityAccesscontextmanagerV1EgressFrom.fromJson(core.Map _json) { |
| if (_json.containsKey('identities')) { |
| identities = (_json['identities'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('identityType')) { |
| identityType = _json['identityType'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (identities != null) { |
| _json['identities'] = identities; |
| } |
| if (identityType != null) { |
| _json['identityType'] = identityType; |
| } |
| return _json; |
| } |
| } |
| |
| /// Policy for egress from perimeter. |
| /// |
| /// EgressPolicies match requests based on `egress_from` and `egress_to` |
| /// stanzas. For an EgressPolicy to match, both `egress_from` and `egress_to` |
| /// stanzas must be matched. If an EgressPolicy matches a request, the request |
| /// is allowed to span the ServicePerimeter boundary. For example, an |
| /// EgressPolicy can be used to allow VMs on networks within the |
| /// ServicePerimeter to access a defined set of projects outside the perimeter |
| /// in certain contexts (e.g. to read data from a Cloud Storage bucket or query |
| /// against a BigQuery dataset). EgressPolicies are concerned with the |
| /// *resources* that a request relates as well as the API services and API |
| /// actions being used. They do not related to the direction of data movement. |
| /// More detailed documentation for this concept can be found in the |
| /// descriptions of EgressFrom and EgressTo. |
| class GoogleIdentityAccesscontextmanagerV1EgressPolicy { |
| /// Defines conditions on the source of a request causing this EgressPolicy to |
| /// apply. |
| GoogleIdentityAccesscontextmanagerV1EgressFrom egressFrom; |
| |
| /// Defines the conditions on the ApiOperation and destination resources that |
| /// cause this EgressPolicy to apply. |
| GoogleIdentityAccesscontextmanagerV1EgressTo egressTo; |
| |
| GoogleIdentityAccesscontextmanagerV1EgressPolicy(); |
| |
| GoogleIdentityAccesscontextmanagerV1EgressPolicy.fromJson(core.Map _json) { |
| if (_json.containsKey('egressFrom')) { |
| egressFrom = GoogleIdentityAccesscontextmanagerV1EgressFrom.fromJson( |
| _json['egressFrom'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('egressTo')) { |
| egressTo = GoogleIdentityAccesscontextmanagerV1EgressTo.fromJson( |
| _json['egressTo'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (egressFrom != null) { |
| _json['egressFrom'] = egressFrom.toJson(); |
| } |
| if (egressTo != null) { |
| _json['egressTo'] = egressTo.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Defines the conditions under which an EgressPolicy matches a request. |
| /// |
| /// Conditions are based on information about the ApiOperation intended to be |
| /// performed on the `resources` specified. Note that if the destination of the |
| /// request is protected by a ServicePerimeter, then that ServicePerimeter must |
| /// have an IngressPolicy which allows access in order for this request to |
| /// succeed. |
| class GoogleIdentityAccesscontextmanagerV1EgressTo { |
| /// A list of ApiOperations that this egress rule applies to. |
| /// |
| /// A request matches if it contains an operation/service in this list. |
| core.List<GoogleIdentityAccesscontextmanagerV1ApiOperation> operations; |
| |
| /// A list of resources, currently only projects in the form `projects/`, that |
| /// match this to stanza. |
| /// |
| /// A request matches if it contains a resource in this list. If `*` is |
| /// specified for resources, then this EgressTo rule will authorize access to |
| /// all resources outside the perimeter. |
| core.List<core.String> resources; |
| |
| GoogleIdentityAccesscontextmanagerV1EgressTo(); |
| |
| GoogleIdentityAccesscontextmanagerV1EgressTo.fromJson(core.Map _json) { |
| if (_json.containsKey('operations')) { |
| operations = (_json['operations'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1ApiOperation>((value) => |
| GoogleIdentityAccesscontextmanagerV1ApiOperation.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('resources')) { |
| resources = (_json['resources'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (operations != null) { |
| _json['operations'] = operations.map((value) => value.toJson()).toList(); |
| } |
| if (resources != null) { |
| _json['resources'] = resources; |
| } |
| return _json; |
| } |
| } |
| |
| /// Defines the conditions under which an IngressPolicy matches a request. |
| /// |
| /// Conditions are based on information about the source of the request. |
| class GoogleIdentityAccesscontextmanagerV1IngressFrom { |
| /// A list of identities that are allowed access through this ingress policy. |
| /// |
| /// Should be in the format of email address. The email address should |
| /// represent individual user or service account only. |
| core.List<core.String> identities; |
| |
| /// Specifies the type of identities that are allowed access from outside the |
| /// perimeter. |
| /// |
| /// If left unspecified, then members of `identities` field will be allowed |
| /// access. |
| /// Possible string values are: |
| /// - "IDENTITY_TYPE_UNSPECIFIED" : No blanket identity group specified. |
| /// - "ANY_IDENTITY" : Authorize access from all identities outside the |
| /// perimeter. |
| /// - "ANY_USER_ACCOUNT" : Authorize access from all human users outside the |
| /// perimeter. |
| /// - "ANY_SERVICE_ACCOUNT" : Authorize access from all service accounts |
| /// outside the perimeter. |
| core.String identityType; |
| |
| /// Sources that this IngressPolicy authorizes access from. |
| core.List<GoogleIdentityAccesscontextmanagerV1IngressSource> sources; |
| |
| GoogleIdentityAccesscontextmanagerV1IngressFrom(); |
| |
| GoogleIdentityAccesscontextmanagerV1IngressFrom.fromJson(core.Map _json) { |
| if (_json.containsKey('identities')) { |
| identities = (_json['identities'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('identityType')) { |
| identityType = _json['identityType'] as core.String; |
| } |
| if (_json.containsKey('sources')) { |
| sources = (_json['sources'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1IngressSource>((value) => |
| GoogleIdentityAccesscontextmanagerV1IngressSource.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (identities != null) { |
| _json['identities'] = identities; |
| } |
| if (identityType != null) { |
| _json['identityType'] = identityType; |
| } |
| if (sources != null) { |
| _json['sources'] = sources.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Policy for ingress into ServicePerimeter. |
| /// |
| /// IngressPolicies match requests based on `ingress_from` and `ingress_to` |
| /// stanzas. For an ingress policy to match, both the `ingress_from` and |
| /// `ingress_to` stanzas must be matched. If an IngressPolicy matches a request, |
| /// the request is allowed through the perimeter boundary from outside the |
| /// perimeter. For example, access from the internet can be allowed either based |
| /// on an AccessLevel or, for traffic hosted on Google Cloud, the project of the |
| /// source network. For access from private networks, using the project of the |
| /// hosting network is required. Individual ingress policies can be limited by |
| /// restricting which services and/or actions they match using the `ingress_to` |
| /// field. |
| class GoogleIdentityAccesscontextmanagerV1IngressPolicy { |
| /// Defines the conditions on the source of a request causing this |
| /// IngressPolicy to apply. |
| GoogleIdentityAccesscontextmanagerV1IngressFrom ingressFrom; |
| |
| /// Defines the conditions on the ApiOperation and request destination that |
| /// cause this IngressPolicy to apply. |
| GoogleIdentityAccesscontextmanagerV1IngressTo ingressTo; |
| |
| GoogleIdentityAccesscontextmanagerV1IngressPolicy(); |
| |
| GoogleIdentityAccesscontextmanagerV1IngressPolicy.fromJson(core.Map _json) { |
| if (_json.containsKey('ingressFrom')) { |
| ingressFrom = GoogleIdentityAccesscontextmanagerV1IngressFrom.fromJson( |
| _json['ingressFrom'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('ingressTo')) { |
| ingressTo = GoogleIdentityAccesscontextmanagerV1IngressTo.fromJson( |
| _json['ingressTo'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (ingressFrom != null) { |
| _json['ingressFrom'] = ingressFrom.toJson(); |
| } |
| if (ingressTo != null) { |
| _json['ingressTo'] = ingressTo.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// The source that IngressPolicy authorizes access from. |
| class GoogleIdentityAccesscontextmanagerV1IngressSource { |
| /// An AccessLevel resource name that allow resources within the |
| /// ServicePerimeters to be accessed from the internet. |
| /// |
| /// AccessLevels listed must be in the same policy as this ServicePerimeter. |
| /// Referencing a nonexistent AccessLevel will cause an error. If no |
| /// AccessLevel names are listed, resources within the perimeter can only be |
| /// accessed via Google Cloud calls with request origins within the perimeter. |
| /// Example: `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL`. If `*` is |
| /// specified, then all IngressSources will be allowed. |
| core.String accessLevel; |
| |
| /// A Google Cloud resource that is allowed to ingress the perimeter. |
| /// |
| /// Requests from these resources will be allowed to access perimeter data. |
| /// Currently only projects are allowed. Format: `projects/{project_number}` |
| /// The project may be in any Google Cloud organization, not just the |
| /// organization that the perimeter is defined in. `*` is not allowed, the |
| /// case of allowing all Google Cloud resources only is not supported. |
| core.String resource; |
| |
| GoogleIdentityAccesscontextmanagerV1IngressSource(); |
| |
| GoogleIdentityAccesscontextmanagerV1IngressSource.fromJson(core.Map _json) { |
| if (_json.containsKey('accessLevel')) { |
| accessLevel = _json['accessLevel'] as core.String; |
| } |
| if (_json.containsKey('resource')) { |
| resource = _json['resource'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (accessLevel != null) { |
| _json['accessLevel'] = accessLevel; |
| } |
| if (resource != null) { |
| _json['resource'] = resource; |
| } |
| return _json; |
| } |
| } |
| |
| /// Defines the conditions under which an IngressPolicy matches a request. |
| /// |
| /// Conditions are based on information about the ApiOperation intended to be |
| /// performed on the destination of the request. |
| class GoogleIdentityAccesscontextmanagerV1IngressTo { |
| /// A list of ApiOperations the sources specified in corresponding IngressFrom |
| /// are allowed to perform in this ServicePerimeter. |
| core.List<GoogleIdentityAccesscontextmanagerV1ApiOperation> operations; |
| |
| /// A list of resources, currently only projects in the form `projects/`, |
| /// protected by this ServicePerimeter that are allowed to be accessed by |
| /// sources defined in the corresponding IngressFrom. |
| /// |
| /// A request matches if it contains a resource in this list. If `*` is |
| /// specified for resources, then this IngressTo rule will authorize access to |
| /// all resources inside the perimeter, provided that the request also matches |
| /// the `operations` field. |
| core.List<core.String> resources; |
| |
| GoogleIdentityAccesscontextmanagerV1IngressTo(); |
| |
| GoogleIdentityAccesscontextmanagerV1IngressTo.fromJson(core.Map _json) { |
| if (_json.containsKey('operations')) { |
| operations = (_json['operations'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1ApiOperation>((value) => |
| GoogleIdentityAccesscontextmanagerV1ApiOperation.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('resources')) { |
| resources = (_json['resources'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (operations != null) { |
| _json['operations'] = operations.map((value) => value.toJson()).toList(); |
| } |
| if (resources != null) { |
| _json['resources'] = resources; |
| } |
| return _json; |
| } |
| } |
| |
| /// An allowed method or permission of a service specified in ApiOperation. |
| class GoogleIdentityAccesscontextmanagerV1MethodSelector { |
| /// Value for `method` should be a valid method name for the corresponding |
| /// `service_name` in ApiOperation. |
| /// |
| /// If `*` used as value for `method`, then ALL methods and permissions are |
| /// allowed. |
| core.String method; |
| |
| /// Value for `permission` should be a valid Cloud IAM permission for the |
| /// corresponding `service_name` in ApiOperation. |
| core.String permission; |
| |
| GoogleIdentityAccesscontextmanagerV1MethodSelector(); |
| |
| GoogleIdentityAccesscontextmanagerV1MethodSelector.fromJson(core.Map _json) { |
| if (_json.containsKey('method')) { |
| method = _json['method'] as core.String; |
| } |
| if (_json.containsKey('permission')) { |
| permission = _json['permission'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (method != null) { |
| _json['method'] = method; |
| } |
| if (permission != null) { |
| _json['permission'] = permission; |
| } |
| return _json; |
| } |
| } |
| |
| /// A restriction on the OS type and version of devices making requests. |
| class GoogleIdentityAccesscontextmanagerV1OsConstraint { |
| /// The minimum allowed OS version. |
| /// |
| /// If not set, any version of this OS satisfies the constraint. Format: |
| /// `"major.minor.patch"`. Examples: `"10.5.301"`, `"9.2.1"`. |
| core.String minimumVersion; |
| |
| /// The allowed OS type. |
| /// |
| /// Required. |
| /// Possible string values are: |
| /// - "OS_UNSPECIFIED" : The operating system of the device is not specified |
| /// or not known. |
| /// - "DESKTOP_MAC" : A desktop Mac operating system. |
| /// - "DESKTOP_WINDOWS" : A desktop Windows operating system. |
| /// - "DESKTOP_LINUX" : A desktop Linux operating system. |
| /// - "DESKTOP_CHROME_OS" : A desktop ChromeOS operating system. |
| /// - "ANDROID" : An Android operating system. |
| /// - "IOS" : An iOS operating system. |
| core.String osType; |
| |
| /// Only allows requests from devices with a verified Chrome OS. |
| /// |
| /// Verifications includes requirements that the device is enterprise-managed, |
| /// conformant to domain policies, and the caller has permission to call the |
| /// API targeted by the request. |
| core.bool requireVerifiedChromeOs; |
| |
| GoogleIdentityAccesscontextmanagerV1OsConstraint(); |
| |
| GoogleIdentityAccesscontextmanagerV1OsConstraint.fromJson(core.Map _json) { |
| if (_json.containsKey('minimumVersion')) { |
| minimumVersion = _json['minimumVersion'] as core.String; |
| } |
| if (_json.containsKey('osType')) { |
| osType = _json['osType'] as core.String; |
| } |
| if (_json.containsKey('requireVerifiedChromeOs')) { |
| requireVerifiedChromeOs = _json['requireVerifiedChromeOs'] as core.bool; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (minimumVersion != null) { |
| _json['minimumVersion'] = minimumVersion; |
| } |
| if (osType != null) { |
| _json['osType'] = osType; |
| } |
| if (requireVerifiedChromeOs != null) { |
| _json['requireVerifiedChromeOs'] = requireVerifiedChromeOs; |
| } |
| return _json; |
| } |
| } |
| |
| /// `ServicePerimeter` describes a set of Google Cloud resources which can |
| /// freely import and export data amongst themselves, but not export outside of |
| /// the `ServicePerimeter`. |
| /// |
| /// If a request with a source within this `ServicePerimeter` has a target |
| /// outside of the `ServicePerimeter`, the request will be blocked. Otherwise |
| /// the request is allowed. There are two types of Service Perimeter - Regular |
| /// and Bridge. Regular Service Perimeters cannot overlap, a single Google Cloud |
| /// project can only belong to a single regular Service Perimeter. Service |
| /// Perimeter Bridges can contain only Google Cloud projects as members, a |
| /// single Google Cloud project may belong to multiple Service Perimeter |
| /// Bridges. |
| class GoogleIdentityAccesscontextmanagerV1ServicePerimeter { |
| /// Description of the `ServicePerimeter` and its use. |
| /// |
| /// Does not affect behavior. |
| core.String description; |
| |
| /// Resource name for the ServicePerimeter. |
| /// |
| /// The `short_name` component must begin with a letter and only include |
| /// alphanumeric and '_'. Format: |
| /// `accessPolicies/{policy_id}/servicePerimeters/{short_name}` |
| /// |
| /// Required. |
| core.String name; |
| |
| /// Perimeter type indicator. |
| /// |
| /// A single project is allowed to be a member of single regular perimeter, |
| /// but multiple service perimeter bridges. A project cannot be a included in |
| /// a perimeter bridge without being included in regular perimeter. For |
| /// perimeter bridges, the restricted service list as well as access level |
| /// lists must be empty. |
| /// Possible string values are: |
| /// - "PERIMETER_TYPE_REGULAR" : Regular Perimeter. |
| /// - "PERIMETER_TYPE_BRIDGE" : Perimeter Bridge. |
| core.String perimeterType; |
| |
| /// Proposed (or dry run) ServicePerimeter configuration. |
| /// |
| /// This configuration allows to specify and test ServicePerimeter |
| /// configuration without enforcing actual access restrictions. Only allowed |
| /// to be set when the "use_explicit_dry_run_spec" flag is set. |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig spec; |
| |
| /// Current ServicePerimeter configuration. |
| /// |
| /// Specifies sets of resources, restricted services and access levels that |
| /// determine perimeter content and boundaries. |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig status; |
| |
| /// Human readable title. |
| /// |
| /// Must be unique within the Policy. |
| core.String title; |
| |
| /// Use explicit dry run spec flag. |
| /// |
| /// Ordinarily, a dry-run spec implicitly exists for all Service Perimeters, |
| /// and that spec is identical to the status for those Service Perimeters. |
| /// When this flag is set, it inhibits the generation of the implicit spec, |
| /// thereby allowing the user to explicitly provide a configuration ("spec") |
| /// to use in a dry-run version of the Service Perimeter. This allows the user |
| /// to test changes to the enforced config ("status") without actually |
| /// enforcing them. This testing is done through analyzing the differences |
| /// between currently enforced and suggested restrictions. |
| /// use_explicit_dry_run_spec must bet set to True if any of the fields in the |
| /// spec are set to non-default values. |
| core.bool useExplicitDryRunSpec; |
| |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeter(); |
| |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeter.fromJson( |
| core.Map _json) { |
| if (_json.containsKey('description')) { |
| description = _json['description'] as core.String; |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| if (_json.containsKey('perimeterType')) { |
| perimeterType = _json['perimeterType'] as core.String; |
| } |
| if (_json.containsKey('spec')) { |
| spec = |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig.fromJson( |
| _json['spec'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('status')) { |
| status = |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig.fromJson( |
| _json['status'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('title')) { |
| title = _json['title'] as core.String; |
| } |
| if (_json.containsKey('useExplicitDryRunSpec')) { |
| useExplicitDryRunSpec = _json['useExplicitDryRunSpec'] as core.bool; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (description != null) { |
| _json['description'] = description; |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| if (perimeterType != null) { |
| _json['perimeterType'] = perimeterType; |
| } |
| if (spec != null) { |
| _json['spec'] = spec.toJson(); |
| } |
| if (status != null) { |
| _json['status'] = status.toJson(); |
| } |
| if (title != null) { |
| _json['title'] = title; |
| } |
| if (useExplicitDryRunSpec != null) { |
| _json['useExplicitDryRunSpec'] = useExplicitDryRunSpec; |
| } |
| return _json; |
| } |
| } |
| |
| /// `ServicePerimeterConfig` specifies a set of Google Cloud resources that |
| /// describe specific Service Perimeter configuration. |
| class GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig { |
| /// A list of `AccessLevel` resource names that allow resources within the |
| /// `ServicePerimeter` to be accessed from the internet. |
| /// |
| /// `AccessLevels` listed must be in the same policy as this |
| /// `ServicePerimeter`. Referencing a nonexistent `AccessLevel` is a syntax |
| /// error. If no `AccessLevel` names are listed, resources within the |
| /// perimeter can only be accessed via Google Cloud calls with request origins |
| /// within the perimeter. Example: |
| /// `"accessPolicies/MY_POLICY/accessLevels/MY_LEVEL"`. For Service Perimeter |
| /// Bridge, must be empty. |
| core.List<core.String> accessLevels; |
| |
| /// List of EgressPolicies to apply to the perimeter. |
| /// |
| /// A perimeter may have multiple EgressPolicies, each of which is evaluated |
| /// separately. Access is granted if any EgressPolicy grants it. Must be empty |
| /// for a perimeter bridge. |
| core.List<GoogleIdentityAccesscontextmanagerV1EgressPolicy> egressPolicies; |
| |
| /// List of IngressPolicies to apply to the perimeter. |
| /// |
| /// A perimeter may have multiple IngressPolicies, each of which is evaluated |
| /// separately. Access is granted if any Ingress Policy grants it. Must be |
| /// empty for a perimeter bridge. |
| core.List<GoogleIdentityAccesscontextmanagerV1IngressPolicy> ingressPolicies; |
| |
| /// A list of Google Cloud resources that are inside of the service perimeter. |
| /// |
| /// Currently only projects are allowed. Format: `projects/{project_number}` |
| core.List<core.String> resources; |
| |
| /// Google Cloud services that are subject to the Service Perimeter |
| /// restrictions. |
| /// |
| /// For example, if `storage.googleapis.com` is specified, access to the |
| /// storage buckets inside the perimeter must meet the perimeter's access |
| /// restrictions. |
| core.List<core.String> restrictedServices; |
| |
| /// Configuration for APIs allowed within Perimeter. |
| GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices |
| vpcAccessibleServices; |
| |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig(); |
| |
| GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig.fromJson( |
| core.Map _json) { |
| if (_json.containsKey('accessLevels')) { |
| accessLevels = (_json['accessLevels'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('egressPolicies')) { |
| egressPolicies = (_json['egressPolicies'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1EgressPolicy>((value) => |
| GoogleIdentityAccesscontextmanagerV1EgressPolicy.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('ingressPolicies')) { |
| ingressPolicies = (_json['ingressPolicies'] as core.List) |
| .map<GoogleIdentityAccesscontextmanagerV1IngressPolicy>((value) => |
| GoogleIdentityAccesscontextmanagerV1IngressPolicy.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('resources')) { |
| resources = (_json['resources'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('restrictedServices')) { |
| restrictedServices = (_json['restrictedServices'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('vpcAccessibleServices')) { |
| vpcAccessibleServices = |
| GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices.fromJson( |
| _json['vpcAccessibleServices'] |
| as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (accessLevels != null) { |
| _json['accessLevels'] = accessLevels; |
| } |
| if (egressPolicies != null) { |
| _json['egressPolicies'] = |
| egressPolicies.map((value) => value.toJson()).toList(); |
| } |
| if (ingressPolicies != null) { |
| _json['ingressPolicies'] = |
| ingressPolicies.map((value) => value.toJson()).toList(); |
| } |
| if (resources != null) { |
| _json['resources'] = resources; |
| } |
| if (restrictedServices != null) { |
| _json['restrictedServices'] = restrictedServices; |
| } |
| if (vpcAccessibleServices != null) { |
| _json['vpcAccessibleServices'] = vpcAccessibleServices.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Specifies how APIs are allowed to communicate within the Service Perimeter. |
| class GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices { |
| /// The list of APIs usable within the Service Perimeter. |
| /// |
| /// Must be empty unless 'enable_restriction' is True. You can specify a list |
| /// of individual services, as well as include the 'RESTRICTED-SERVICES' |
| /// value, which automatically includes all of the services protected by the |
| /// perimeter. |
| core.List<core.String> allowedServices; |
| |
| /// Whether to restrict API calls within the Service Perimeter to the list of |
| /// APIs specified in 'allowed_services'. |
| core.bool enableRestriction; |
| |
| GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices(); |
| |
| GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices.fromJson( |
| core.Map _json) { |
| if (_json.containsKey('allowedServices')) { |
| allowedServices = (_json['allowedServices'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('enableRestriction')) { |
| enableRestriction = _json['enableRestriction'] as core.bool; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (allowedServices != null) { |
| _json['allowedServices'] = allowedServices; |
| } |
| if (enableRestriction != null) { |
| _json['enableRestriction'] = enableRestriction; |
| } |
| return _json; |
| } |
| } |
| |
| /// An analysis message to group the query and results. |
| class IamPolicyAnalysis { |
| /// The analysis query. |
| IamPolicyAnalysisQuery analysisQuery; |
| |
| /// A list of IamPolicyAnalysisResult that matches the analysis query, or |
| /// empty if no result is found. |
| core.List<IamPolicyAnalysisResult> analysisResults; |
| |
| /// Represents whether all entries in the analysis_results have been fully |
| /// explored to answer the query. |
| core.bool fullyExplored; |
| |
| /// A list of non-critical errors happened during the query handling. |
| core.List<IamPolicyAnalysisState> nonCriticalErrors; |
| |
| IamPolicyAnalysis(); |
| |
| IamPolicyAnalysis.fromJson(core.Map _json) { |
| if (_json.containsKey('analysisQuery')) { |
| analysisQuery = IamPolicyAnalysisQuery.fromJson( |
| _json['analysisQuery'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('analysisResults')) { |
| analysisResults = (_json['analysisResults'] as core.List) |
| .map<IamPolicyAnalysisResult>((value) => |
| IamPolicyAnalysisResult.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('fullyExplored')) { |
| fullyExplored = _json['fullyExplored'] as core.bool; |
| } |
| if (_json.containsKey('nonCriticalErrors')) { |
| nonCriticalErrors = (_json['nonCriticalErrors'] as core.List) |
| .map<IamPolicyAnalysisState>((value) => |
| IamPolicyAnalysisState.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (analysisQuery != null) { |
| _json['analysisQuery'] = analysisQuery.toJson(); |
| } |
| if (analysisResults != null) { |
| _json['analysisResults'] = |
| analysisResults.map((value) => value.toJson()).toList(); |
| } |
| if (fullyExplored != null) { |
| _json['fullyExplored'] = fullyExplored; |
| } |
| if (nonCriticalErrors != null) { |
| _json['nonCriticalErrors'] = |
| nonCriticalErrors.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Output configuration for export IAM policy analysis destination. |
| class IamPolicyAnalysisOutputConfig { |
| /// Destination on BigQuery. |
| GoogleCloudAssetV1BigQueryDestination bigqueryDestination; |
| |
| /// Destination on Cloud Storage. |
| GoogleCloudAssetV1GcsDestination gcsDestination; |
| |
| IamPolicyAnalysisOutputConfig(); |
| |
| IamPolicyAnalysisOutputConfig.fromJson(core.Map _json) { |
| if (_json.containsKey('bigqueryDestination')) { |
| bigqueryDestination = GoogleCloudAssetV1BigQueryDestination.fromJson( |
| _json['bigqueryDestination'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('gcsDestination')) { |
| gcsDestination = GoogleCloudAssetV1GcsDestination.fromJson( |
| _json['gcsDestination'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (bigqueryDestination != null) { |
| _json['bigqueryDestination'] = bigqueryDestination.toJson(); |
| } |
| if (gcsDestination != null) { |
| _json['gcsDestination'] = gcsDestination.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// ## LINT.IfChange Keep in sync with ## |
| /// logs/proto/cloud_asset_inventory/iam_policy_analyzer_log.proto IAM policy |
| /// analysis query message. |
| class IamPolicyAnalysisQuery { |
| /// Specifies roles or permissions for analysis. |
| /// |
| /// This is optional. |
| /// |
| /// Optional. |
| AccessSelector accessSelector; |
| |
| /// Specifies an identity for analysis. |
| /// |
| /// Optional. |
| IdentitySelector identitySelector; |
| |
| /// The query options. |
| /// |
| /// Optional. |
| Options options; |
| |
| /// Specifies a resource for analysis. |
| /// |
| /// Optional. |
| ResourceSelector resourceSelector; |
| |
| /// The relative name of the root asset. |
| /// |
| /// Only resources and IAM policies within the scope will be analyzed. This |
| /// can only be an organization number (such as "organizations/123"), a folder |
| /// number (such as "folders/123"), a project ID (such as |
| /// "projects/my-project-id"), or a project number (such as "projects/12345"). |
| /// To know how to get organization id, visit |
| /// [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). |
| /// To know how to get folder or project id, visit |
| /// [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects). |
| /// |
| /// Required. |
| core.String scope; |
| |
| IamPolicyAnalysisQuery(); |
| |
| IamPolicyAnalysisQuery.fromJson(core.Map _json) { |
| if (_json.containsKey('accessSelector')) { |
| accessSelector = AccessSelector.fromJson( |
| _json['accessSelector'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('identitySelector')) { |
| identitySelector = IdentitySelector.fromJson( |
| _json['identitySelector'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('options')) { |
| options = Options.fromJson( |
| _json['options'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('resourceSelector')) { |
| resourceSelector = ResourceSelector.fromJson( |
| _json['resourceSelector'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('scope')) { |
| scope = _json['scope'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (accessSelector != null) { |
| _json['accessSelector'] = accessSelector.toJson(); |
| } |
| if (identitySelector != null) { |
| _json['identitySelector'] = identitySelector.toJson(); |
| } |
| if (options != null) { |
| _json['options'] = options.toJson(); |
| } |
| if (resourceSelector != null) { |
| _json['resourceSelector'] = resourceSelector.toJson(); |
| } |
| if (scope != null) { |
| _json['scope'] = scope; |
| } |
| return _json; |
| } |
| } |
| |
| /// IAM Policy analysis result, consisting of one IAM policy binding and derived |
| /// access control lists. |
| class IamPolicyAnalysisResult { |
| /// The access control lists derived from the iam_binding that match or |
| /// potentially match resource and access selectors specified in the request. |
| core.List<GoogleCloudAssetV1AccessControlList> accessControlLists; |
| |
| /// The |
| /// [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) |
| /// of the resource to which the iam_binding policy attaches. |
| core.String attachedResourceFullName; |
| |
| /// Represents whether all analyses on the iam_binding have successfully |
| /// finished. |
| core.bool fullyExplored; |
| |
| /// The Cloud IAM policy binding under analysis. |
| Binding iamBinding; |
| |
| /// The identity list derived from members of the iam_binding that match or |
| /// potentially match identity selector specified in the request. |
| GoogleCloudAssetV1IdentityList identityList; |
| |
| IamPolicyAnalysisResult(); |
| |
| IamPolicyAnalysisResult.fromJson(core.Map _json) { |
| if (_json.containsKey('accessControlLists')) { |
| accessControlLists = (_json['accessControlLists'] as core.List) |
| .map<GoogleCloudAssetV1AccessControlList>((value) => |
| GoogleCloudAssetV1AccessControlList.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('attachedResourceFullName')) { |
| attachedResourceFullName = |
| _json['attachedResourceFullName'] as core.String; |
| } |
| if (_json.containsKey('fullyExplored')) { |
| fullyExplored = _json['fullyExplored'] as core.bool; |
| } |
| if (_json.containsKey('iamBinding')) { |
| iamBinding = Binding.fromJson( |
| _json['iamBinding'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('identityList')) { |
| identityList = GoogleCloudAssetV1IdentityList.fromJson( |
| _json['identityList'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (accessControlLists != null) { |
| _json['accessControlLists'] = |
| accessControlLists.map((value) => value.toJson()).toList(); |
| } |
| if (attachedResourceFullName != null) { |
| _json['attachedResourceFullName'] = attachedResourceFullName; |
| } |
| if (fullyExplored != null) { |
| _json['fullyExplored'] = fullyExplored; |
| } |
| if (iamBinding != null) { |
| _json['iamBinding'] = iamBinding.toJson(); |
| } |
| if (identityList != null) { |
| _json['identityList'] = identityList.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Represents the detailed state of an entity under analysis, such as a |
| /// resource, an identity or an access. |
| class IamPolicyAnalysisState { |
| /// The human-readable description of the cause of failure. |
| core.String cause; |
| |
| /// The Google standard error code that best describes the state. |
| /// |
| /// For example: - OK means the analysis on this entity has been successfully |
| /// finished; - PERMISSION_DENIED means an access denied error is encountered; |
| /// - DEADLINE_EXCEEDED means the analysis on this entity hasn't been started |
| /// in time; |
| /// Possible string values are: |
| /// - "OK" : Not an error; returned on success HTTP Mapping: 200 OK |
| /// - "CANCELLED" : The operation was cancelled, typically by the caller. HTTP |
| /// Mapping: 499 Client Closed Request |
| /// - "UNKNOWN" : Unknown error. For example, this error may be returned when |
| /// a `Status` value received from another address space belongs to an error |
| /// space that is not known in this address space. Also errors raised by APIs |
| /// that do not return enough error information may be converted to this |
| /// error. HTTP Mapping: 500 Internal Server Error |
| /// - "INVALID_ARGUMENT" : The client specified an invalid argument. Note that |
| /// this differs from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates |
| /// arguments that are problematic regardless of the state of the system |
| /// (e.g., a malformed file name). HTTP Mapping: 400 Bad Request |
| /// - "DEADLINE_EXCEEDED" : The deadline expired before the operation could |
| /// complete. For operations that change the state of the system, this error |
| /// may be returned even if the operation has completed successfully. For |
| /// example, a successful response from a server could have been delayed long |
| /// enough for the deadline to expire. HTTP Mapping: 504 Gateway Timeout |
| /// - "NOT_FOUND" : Some requested entity (e.g., file or directory) was not |
| /// found. Note to server developers: if a request is denied for an entire |
| /// class of users, such as gradual feature rollout or undocumented allowlist, |
| /// `NOT_FOUND` may be used. If a request is denied for some users within a |
| /// class of users, such as user-based access control, `PERMISSION_DENIED` |
| /// must be used. HTTP Mapping: 404 Not Found |
| /// - "ALREADY_EXISTS" : The entity that a client attempted to create (e.g., |
| /// file or directory) already exists. HTTP Mapping: 409 Conflict |
| /// - "PERMISSION_DENIED" : The caller does not have permission to execute the |
| /// specified operation. `PERMISSION_DENIED` must not be used for rejections |
| /// caused by exhausting some resource (use `RESOURCE_EXHAUSTED` instead for |
| /// those errors). `PERMISSION_DENIED` must not be used if the caller can not |
| /// be identified (use `UNAUTHENTICATED` instead for those errors). This error |
| /// code does not imply the request is valid or the requested entity exists or |
| /// satisfies other pre-conditions. HTTP Mapping: 403 Forbidden |
| /// - "UNAUTHENTICATED" : The request does not have valid authentication |
| /// credentials for the operation. HTTP Mapping: 401 Unauthorized |
| /// - "RESOURCE_EXHAUSTED" : Some resource has been exhausted, perhaps a |
| /// per-user quota, or perhaps the entire file system is out of space. HTTP |
| /// Mapping: 429 Too Many Requests |
| /// - "FAILED_PRECONDITION" : The operation was rejected because the system is |
| /// not in a state required for the operation's execution. For example, the |
| /// directory to be deleted is non-empty, an rmdir operation is applied to a |
| /// non-directory, etc. Service implementors can use the following guidelines |
| /// to decide between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: (a) |
| /// Use `UNAVAILABLE` if the client can retry just the failing call. (b) Use |
| /// `ABORTED` if the client should retry at a higher level (e.g., when a |
| /// client-specified test-and-set fails, indicating the client should restart |
| /// a read-modify-write sequence). (c) Use `FAILED_PRECONDITION` if the client |
| /// should not retry until the system state has been explicitly fixed. E.g., |
| /// if an "rmdir" fails because the directory is non-empty, |
| /// `FAILED_PRECONDITION` should be returned since the client should not retry |
| /// unless the files are deleted from the directory. HTTP Mapping: 400 Bad |
| /// Request |
| /// - "ABORTED" : The operation was aborted, typically due to a concurrency |
| /// issue such as a sequencer check failure or transaction abort. See the |
| /// guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, |
| /// and `UNAVAILABLE`. HTTP Mapping: 409 Conflict |
| /// - "OUT_OF_RANGE" : The operation was attempted past the valid range. E.g., |
| /// seeking or reading past end-of-file. Unlike `INVALID_ARGUMENT`, this error |
| /// indicates a problem that may be fixed if the system state changes. For |
| /// example, a 32-bit file system will generate `INVALID_ARGUMENT` if asked to |
| /// read at an offset that is not in the range \[0,2^32-1\], but it will |
| /// generate `OUT_OF_RANGE` if asked to read from an offset past the current |
| /// file size. There is a fair bit of overlap between `FAILED_PRECONDITION` |
| /// and `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific |
| /// error) when it applies so that callers who are iterating through a space |
| /// can easily look for an `OUT_OF_RANGE` error to detect when they are done. |
| /// HTTP Mapping: 400 Bad Request |
| /// - "UNIMPLEMENTED" : The operation is not implemented or is not |
| /// supported/enabled in this service. HTTP Mapping: 501 Not Implemented |
| /// - "INTERNAL" : Internal errors. This means that some invariants expected |
| /// by the underlying system have been broken. This error code is reserved for |
| /// serious errors. HTTP Mapping: 500 Internal Server Error |
| /// - "UNAVAILABLE" : The service is currently unavailable. This is most |
| /// likely a transient condition, which can be corrected by retrying with a |
| /// backoff. Note that it is not always safe to retry non-idempotent |
| /// operations. See the guidelines above for deciding between |
| /// `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. HTTP Mapping: 503 |
| /// Service Unavailable |
| /// - "DATA_LOSS" : Unrecoverable data loss or corruption. HTTP Mapping: 500 |
| /// Internal Server Error |
| core.String code; |
| |
| IamPolicyAnalysisState(); |
| |
| IamPolicyAnalysisState.fromJson(core.Map _json) { |
| if (_json.containsKey('cause')) { |
| cause = _json['cause'] as core.String; |
| } |
| if (_json.containsKey('code')) { |
| code = _json['code'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (cause != null) { |
| _json['cause'] = cause; |
| } |
| if (code != null) { |
| _json['code'] = code; |
| } |
| return _json; |
| } |
| } |
| |
| /// A result of IAM Policy search, containing information of an IAM policy. |
| class IamPolicySearchResult { |
| /// Explanation about the IAM policy search result. |
| /// |
| /// It contains additional information to explain why the search result |
| /// matches the query. |
| /// |
| /// Optional. |
| Explanation explanation; |
| |
| /// The IAM policy directly set on the given resource. |
| /// |
| /// Note that the original IAM policy can contain multiple bindings. This only |
| /// contains the bindings that match the given query. For queries that don't |
| /// contain a constrain on policies (e.g., an empty query), this contains all |
| /// the bindings. To search against the `policy` bindings: * use a field |
| /// query: - query by the policy contained members. Example: |
| /// `policy:amy@gmail.com` - query by the policy contained roles. Example: |
| /// `policy:roles/compute.admin` - query by the policy contained roles' |
| /// included permissions. Example: |
| /// `policy.role.permissions:compute.instances.create` |
| /// |
| /// Required. |
| Policy policy; |
| |
| /// The project that the associated GCP resource belongs to, in the form of |
| /// projects/{PROJECT_NUMBER}. |
| /// |
| /// If an IAM policy is set on a resource (like VM instance, Cloud Storage |
| /// bucket), the project field will indicate the project that contains the |
| /// resource. If an IAM policy is set on a folder or orgnization, the project |
| /// field will be empty. To search against the `project`: * specify the |
| /// `scope` field as this project in your search request. |
| /// |
| /// Optional. |
| core.String project; |
| |
| /// The full resource name of the resource associated with this IAM policy. |
| /// |
| /// Example: |
| /// `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. |
| /// See |
| /// [Cloud Asset Inventory Resource Name Format](https://cloud.google.com/asset-inventory/docs/resource-name-format) |
| /// for more information. To search against the `resource`: * use a field |
| /// query. Example: `resource:organizations/123` |
| /// |
| /// Required. |
| core.String resource; |
| |
| IamPolicySearchResult(); |
| |
| IamPolicySearchResult.fromJson(core.Map _json) { |
| if (_json.containsKey('explanation')) { |
| explanation = Explanation.fromJson( |
| _json['explanation'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('policy')) { |
| policy = Policy.fromJson( |
| _json['policy'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('project')) { |
| project = _json['project'] as core.String; |
| } |
| if (_json.containsKey('resource')) { |
| resource = _json['resource'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (explanation != null) { |
| _json['explanation'] = explanation.toJson(); |
| } |
| if (policy != null) { |
| _json['policy'] = policy.toJson(); |
| } |
| if (project != null) { |
| _json['project'] = project; |
| } |
| if (resource != null) { |
| _json['resource'] = resource; |
| } |
| return _json; |
| } |
| } |
| |
| /// Specifies an identity for which to determine resource access, based on roles |
| /// assigned either directly to them or to the groups they belong to, directly |
| /// or indirectly. |
| class IdentitySelector { |
| /// The identity appear in the form of members in |
| /// [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). |
| /// |
| /// The examples of supported forms are: "user:mike@example.com", |
| /// "group:admins@example.com", "domain:google.com", |
| /// "serviceAccount:my-project-id@appspot.gserviceaccount.com". Notice that |
| /// wildcard characters (such as * and ?) are not supported. You must give a |
| /// specific identity. |
| /// |
| /// Required. |
| core.String identity; |
| |
| IdentitySelector(); |
| |
| IdentitySelector.fromJson(core.Map _json) { |
| if (_json.containsKey('identity')) { |
| identity = _json['identity'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (identity != null) { |
| _json['identity'] = identity; |
| } |
| return _json; |
| } |
| } |
| |
| /// The inventory details of a VM. |
| class Inventory { |
| /// Inventory items related to the VM keyed by an opaque unique identifier for |
| /// each inventory item. |
| /// |
| /// The identifier is unique to each distinct and addressable inventory item |
| /// and will change, when there is a new package version. |
| core.Map<core.String, Item> items; |
| |
| /// Base level operating system information for the VM. |
| OsInfo osInfo; |
| |
| Inventory(); |
| |
| Inventory.fromJson(core.Map _json) { |
| if (_json.containsKey('items')) { |
| items = (_json['items'] as core.Map).cast<core.String, core.Map>().map( |
| (key, item) => core.MapEntry( |
| key, |
| Item.fromJson(item as core.Map<core.String, core.dynamic>), |
| ), |
| ); |
| } |
| if (_json.containsKey('osInfo')) { |
| osInfo = OsInfo.fromJson( |
| _json['osInfo'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (items != null) { |
| _json['items'] = |
| items.map((key, item) => core.MapEntry(key, item.toJson())); |
| } |
| if (osInfo != null) { |
| _json['osInfo'] = osInfo.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A single piece of inventory on a VM. |
| class Item { |
| /// Software package available to be installed on the VM instance. |
| SoftwarePackage availablePackage; |
| |
| /// When this inventory item was first detected. |
| core.String createTime; |
| |
| /// Identifier for this item, unique across items for this VM. |
| core.String id; |
| |
| /// Software package present on the VM instance. |
| SoftwarePackage installedPackage; |
| |
| /// The origin of this inventory item. |
| /// Possible string values are: |
| /// - "ORIGIN_TYPE_UNSPECIFIED" : Invalid. An origin type must be specified. |
| /// - "INVENTORY_REPORT" : This inventory item was discovered as the result of |
| /// the agent reporting inventory via the reporting API. |
| core.String originType; |
| |
| /// The specific type of inventory, correlating to its specific details. |
| /// Possible string values are: |
| /// - "TYPE_UNSPECIFIED" : Invalid. An type must be specified. |
| /// - "INSTALLED_PACKAGE" : This represents a package that is installed on the |
| /// VM. |
| /// - "AVAILABLE_PACKAGE" : This represents an update that is available for a |
| /// package. |
| core.String type; |
| |
| /// When this inventory item was last modified. |
| core.String updateTime; |
| |
| Item(); |
| |
| Item.fromJson(core.Map _json) { |
| if (_json.containsKey('availablePackage')) { |
| availablePackage = SoftwarePackage.fromJson( |
| _json['availablePackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('createTime')) { |
| createTime = _json['createTime'] as core.String; |
| } |
| if (_json.containsKey('id')) { |
| id = _json['id'] as core.String; |
| } |
| if (_json.containsKey('installedPackage')) { |
| installedPackage = SoftwarePackage.fromJson( |
| _json['installedPackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('originType')) { |
| originType = _json['originType'] as core.String; |
| } |
| if (_json.containsKey('type')) { |
| type = _json['type'] as core.String; |
| } |
| if (_json.containsKey('updateTime')) { |
| updateTime = _json['updateTime'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (availablePackage != null) { |
| _json['availablePackage'] = availablePackage.toJson(); |
| } |
| if (createTime != null) { |
| _json['createTime'] = createTime; |
| } |
| if (id != null) { |
| _json['id'] = id; |
| } |
| if (installedPackage != null) { |
| _json['installedPackage'] = installedPackage.toJson(); |
| } |
| if (originType != null) { |
| _json['originType'] = originType; |
| } |
| if (type != null) { |
| _json['type'] = type; |
| } |
| if (updateTime != null) { |
| _json['updateTime'] = updateTime; |
| } |
| return _json; |
| } |
| } |
| |
| class ListFeedsResponse { |
| /// A list of feeds. |
| core.List<Feed> feeds; |
| |
| ListFeedsResponse(); |
| |
| ListFeedsResponse.fromJson(core.Map _json) { |
| if (_json.containsKey('feeds')) { |
| feeds = (_json['feeds'] as core.List) |
| .map<Feed>((value) => |
| Feed.fromJson(value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (feeds != null) { |
| _json['feeds'] = feeds.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// This resource represents a long-running operation that is the result of a |
| /// network API call. |
| class Operation { |
| /// If the value is `false`, it means the operation is still in progress. |
| /// |
| /// If `true`, the operation is completed, and either `error` or `response` is |
| /// available. |
| core.bool done; |
| |
| /// The error result of the operation in case of failure or cancellation. |
| Status error; |
| |
| /// Service-specific metadata associated with the operation. |
| /// |
| /// It typically contains progress information and common metadata such as |
| /// create time. Some services might not provide such metadata. Any method |
| /// that returns a long-running operation should document the metadata type, |
| /// if any. |
| /// |
| /// The values for Object must be JSON objects. It can consist of `num`, |
| /// `String`, `bool` and `null` as well as `Map` and `List` values. |
| core.Map<core.String, core.Object> metadata; |
| |
| /// The server-assigned name, which is only unique within the same service |
| /// that originally returns it. |
| /// |
| /// If you use the default HTTP mapping, the `name` should be a resource name |
| /// ending with `operations/{unique_id}`. |
| core.String name; |
| |
| /// The normal response of the operation in case of success. |
| /// |
| /// If the original method returns no data on success, such as `Delete`, the |
| /// response is `google.protobuf.Empty`. If the original method is standard |
| /// `Get`/`Create`/`Update`, the response should be the resource. For other |
| /// methods, the response should have the type `XxxResponse`, where `Xxx` is |
| /// the original method name. For example, if the original method name is |
| /// `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`. |
| /// |
| /// The values for Object must be JSON objects. It can consist of `num`, |
| /// `String`, `bool` and `null` as well as `Map` and `List` values. |
| core.Map<core.String, core.Object> response; |
| |
| Operation(); |
| |
| Operation.fromJson(core.Map _json) { |
| if (_json.containsKey('done')) { |
| done = _json['done'] as core.bool; |
| } |
| if (_json.containsKey('error')) { |
| error = Status.fromJson( |
| _json['error'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('metadata')) { |
| metadata = |
| (_json['metadata'] as core.Map).cast<core.String, core.Object>().map( |
| (key, item) => core.MapEntry( |
| key, |
| item as core.Object, |
| ), |
| ); |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| if (_json.containsKey('response')) { |
| response = |
| (_json['response'] as core.Map).cast<core.String, core.Object>().map( |
| (key, item) => core.MapEntry( |
| key, |
| item as core.Object, |
| ), |
| ); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (done != null) { |
| _json['done'] = done; |
| } |
| if (error != null) { |
| _json['error'] = error.toJson(); |
| } |
| if (metadata != null) { |
| _json['metadata'] = metadata; |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| if (response != null) { |
| _json['response'] = response; |
| } |
| return _json; |
| } |
| } |
| |
| /// Contains query options. |
| class Options { |
| /// If true, the response will include access analysis from identities to |
| /// resources via service account impersonation. |
| /// |
| /// This is a very expensive operation, because many derived queries will be |
| /// executed. We highly recommend you use |
| /// AssetService.AnalyzeIamPolicyLongrunning rpc instead. For example, if the |
| /// request analyzes for which resources user A has permission P, and there's |
| /// an IAM policy states user A has iam.serviceAccounts.getAccessToken |
| /// permission to a service account SA, and there's another IAM policy states |
| /// service account SA has permission P to a GCP folder F, then user A |
| /// potentially has access to the GCP folder F. And those advanced analysis |
| /// results will be included in |
| /// AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another |
| /// example, if the request analyzes for who has permission P to a GCP folder |
| /// F, and there's an IAM policy states user A has iam.serviceAccounts.actAs |
| /// permission to a service account SA, and there's another IAM policy states |
| /// service account SA has permission P to the GCP folder F, then user A |
| /// potentially has access to the GCP folder F. And those advanced analysis |
| /// results will be included in |
| /// AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default |
| /// is false. |
| /// |
| /// Optional. |
| core.bool analyzeServiceAccountImpersonation; |
| |
| /// If true, the identities section of the result will expand any Google |
| /// groups appearing in an IAM policy binding. |
| /// |
| /// If IamPolicyAnalysisQuery.identity_selector is specified, the identity in |
| /// the result will be determined by the selector, and this flag is not |
| /// allowed to set. Default is false. |
| /// |
| /// Optional. |
| core.bool expandGroups; |
| |
| /// If true and IamPolicyAnalysisQuery.resource_selector is not specified, the |
| /// resource section of the result will expand any resource attached to an IAM |
| /// policy to include resources lower in the resource hierarchy. |
| /// |
| /// For example, if the request analyzes for which resources user A has |
| /// permission P, and the results include an IAM policy with P on a GCP |
| /// folder, the results will also include resources in that folder with |
| /// permission P. If true and IamPolicyAnalysisQuery.resource_selector is |
| /// specified, the resource section of the result will expand the specified |
| /// resource to include resources lower in the resource hierarchy. Only |
| /// project or lower resources are supported. Folder and organization resource |
| /// cannot be used together with this option. For example, if the request |
| /// analyzes for which users have permission P on a GCP project with this |
| /// option enabled, the results will include all users who have permission P |
| /// on that project or any lower resource. Default is false. |
| /// |
| /// Optional. |
| core.bool expandResources; |
| |
| /// If true, the access section of result will expand any roles appearing in |
| /// IAM policy bindings to include their permissions. |
| /// |
| /// If IamPolicyAnalysisQuery.access_selector is specified, the access section |
| /// of the result will be determined by the selector, and this flag is not |
| /// allowed to set. Default is false. |
| /// |
| /// Optional. |
| core.bool expandRoles; |
| |
| /// If true, the result will output group identity edges, starting from the |
| /// binding's group members, to any expanded identities. |
| /// |
| /// Default is false. |
| /// |
| /// Optional. |
| core.bool outputGroupEdges; |
| |
| /// If true, the result will output resource edges, starting from the policy |
| /// attached resource, to any expanded resources. |
| /// |
| /// Default is false. |
| /// |
| /// Optional. |
| core.bool outputResourceEdges; |
| |
| Options(); |
| |
| Options.fromJson(core.Map _json) { |
| if (_json.containsKey('analyzeServiceAccountImpersonation')) { |
| analyzeServiceAccountImpersonation = |
| _json['analyzeServiceAccountImpersonation'] as core.bool; |
| } |
| if (_json.containsKey('expandGroups')) { |
| expandGroups = _json['expandGroups'] as core.bool; |
| } |
| if (_json.containsKey('expandResources')) { |
| expandResources = _json['expandResources'] as core.bool; |
| } |
| if (_json.containsKey('expandRoles')) { |
| expandRoles = _json['expandRoles'] as core.bool; |
| } |
| if (_json.containsKey('outputGroupEdges')) { |
| outputGroupEdges = _json['outputGroupEdges'] as core.bool; |
| } |
| if (_json.containsKey('outputResourceEdges')) { |
| outputResourceEdges = _json['outputResourceEdges'] as core.bool; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (analyzeServiceAccountImpersonation != null) { |
| _json['analyzeServiceAccountImpersonation'] = |
| analyzeServiceAccountImpersonation; |
| } |
| if (expandGroups != null) { |
| _json['expandGroups'] = expandGroups; |
| } |
| if (expandResources != null) { |
| _json['expandResources'] = expandResources; |
| } |
| if (expandRoles != null) { |
| _json['expandRoles'] = expandRoles; |
| } |
| if (outputGroupEdges != null) { |
| _json['outputGroupEdges'] = outputGroupEdges; |
| } |
| if (outputResourceEdges != null) { |
| _json['outputResourceEdges'] = outputResourceEdges; |
| } |
| return _json; |
| } |
| } |
| |
| /// Operating system information for the VM. |
| class OsInfo { |
| /// The system architecture of the operating system. |
| core.String architecture; |
| |
| /// The VM hostname. |
| core.String hostname; |
| |
| /// The kernel release of the operating system. |
| core.String kernelRelease; |
| |
| /// The kernel version of the operating system. |
| core.String kernelVersion; |
| |
| /// The operating system long name. |
| /// |
| /// For example 'Debian GNU/Linux 9' or 'Microsoft Window Server 2019 |
| /// Datacenter'. |
| core.String longName; |
| |
| /// The current version of the OS Config agent running on the VM. |
| core.String osconfigAgentVersion; |
| |
| /// The operating system short name. |
| /// |
| /// For example, 'windows' or 'debian'. |
| core.String shortName; |
| |
| /// The version of the operating system. |
| core.String version; |
| |
| OsInfo(); |
| |
| OsInfo.fromJson(core.Map _json) { |
| if (_json.containsKey('architecture')) { |
| architecture = _json['architecture'] as core.String; |
| } |
| if (_json.containsKey('hostname')) { |
| hostname = _json['hostname'] as core.String; |
| } |
| if (_json.containsKey('kernelRelease')) { |
| kernelRelease = _json['kernelRelease'] as core.String; |
| } |
| if (_json.containsKey('kernelVersion')) { |
| kernelVersion = _json['kernelVersion'] as core.String; |
| } |
| if (_json.containsKey('longName')) { |
| longName = _json['longName'] as core.String; |
| } |
| if (_json.containsKey('osconfigAgentVersion')) { |
| osconfigAgentVersion = _json['osconfigAgentVersion'] as core.String; |
| } |
| if (_json.containsKey('shortName')) { |
| shortName = _json['shortName'] as core.String; |
| } |
| if (_json.containsKey('version')) { |
| version = _json['version'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (architecture != null) { |
| _json['architecture'] = architecture; |
| } |
| if (hostname != null) { |
| _json['hostname'] = hostname; |
| } |
| if (kernelRelease != null) { |
| _json['kernelRelease'] = kernelRelease; |
| } |
| if (kernelVersion != null) { |
| _json['kernelVersion'] = kernelVersion; |
| } |
| if (longName != null) { |
| _json['longName'] = longName; |
| } |
| if (osconfigAgentVersion != null) { |
| _json['osconfigAgentVersion'] = osconfigAgentVersion; |
| } |
| if (shortName != null) { |
| _json['shortName'] = shortName; |
| } |
| if (version != null) { |
| _json['version'] = version; |
| } |
| return _json; |
| } |
| } |
| |
| /// Output configuration for export assets destination. |
| class OutputConfig { |
| /// Destination on BigQuery. |
| /// |
| /// The output table stores the fields in asset proto as columns in BigQuery. |
| BigQueryDestination bigqueryDestination; |
| |
| /// Destination on Cloud Storage. |
| GcsDestination gcsDestination; |
| |
| OutputConfig(); |
| |
| OutputConfig.fromJson(core.Map _json) { |
| if (_json.containsKey('bigqueryDestination')) { |
| bigqueryDestination = BigQueryDestination.fromJson( |
| _json['bigqueryDestination'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('gcsDestination')) { |
| gcsDestination = GcsDestination.fromJson( |
| _json['gcsDestination'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (bigqueryDestination != null) { |
| _json['bigqueryDestination'] = bigqueryDestination.toJson(); |
| } |
| if (gcsDestination != null) { |
| _json['gcsDestination'] = gcsDestination.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Specifications of BigQuery partitioned table as export destination. |
| class PartitionSpec { |
| /// The partition key for BigQuery partitioned table. |
| /// Possible string values are: |
| /// - "PARTITION_KEY_UNSPECIFIED" : Unspecified partition key. If used, it |
| /// means using non-partitioned table. |
| /// - "READ_TIME" : The time when the snapshot is taken. If specified as |
| /// partition key, the result table(s) is partitoned by the additional |
| /// timestamp column, readTime. If \[read_time\] in ExportAssetsRequest is |
| /// specified, the readTime column's value will be the same as it. Otherwise, |
| /// its value will be the current time that is used to take the snapshot. |
| /// - "REQUEST_TIME" : The time when the request is received and started to be |
| /// processed. If specified as partition key, the result table(s) is |
| /// partitoned by the requestTime column, an additional timestamp column |
| /// representing when the request was received. |
| core.String partitionKey; |
| |
| PartitionSpec(); |
| |
| PartitionSpec.fromJson(core.Map _json) { |
| if (_json.containsKey('partitionKey')) { |
| partitionKey = _json['partitionKey'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (partitionKey != null) { |
| _json['partitionKey'] = partitionKey; |
| } |
| return _json; |
| } |
| } |
| |
| /// IAM permissions |
| class Permissions { |
| /// A list of permissions. |
| /// |
| /// A sample permission string: `compute.disk.get`. |
| core.List<core.String> permissions; |
| |
| Permissions(); |
| |
| Permissions.fromJson(core.Map _json) { |
| if (_json.containsKey('permissions')) { |
| permissions = (_json['permissions'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (permissions != null) { |
| _json['permissions'] = permissions; |
| } |
| return _json; |
| } |
| } |
| |
| /// An Identity and Access Management (IAM) policy, which specifies access |
| /// controls for Google Cloud resources. |
| /// |
| /// A `Policy` is a collection of `bindings`. A `binding` binds one or more |
| /// `members` to a single `role`. Members can be user accounts, service |
| /// accounts, Google groups, and domains (such as G Suite). A `role` is a named |
| /// list of permissions; each `role` can be an IAM predefined role or a |
| /// user-created custom role. For some types of Google Cloud resources, a |
| /// `binding` can also specify a `condition`, which is a logical expression that |
| /// allows access to a resource only if the expression evaluates to `true`. A |
| /// condition can add constraints based on attributes of the request, the |
| /// resource, or both. To learn which resources support conditions in their IAM |
| /// policies, see the |
| /// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). |
| /// **JSON example:** { "bindings": \[ { "role": |
| /// "roles/resourcemanager.organizationAdmin", "members": \[ |
| /// "user:mike@example.com", "group:admins@example.com", "domain:google.com", |
| /// "serviceAccount:my-project-id@appspot.gserviceaccount.com" \] }, { "role": |
| /// "roles/resourcemanager.organizationViewer", "members": \[ |
| /// "user:eve@example.com" \], "condition": { "title": "expirable access", |
| /// "description": "Does not grant access after Sep 2020", "expression": |
| /// "request.time < timestamp('2020-10-01T00:00:00.000Z')", } } \], "etag": |
| /// "BwWWja0YfJA=", "version": 3 } **YAML example:** bindings: - members: - |
| /// user:mike@example.com - group:admins@example.com - domain:google.com - |
| /// serviceAccount:my-project-id@appspot.gserviceaccount.com role: |
| /// roles/resourcemanager.organizationAdmin - members: - user:eve@example.com |
| /// role: roles/resourcemanager.organizationViewer condition: title: expirable |
| /// access description: Does not grant access after Sep 2020 expression: |
| /// request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - |
| /// version: 3 For a description of IAM and its features, see the |
| /// [IAM documentation](https://cloud.google.com/iam/docs/). |
| class Policy { |
| /// Specifies cloud audit logging configuration for this policy. |
| core.List<AuditConfig> auditConfigs; |
| |
| /// Associates a list of `members` to a `role`. |
| /// |
| /// Optionally, may specify a `condition` that determines how and when the |
| /// `bindings` are applied. Each of the `bindings` must contain at least one |
| /// member. |
| core.List<Binding> bindings; |
| |
| /// `etag` is used for optimistic concurrency control as a way to help prevent |
| /// simultaneous updates of a policy from overwriting each other. |
| /// |
| /// It is strongly suggested that systems make use of the `etag` in the |
| /// read-modify-write cycle to perform policy updates in order to avoid race |
| /// conditions: An `etag` is returned in the response to `getIamPolicy`, and |
| /// systems are expected to put that etag in the request to `setIamPolicy` to |
| /// ensure that their change will be applied to the same version of the |
| /// policy. **Important:** If you use IAM Conditions, you must include the |
| /// `etag` field whenever you call `setIamPolicy`. If you omit this field, |
| /// then IAM allows you to overwrite a version `3` policy with a version `1` |
| /// policy, and all of the conditions in the version `3` policy are lost. |
| core.String etag; |
| core.List<core.int> get etagAsBytes => convert.base64.decode(etag); |
| |
| set etagAsBytes(core.List<core.int> _bytes) { |
| etag = |
| convert.base64.encode(_bytes).replaceAll('/', '_').replaceAll('+', '-'); |
| } |
| |
| /// Specifies the format of the policy. |
| /// |
| /// Valid values are `0`, `1`, and `3`. Requests that specify an invalid value |
| /// are rejected. Any operation that affects conditional role bindings must |
| /// specify version `3`. This requirement applies to the following operations: |
| /// * Getting a policy that includes a conditional role binding * Adding a |
| /// conditional role binding to a policy * Changing a conditional role binding |
| /// in a policy * Removing any role binding, with or without a condition, from |
| /// a policy that includes conditions **Important:** If you use IAM |
| /// Conditions, you must include the `etag` field whenever you call |
| /// `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a |
| /// version `3` policy with a version `1` policy, and all of the conditions in |
| /// the version `3` policy are lost. If a policy does not include any |
| /// conditions, operations on that policy may specify any valid version or |
| /// leave the field unset. To learn which resources support conditions in |
| /// their IAM policies, see the |
| /// [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). |
| core.int version; |
| |
| Policy(); |
| |
| Policy.fromJson(core.Map _json) { |
| if (_json.containsKey('auditConfigs')) { |
| auditConfigs = (_json['auditConfigs'] as core.List) |
| .map<AuditConfig>((value) => AuditConfig.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('bindings')) { |
| bindings = (_json['bindings'] as core.List) |
| .map<Binding>((value) => |
| Binding.fromJson(value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('etag')) { |
| etag = _json['etag'] as core.String; |
| } |
| if (_json.containsKey('version')) { |
| version = _json['version'] as core.int; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (auditConfigs != null) { |
| _json['auditConfigs'] = |
| auditConfigs.map((value) => value.toJson()).toList(); |
| } |
| if (bindings != null) { |
| _json['bindings'] = bindings.map((value) => value.toJson()).toList(); |
| } |
| if (etag != null) { |
| _json['etag'] = etag; |
| } |
| if (version != null) { |
| _json['version'] = version; |
| } |
| return _json; |
| } |
| } |
| |
| /// A Pub/Sub destination. |
| class PubsubDestination { |
| /// The name of the Pub/Sub topic to publish to. |
| /// |
| /// Example: `projects/PROJECT_ID/topics/TOPIC_ID`. |
| core.String topic; |
| |
| PubsubDestination(); |
| |
| PubsubDestination.fromJson(core.Map _json) { |
| if (_json.containsKey('topic')) { |
| topic = _json['topic'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (topic != null) { |
| _json['topic'] = topic; |
| } |
| return _json; |
| } |
| } |
| |
| /// A representation of a Google Cloud resource. |
| class Resource { |
| /// The content of the resource, in which some sensitive fields are removed |
| /// and may not be present. |
| /// |
| /// The values for Object must be JSON objects. It can consist of `num`, |
| /// `String`, `bool` and `null` as well as `Map` and `List` values. |
| core.Map<core.String, core.Object> data; |
| |
| /// The URL of the discovery document containing the resource's JSON schema. |
| /// |
| /// Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` |
| /// This value is unspecified for resources that do not have an API based on a |
| /// discovery document, such as Cloud Bigtable. |
| core.String discoveryDocumentUri; |
| |
| /// The JSON schema name listed in the discovery document. |
| /// |
| /// Example: `Project` This value is unspecified for resources that do not |
| /// have an API based on a discovery document, such as Cloud Bigtable. |
| core.String discoveryName; |
| |
| /// The location of the resource in Google Cloud, such as its zone and region. |
| /// |
| /// For more information, see https://cloud.google.com/about/locations/. |
| core.String location; |
| |
| /// The full name of the immediate parent of this resource. |
| /// |
| /// See |
| /// [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) |
| /// for more information. For Google Cloud assets, this value is the parent |
| /// resource defined in the |
| /// [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy). |
| /// Example: `//cloudresourcemanager.googleapis.com/projects/my_project_123` |
| /// For third-party assets, this field may be set differently. |
| core.String parent; |
| |
| /// The REST URL for accessing the resource. |
| /// |
| /// An HTTP `GET` request using this URL returns the resource itself. Example: |
| /// `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123` |
| /// This value is unspecified for resources without a REST API. |
| core.String resourceUrl; |
| |
| /// The API version. |
| /// |
| /// Example: `v1` |
| core.String version; |
| |
| Resource(); |
| |
| Resource.fromJson(core.Map _json) { |
| if (_json.containsKey('data')) { |
| data = (_json['data'] as core.Map).cast<core.String, core.Object>().map( |
| (key, item) => core.MapEntry( |
| key, |
| item as core.Object, |
| ), |
| ); |
| } |
| if (_json.containsKey('discoveryDocumentUri')) { |
| discoveryDocumentUri = _json['discoveryDocumentUri'] as core.String; |
| } |
| if (_json.containsKey('discoveryName')) { |
| discoveryName = _json['discoveryName'] as core.String; |
| } |
| if (_json.containsKey('location')) { |
| location = _json['location'] as core.String; |
| } |
| if (_json.containsKey('parent')) { |
| parent = _json['parent'] as core.String; |
| } |
| if (_json.containsKey('resourceUrl')) { |
| resourceUrl = _json['resourceUrl'] as core.String; |
| } |
| if (_json.containsKey('version')) { |
| version = _json['version'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (data != null) { |
| _json['data'] = data; |
| } |
| if (discoveryDocumentUri != null) { |
| _json['discoveryDocumentUri'] = discoveryDocumentUri; |
| } |
| if (discoveryName != null) { |
| _json['discoveryName'] = discoveryName; |
| } |
| if (location != null) { |
| _json['location'] = location; |
| } |
| if (parent != null) { |
| _json['parent'] = parent; |
| } |
| if (resourceUrl != null) { |
| _json['resourceUrl'] = resourceUrl; |
| } |
| if (version != null) { |
| _json['version'] = version; |
| } |
| return _json; |
| } |
| } |
| |
| /// A result of Resource Search, containing information of a cloud resource. |
| class ResourceSearchResult { |
| /// The additional searchable attributes of this resource. |
| /// |
| /// The attributes may vary from one resource type to another. Examples: |
| /// `projectId` for Project, `dnsName` for DNS ManagedZone. This field |
| /// contains a subset of the resource metadata fields that are returned by the |
| /// List or Get APIs provided by the corresponding GCP service (e.g., Compute |
| /// Engine). see |
| /// [API references and supported searchable attributes](https://cloud.google.com/asset-inventory/docs/supported-asset-types#searchable_asset_types) |
| /// for more information. You can search values of these fields through free |
| /// text search. However, you should not consume the field programically as |
| /// the field names and values may change as the GCP service updates to a new |
| /// incompatible API version. To search against the `additional_attributes`: * |
| /// use a free text query to match the attributes values. Example: to search |
| /// `additional_attributes = { dnsName: "foobar" }`, you can issue a query |
| /// `foobar`. |
| /// |
| /// Optional. |
| /// |
| /// The values for Object must be JSON objects. It can consist of `num`, |
| /// `String`, `bool` and `null` as well as `Map` and `List` values. |
| core.Map<core.String, core.Object> additionalAttributes; |
| |
| /// The type of this resource. |
| /// |
| /// Example: `compute.googleapis.com/Disk`. To search against the |
| /// `asset_type`: * specify the `asset_type` field in your search request. |
| /// |
| /// Required. |
| core.String assetType; |
| |
| /// The create timestamp of this resource, at which the resource was created. |
| /// |
| /// The granularity is in seconds. Timestamp.nanos will always be 0. This |
| /// field is available only when the resource's proto contains it. To search |
| /// against `create_time`: * use a field query (value in seconds). Example: |
| /// `createTime >= 1594294238` |
| /// |
| /// Optional. |
| core.String createTime; |
| |
| /// One or more paragraphs of text description of this resource. |
| /// |
| /// Maximum length could be up to 1M bytes. This field is available only when |
| /// the resource's proto contains it. To search against the `description`: * |
| /// use a field query. Example: `description:"important instance"` * use a |
| /// free text query. Example: `"important instance"` |
| /// |
| /// Optional. |
| core.String description; |
| |
| /// The display name of this resource. |
| /// |
| /// This field is available only when the resource's proto contains it. To |
| /// search against the `display_name`: * use a field query. Example: |
| /// `displayName:"My Instance"` * use a free text query. Example: `"My |
| /// Instance"` |
| /// |
| /// Optional. |
| core.String displayName; |
| |
| /// The folder(s) that this resource belongs to, in the form of |
| /// folders/{FOLDER_NUMBER}. |
| /// |
| /// This field is available when the resource belongs to one or more folders. |
| /// To search against `folders`: * use a field query. Example: `folders:(123 |
| /// OR 456)` * specify the `scope` field as this folder in your search |
| /// request. |
| /// |
| /// Optional. |
| core.List<core.String> folders; |
| |
| /// The Cloud KMS |
| /// [CryptoKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys?hl=en) |
| /// name or |
| /// [CryptoKeyVersion](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions?hl=en) |
| /// name. |
| /// |
| /// This field is available only when the resource's proto contains it. To |
| /// search against the `kms_key`: * use a field query. Example: `kmsKey:key` * |
| /// use a free text query. Example: `key` |
| /// |
| /// Optional. |
| core.String kmsKey; |
| |
| /// Labels associated with this resource. |
| /// |
| /// See |
| /// [Labelling and grouping GCP resources](https://cloud.google.com/blog/products/gcp/labelling-and-grouping-your-google-cloud-platform-resources) |
| /// for more information. This field is available only when the resource's |
| /// proto contains it. To search against the `labels`: * use a field query: - |
| /// query on any label's key or value. Example: `labels:prod` - query by a |
| /// given label. Example: `labels.env:prod` - query by a given label's |
| /// existence. Example: `labels.env:*` * use a free text query. Example: |
| /// `prod` |
| /// |
| /// Optional. |
| core.Map<core.String, core.String> labels; |
| |
| /// Location can be `global`, regional like `us-east1`, or zonal like |
| /// `us-west1-b`. |
| /// |
| /// This field is available only when the resource's proto contains it. To |
| /// search against the `location`: * use a field query. Example: |
| /// `location:us-west*` * use a free text query. Example: `us-west*` |
| /// |
| /// Optional. |
| core.String location; |
| |
| /// The full resource name of this resource. |
| /// |
| /// Example: |
| /// `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. |
| /// See |
| /// [Cloud Asset Inventory Resource Name Format](https://cloud.google.com/asset-inventory/docs/resource-name-format) |
| /// for more information. To search against the `name`: * use a field query. |
| /// Example: `name:instance1` * use a free text query. Example: `instance1` |
| /// |
| /// Required. |
| core.String name; |
| |
| /// Network tags associated with this resource. |
| /// |
| /// Like labels, network tags are a type of annotations used to group GCP |
| /// resources. See |
| /// [Labelling GCP resources](https://cloud.google.com/blog/products/gcp/labelling-and-grouping-your-google-cloud-platform-resources) |
| /// for more information. This field is available only when the resource's |
| /// proto contains it. To search against the `network_tags`: * use a field |
| /// query. Example: `networkTags:internal` * use a free text query. Example: |
| /// `internal` |
| /// |
| /// Optional. |
| core.List<core.String> networkTags; |
| |
| /// The organization that this resource belongs to, in the form of |
| /// organizations/{ORGANIZATION_NUMBER}. |
| /// |
| /// This field is available when the resource belongs to a organization. To |
| /// search against `organization`: * use a field query. Example: |
| /// `organization:123` * specify the `scope` field as this organization in |
| /// your search request. |
| /// |
| /// Optional. |
| core.String organization; |
| |
| /// The project that this resource belongs to, in the form of |
| /// projects/{PROJECT_NUMBER}. |
| /// |
| /// This field is available when the resource belongs to a project. To search |
| /// against `project`: * use a field query. Example: `project:12345` * specify |
| /// the `scope` field as this project in your search request. |
| /// |
| /// Optional. |
| core.String project; |
| |
| /// The state of this resource. |
| /// |
| /// Different resources types have different state definitions that are mapped |
| /// from various fields of different resource types. This field is available |
| /// only when the resource's proto contains it. Example: If the resource is an |
| /// instance provided by Compute Engine, its state will include PROVISIONING, |
| /// STAGING, RUNNING, STOPPING, SUSPENDING, SUSPENDED, REPAIRING, and |
| /// TERMINATED. See `status` definition in |
| /// [API Reference](https://cloud.google.com/compute/docs/reference/rest/v1/instances). |
| /// If the resource is a project provided by Cloud Resource Manager, its state |
| /// will include LIFECYCLE_STATE_UNSPECIFIED, ACTIVE, DELETE_REQUESTED and |
| /// DELETE_IN_PROGRESS. See `lifecycleState` definition in |
| /// [API Reference](https://cloud.google.com/resource-manager/reference/rest/v1/projects). |
| /// To search against the `state`: * use a field query. Example: |
| /// `state:RUNNING` * use a free text query. Example: `RUNNING` |
| /// |
| /// Optional. |
| core.String state; |
| |
| /// The last update timestamp of this resource, at which the resource was last |
| /// modified or deleted. |
| /// |
| /// The granularity is in seconds. Timestamp.nanos will always be 0. This |
| /// field is available only when the resource's proto contains it. To search |
| /// against `update_time`: * use a field query (value in seconds). Example: |
| /// `updateTime < 1594294238` |
| /// |
| /// Optional. |
| core.String updateTime; |
| |
| ResourceSearchResult(); |
| |
| ResourceSearchResult.fromJson(core.Map _json) { |
| if (_json.containsKey('additionalAttributes')) { |
| additionalAttributes = (_json['additionalAttributes'] as core.Map) |
| .cast<core.String, core.Object>() |
| .map( |
| (key, item) => core.MapEntry( |
| key, |
| item as core.Object, |
| ), |
| ); |
| } |
| if (_json.containsKey('assetType')) { |
| assetType = _json['assetType'] as core.String; |
| } |
| if (_json.containsKey('createTime')) { |
| createTime = _json['createTime'] as core.String; |
| } |
| if (_json.containsKey('description')) { |
| description = _json['description'] as core.String; |
| } |
| if (_json.containsKey('displayName')) { |
| displayName = _json['displayName'] as core.String; |
| } |
| if (_json.containsKey('folders')) { |
| folders = (_json['folders'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('kmsKey')) { |
| kmsKey = _json['kmsKey'] as core.String; |
| } |
| if (_json.containsKey('labels')) { |
| labels = |
| (_json['labels'] as core.Map).cast<core.String, core.String>().map( |
| (key, item) => core.MapEntry( |
| key, |
| item as core.String, |
| ), |
| ); |
| } |
| if (_json.containsKey('location')) { |
| location = _json['location'] as core.String; |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| if (_json.containsKey('networkTags')) { |
| networkTags = (_json['networkTags'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('organization')) { |
| organization = _json['organization'] as core.String; |
| } |
| if (_json.containsKey('project')) { |
| project = _json['project'] as core.String; |
| } |
| if (_json.containsKey('state')) { |
| state = _json['state'] as core.String; |
| } |
| if (_json.containsKey('updateTime')) { |
| updateTime = _json['updateTime'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (additionalAttributes != null) { |
| _json['additionalAttributes'] = additionalAttributes; |
| } |
| if (assetType != null) { |
| _json['assetType'] = assetType; |
| } |
| if (createTime != null) { |
| _json['createTime'] = createTime; |
| } |
| if (description != null) { |
| _json['description'] = description; |
| } |
| if (displayName != null) { |
| _json['displayName'] = displayName; |
| } |
| if (folders != null) { |
| _json['folders'] = folders; |
| } |
| if (kmsKey != null) { |
| _json['kmsKey'] = kmsKey; |
| } |
| if (labels != null) { |
| _json['labels'] = labels; |
| } |
| if (location != null) { |
| _json['location'] = location; |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| if (networkTags != null) { |
| _json['networkTags'] = networkTags; |
| } |
| if (organization != null) { |
| _json['organization'] = organization; |
| } |
| if (project != null) { |
| _json['project'] = project; |
| } |
| if (state != null) { |
| _json['state'] = state; |
| } |
| if (updateTime != null) { |
| _json['updateTime'] = updateTime; |
| } |
| return _json; |
| } |
| } |
| |
| /// Specifies the resource to analyze for access policies, which may be set |
| /// directly on the resource, or on ancestors such as organizations, folders or |
| /// projects. |
| class ResourceSelector { |
| /// The |
| /// [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) |
| /// of a resource of |
| /// [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types). |
| /// |
| /// Required. |
| core.String fullResourceName; |
| |
| ResourceSelector(); |
| |
| ResourceSelector.fromJson(core.Map _json) { |
| if (_json.containsKey('fullResourceName')) { |
| fullResourceName = _json['fullResourceName'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (fullResourceName != null) { |
| _json['fullResourceName'] = fullResourceName; |
| } |
| return _json; |
| } |
| } |
| |
| /// Search all IAM policies response. |
| class SearchAllIamPoliciesResponse { |
| /// Set if there are more results than those appearing in this response; to |
| /// get the next set of results, call this method again, using this value as |
| /// the `page_token`. |
| core.String nextPageToken; |
| |
| /// A list of IamPolicy that match the search query. |
| /// |
| /// Related information such as the associated resource is returned along with |
| /// the policy. |
| core.List<IamPolicySearchResult> results; |
| |
| SearchAllIamPoliciesResponse(); |
| |
| SearchAllIamPoliciesResponse.fromJson(core.Map _json) { |
| if (_json.containsKey('nextPageToken')) { |
| nextPageToken = _json['nextPageToken'] as core.String; |
| } |
| if (_json.containsKey('results')) { |
| results = (_json['results'] as core.List) |
| .map<IamPolicySearchResult>((value) => IamPolicySearchResult.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (nextPageToken != null) { |
| _json['nextPageToken'] = nextPageToken; |
| } |
| if (results != null) { |
| _json['results'] = results.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Search all resources response. |
| class SearchAllResourcesResponse { |
| /// If there are more results than those appearing in this response, then |
| /// `next_page_token` is included. |
| /// |
| /// To get the next set of results, call this method again using the value of |
| /// `next_page_token` as `page_token`. |
| core.String nextPageToken; |
| |
| /// A list of Resources that match the search query. |
| /// |
| /// It contains the resource standard metadata information. |
| core.List<ResourceSearchResult> results; |
| |
| SearchAllResourcesResponse(); |
| |
| SearchAllResourcesResponse.fromJson(core.Map _json) { |
| if (_json.containsKey('nextPageToken')) { |
| nextPageToken = _json['nextPageToken'] as core.String; |
| } |
| if (_json.containsKey('results')) { |
| results = (_json['results'] as core.List) |
| .map<ResourceSearchResult>((value) => ResourceSearchResult.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (nextPageToken != null) { |
| _json['nextPageToken'] = nextPageToken; |
| } |
| if (results != null) { |
| _json['results'] = results.map((value) => value.toJson()).toList(); |
| } |
| return _json; |
| } |
| } |
| |
| /// Software package information of the operating system. |
| class SoftwarePackage { |
| /// Details of an APT package. |
| /// |
| /// For details about the apt package manager, see |
| /// https://wiki.debian.org/Apt. |
| VersionedPackage aptPackage; |
| |
| /// Details of a COS package. |
| VersionedPackage cosPackage; |
| |
| /// Details of a Googet package. |
| /// |
| /// For details about the googet package manager, see |
| /// https://github.com/google/googet. |
| VersionedPackage googetPackage; |
| |
| /// Details of a Windows Quick Fix engineering package. |
| /// |
| /// See |
| /// https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-quickfixengineering |
| /// for info in Windows Quick Fix Engineering. |
| WindowsQuickFixEngineeringPackage qfePackage; |
| |
| /// Details of a Windows Update package. |
| /// |
| /// See https://docs.microsoft.com/en-us/windows/win32/api/_wua/ for |
| /// information about Windows Update. |
| WindowsUpdatePackage wuaPackage; |
| |
| /// Yum package info. |
| /// |
| /// For details about the yum package manager, see |
| /// https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/ch-yum. |
| VersionedPackage yumPackage; |
| |
| /// Details of a Zypper package. |
| /// |
| /// For details about the Zypper package manager, see |
| /// https://en.opensuse.org/SDB:Zypper_manual. |
| VersionedPackage zypperPackage; |
| |
| /// Details of a Zypper patch. |
| /// |
| /// For details about the Zypper package manager, see |
| /// https://en.opensuse.org/SDB:Zypper_manual. |
| ZypperPatch zypperPatch; |
| |
| SoftwarePackage(); |
| |
| SoftwarePackage.fromJson(core.Map _json) { |
| if (_json.containsKey('aptPackage')) { |
| aptPackage = VersionedPackage.fromJson( |
| _json['aptPackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('cosPackage')) { |
| cosPackage = VersionedPackage.fromJson( |
| _json['cosPackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('googetPackage')) { |
| googetPackage = VersionedPackage.fromJson( |
| _json['googetPackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('qfePackage')) { |
| qfePackage = WindowsQuickFixEngineeringPackage.fromJson( |
| _json['qfePackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('wuaPackage')) { |
| wuaPackage = WindowsUpdatePackage.fromJson( |
| _json['wuaPackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('yumPackage')) { |
| yumPackage = VersionedPackage.fromJson( |
| _json['yumPackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('zypperPackage')) { |
| zypperPackage = VersionedPackage.fromJson( |
| _json['zypperPackage'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('zypperPatch')) { |
| zypperPatch = ZypperPatch.fromJson( |
| _json['zypperPatch'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (aptPackage != null) { |
| _json['aptPackage'] = aptPackage.toJson(); |
| } |
| if (cosPackage != null) { |
| _json['cosPackage'] = cosPackage.toJson(); |
| } |
| if (googetPackage != null) { |
| _json['googetPackage'] = googetPackage.toJson(); |
| } |
| if (qfePackage != null) { |
| _json['qfePackage'] = qfePackage.toJson(); |
| } |
| if (wuaPackage != null) { |
| _json['wuaPackage'] = wuaPackage.toJson(); |
| } |
| if (yumPackage != null) { |
| _json['yumPackage'] = yumPackage.toJson(); |
| } |
| if (zypperPackage != null) { |
| _json['zypperPackage'] = zypperPackage.toJson(); |
| } |
| if (zypperPatch != null) { |
| _json['zypperPatch'] = zypperPatch.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// The `Status` type defines a logical error model that is suitable for |
| /// different programming environments, including REST APIs and RPC APIs. |
| /// |
| /// It is used by [gRPC](https://github.com/grpc). Each `Status` message |
| /// contains three pieces of data: error code, error message, and error details. |
| /// You can find out more about this error model and how to work with it in the |
| /// [API Design Guide](https://cloud.google.com/apis/design/errors). |
| class Status { |
| /// The status code, which should be an enum value of google.rpc.Code. |
| core.int code; |
| |
| /// A list of messages that carry the error details. |
| /// |
| /// There is a common set of message types for APIs to use. |
| /// |
| /// The values for Object must be JSON objects. It can consist of `num`, |
| /// `String`, `bool` and `null` as well as `Map` and `List` values. |
| core.List<core.Map<core.String, core.Object>> details; |
| |
| /// A developer-facing error message, which should be in English. |
| /// |
| /// Any user-facing error message should be localized and sent in the |
| /// google.rpc.Status.details field, or localized by the client. |
| core.String message; |
| |
| Status(); |
| |
| Status.fromJson(core.Map _json) { |
| if (_json.containsKey('code')) { |
| code = _json['code'] as core.int; |
| } |
| if (_json.containsKey('details')) { |
| details = (_json['details'] as core.List) |
| .map<core.Map<core.String, core.Object>>((value) => |
| (value as core.Map).cast<core.String, core.Object>().map( |
| (key, item) => core.MapEntry( |
| key, |
| item as core.Object, |
| ), |
| )) |
| .toList(); |
| } |
| if (_json.containsKey('message')) { |
| message = _json['message'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (code != null) { |
| _json['code'] = code; |
| } |
| if (details != null) { |
| _json['details'] = details; |
| } |
| if (message != null) { |
| _json['message'] = message; |
| } |
| return _json; |
| } |
| } |
| |
| /// An asset in Google Cloud and its temporal metadata, including the time |
| /// window when it was observed and its status during that window. |
| class TemporalAsset { |
| /// An asset in Google Cloud. |
| Asset asset; |
| |
| /// Whether the asset has been deleted or not. |
| core.bool deleted; |
| |
| /// Prior copy of the asset. |
| /// |
| /// Populated if prior_asset_state is PRESENT. Currently this is only set for |
| /// responses in Real-Time Feed. |
| Asset priorAsset; |
| |
| /// State of prior_asset. |
| /// Possible string values are: |
| /// - "PRIOR_ASSET_STATE_UNSPECIFIED" : prior_asset is not applicable for the |
| /// current asset. |
| /// - "PRESENT" : prior_asset is populated correctly. |
| /// - "INVALID" : Failed to set prior_asset. |
| /// - "DOES_NOT_EXIST" : Current asset is the first known state. |
| /// - "DELETED" : prior_asset is a deletion. |
| core.String priorAssetState; |
| |
| /// The time window when the asset data and state was observed. |
| TimeWindow window; |
| |
| TemporalAsset(); |
| |
| TemporalAsset.fromJson(core.Map _json) { |
| if (_json.containsKey('asset')) { |
| asset = |
| Asset.fromJson(_json['asset'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('deleted')) { |
| deleted = _json['deleted'] as core.bool; |
| } |
| if (_json.containsKey('priorAsset')) { |
| priorAsset = Asset.fromJson( |
| _json['priorAsset'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('priorAssetState')) { |
| priorAssetState = _json['priorAssetState'] as core.String; |
| } |
| if (_json.containsKey('window')) { |
| window = TimeWindow.fromJson( |
| _json['window'] as core.Map<core.String, core.dynamic>); |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (asset != null) { |
| _json['asset'] = asset.toJson(); |
| } |
| if (deleted != null) { |
| _json['deleted'] = deleted; |
| } |
| if (priorAsset != null) { |
| _json['priorAsset'] = priorAsset.toJson(); |
| } |
| if (priorAssetState != null) { |
| _json['priorAssetState'] = priorAssetState; |
| } |
| if (window != null) { |
| _json['window'] = window.toJson(); |
| } |
| return _json; |
| } |
| } |
| |
| /// A time window specified by its `start_time` and `end_time`. |
| class TimeWindow { |
| /// End time of the time window (inclusive). |
| /// |
| /// If not specified, the current timestamp is used instead. |
| core.String endTime; |
| |
| /// Start time of the time window (exclusive). |
| core.String startTime; |
| |
| TimeWindow(); |
| |
| TimeWindow.fromJson(core.Map _json) { |
| if (_json.containsKey('endTime')) { |
| endTime = _json['endTime'] as core.String; |
| } |
| if (_json.containsKey('startTime')) { |
| startTime = _json['startTime'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (endTime != null) { |
| _json['endTime'] = endTime; |
| } |
| if (startTime != null) { |
| _json['startTime'] = startTime; |
| } |
| return _json; |
| } |
| } |
| |
| /// Update asset feed request. |
| class UpdateFeedRequest { |
| /// The new values of feed details. |
| /// |
| /// It must match an existing feed and the field `name` must be in the format |
| /// of: projects/project_number/feeds/feed_id or |
| /// folders/folder_number/feeds/feed_id or |
| /// organizations/organization_number/feeds/feed_id. |
| /// |
| /// Required. |
| Feed feed; |
| |
| /// Only updates the `feed` fields indicated by this mask. |
| /// |
| /// The field mask must not be empty, and it must not contain fields that are |
| /// immutable or only set by the server. |
| /// |
| /// Required. |
| core.String updateMask; |
| |
| UpdateFeedRequest(); |
| |
| UpdateFeedRequest.fromJson(core.Map _json) { |
| if (_json.containsKey('feed')) { |
| feed = |
| Feed.fromJson(_json['feed'] as core.Map<core.String, core.dynamic>); |
| } |
| if (_json.containsKey('updateMask')) { |
| updateMask = _json['updateMask'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (feed != null) { |
| _json['feed'] = feed.toJson(); |
| } |
| if (updateMask != null) { |
| _json['updateMask'] = updateMask; |
| } |
| return _json; |
| } |
| } |
| |
| /// Information related to the a standard versioned package. |
| /// |
| /// This includes package info for APT, Yum, Zypper, and Googet package |
| /// managers. |
| class VersionedPackage { |
| /// The system architecture this package is intended for. |
| core.String architecture; |
| |
| /// The name of the package. |
| core.String packageName; |
| |
| /// The version of the package. |
| core.String version; |
| |
| VersionedPackage(); |
| |
| VersionedPackage.fromJson(core.Map _json) { |
| if (_json.containsKey('architecture')) { |
| architecture = _json['architecture'] as core.String; |
| } |
| if (_json.containsKey('packageName')) { |
| packageName = _json['packageName'] as core.String; |
| } |
| if (_json.containsKey('version')) { |
| version = _json['version'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (architecture != null) { |
| _json['architecture'] = architecture; |
| } |
| if (packageName != null) { |
| _json['packageName'] = packageName; |
| } |
| if (version != null) { |
| _json['version'] = version; |
| } |
| return _json; |
| } |
| } |
| |
| /// Information related to a Quick Fix Engineering package. |
| /// |
| /// Fields are taken from Windows QuickFixEngineering Interface and match the |
| /// source names: |
| /// https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-quickfixengineering |
| class WindowsQuickFixEngineeringPackage { |
| /// A short textual description of the QFE update. |
| core.String caption; |
| |
| /// A textual description of the QFE update. |
| core.String description; |
| |
| /// Unique identifier associated with a particular QFE update. |
| core.String hotFixId; |
| |
| /// Date that the QFE update was installed. |
| /// |
| /// Mapped from installed_on field. |
| core.String installTime; |
| |
| WindowsQuickFixEngineeringPackage(); |
| |
| WindowsQuickFixEngineeringPackage.fromJson(core.Map _json) { |
| if (_json.containsKey('caption')) { |
| caption = _json['caption'] as core.String; |
| } |
| if (_json.containsKey('description')) { |
| description = _json['description'] as core.String; |
| } |
| if (_json.containsKey('hotFixId')) { |
| hotFixId = _json['hotFixId'] as core.String; |
| } |
| if (_json.containsKey('installTime')) { |
| installTime = _json['installTime'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (caption != null) { |
| _json['caption'] = caption; |
| } |
| if (description != null) { |
| _json['description'] = description; |
| } |
| if (hotFixId != null) { |
| _json['hotFixId'] = hotFixId; |
| } |
| if (installTime != null) { |
| _json['installTime'] = installTime; |
| } |
| return _json; |
| } |
| } |
| |
| /// Categories specified by the Windows Update. |
| class WindowsUpdateCategory { |
| /// The identifier of the windows update category. |
| core.String id; |
| |
| /// The name of the windows update category. |
| core.String name; |
| |
| WindowsUpdateCategory(); |
| |
| WindowsUpdateCategory.fromJson(core.Map _json) { |
| if (_json.containsKey('id')) { |
| id = _json['id'] as core.String; |
| } |
| if (_json.containsKey('name')) { |
| name = _json['name'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (id != null) { |
| _json['id'] = id; |
| } |
| if (name != null) { |
| _json['name'] = name; |
| } |
| return _json; |
| } |
| } |
| |
| /// Details related to a Windows Update package. |
| /// |
| /// Field data and names are taken from Windows Update API IUpdate Interface: |
| /// https://docs.microsoft.com/en-us/windows/win32/api/_wua/ Descriptive fields |
| /// like title, and description are localized based on the locale of the VM |
| /// being updated. |
| class WindowsUpdatePackage { |
| /// The categories that are associated with this update package. |
| core.List<WindowsUpdateCategory> categories; |
| |
| /// The localized description of the update package. |
| core.String description; |
| |
| /// A collection of Microsoft Knowledge Base article IDs that are associated |
| /// with the update package. |
| core.List<core.String> kbArticleIds; |
| |
| /// The last published date of the update, in (UTC) date and time. |
| core.String lastDeploymentChangeTime; |
| |
| /// A collection of URLs that provide more information about the update |
| /// package. |
| core.List<core.String> moreInfoUrls; |
| |
| /// The revision number of this update package. |
| core.int revisionNumber; |
| |
| /// A hyperlink to the language-specific support information for the update. |
| core.String supportUrl; |
| |
| /// The localized title of the update package. |
| core.String title; |
| |
| /// Gets the identifier of an update package. |
| /// |
| /// Stays the same across revisions. |
| core.String updateId; |
| |
| WindowsUpdatePackage(); |
| |
| WindowsUpdatePackage.fromJson(core.Map _json) { |
| if (_json.containsKey('categories')) { |
| categories = (_json['categories'] as core.List) |
| .map<WindowsUpdateCategory>((value) => WindowsUpdateCategory.fromJson( |
| value as core.Map<core.String, core.dynamic>)) |
| .toList(); |
| } |
| if (_json.containsKey('description')) { |
| description = _json['description'] as core.String; |
| } |
| if (_json.containsKey('kbArticleIds')) { |
| kbArticleIds = (_json['kbArticleIds'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('lastDeploymentChangeTime')) { |
| lastDeploymentChangeTime = |
| _json['lastDeploymentChangeTime'] as core.String; |
| } |
| if (_json.containsKey('moreInfoUrls')) { |
| moreInfoUrls = (_json['moreInfoUrls'] as core.List) |
| .map<core.String>((value) => value as core.String) |
| .toList(); |
| } |
| if (_json.containsKey('revisionNumber')) { |
| revisionNumber = _json['revisionNumber'] as core.int; |
| } |
| if (_json.containsKey('supportUrl')) { |
| supportUrl = _json['supportUrl'] as core.String; |
| } |
| if (_json.containsKey('title')) { |
| title = _json['title'] as core.String; |
| } |
| if (_json.containsKey('updateId')) { |
| updateId = _json['updateId'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (categories != null) { |
| _json['categories'] = categories.map((value) => value.toJson()).toList(); |
| } |
| if (description != null) { |
| _json['description'] = description; |
| } |
| if (kbArticleIds != null) { |
| _json['kbArticleIds'] = kbArticleIds; |
| } |
| if (lastDeploymentChangeTime != null) { |
| _json['lastDeploymentChangeTime'] = lastDeploymentChangeTime; |
| } |
| if (moreInfoUrls != null) { |
| _json['moreInfoUrls'] = moreInfoUrls; |
| } |
| if (revisionNumber != null) { |
| _json['revisionNumber'] = revisionNumber; |
| } |
| if (supportUrl != null) { |
| _json['supportUrl'] = supportUrl; |
| } |
| if (title != null) { |
| _json['title'] = title; |
| } |
| if (updateId != null) { |
| _json['updateId'] = updateId; |
| } |
| return _json; |
| } |
| } |
| |
| /// Details related to a Zypper Patch. |
| class ZypperPatch { |
| /// The category of the patch. |
| core.String category; |
| |
| /// The name of the patch. |
| core.String patchName; |
| |
| /// The severity specified for this patch |
| core.String severity; |
| |
| /// Any summary information provided about this patch. |
| core.String summary; |
| |
| ZypperPatch(); |
| |
| ZypperPatch.fromJson(core.Map _json) { |
| if (_json.containsKey('category')) { |
| category = _json['category'] as core.String; |
| } |
| if (_json.containsKey('patchName')) { |
| patchName = _json['patchName'] as core.String; |
| } |
| if (_json.containsKey('severity')) { |
| severity = _json['severity'] as core.String; |
| } |
| if (_json.containsKey('summary')) { |
| summary = _json['summary'] as core.String; |
| } |
| } |
| |
| core.Map<core.String, core.Object> toJson() { |
| final _json = <core.String, core.Object>{}; |
| if (category != null) { |
| _json['category'] = category; |
| } |
| if (patchName != null) { |
| _json['patchName'] = patchName; |
| } |
| if (severity != null) { |
| _json['severity'] = severity; |
| } |
| if (summary != null) { |
| _json['summary'] = summary; |
| } |
| return _json; |
| } |
| } |