Skip to content
This repository has been archived by the owner on Jul 13, 2023. It is now read-only.

feat: add SearchAllResources and SearchAllIamPolicies rpcs in asset service proto #332

Merged
merged 2 commits into from
May 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"fix": "gts fix",
"lint": "gts check",
"predocs-test": "npm run docs",
"prepare": "npm run compile",
"prepare": "npm run compile-protos && npm run compile",
"system-test": "c8 mocha build/system-test",
"test": "c8 mocha build/test",
"prelint": "cd samples; npm link ../; npm install",
Expand Down
212 changes: 193 additions & 19 deletions protos/google/cloud/asset/v1/asset_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,14 @@ option php_namespace = "Google\\Cloud\\Asset\\V1";
// Asset service definition.
service AssetService {
option (google.api.default_host) = "cloudasset.googleapis.com";
option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";

// Exports assets with time and resource types to a given Cloud Storage
// location. The output format is newline-delimited JSON.
// This API implements the [google.longrunning.Operation][google.longrunning.Operation] API allowing you
// to keep track of the export.
// This API implements the
// [google.longrunning.Operation][google.longrunning.Operation] API allowing
// you to keep track of the export.
rpc ExportAssets(ExportAssetsRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v1/{parent=*/*}:exportAssets"
Expand All @@ -61,7 +63,8 @@ service AssetService {
// attached IAM POLICY both exist. This can create gaps in the output history.
// If a specified asset does not exist, this API returns an INVALID_ARGUMENT
// error.
rpc BatchGetAssetsHistory(BatchGetAssetsHistoryRequest) returns (BatchGetAssetsHistoryResponse) {
rpc BatchGetAssetsHistory(BatchGetAssetsHistoryRequest)
returns (BatchGetAssetsHistoryResponse) {
option (google.api.http) = {
get: "/v1/{parent=*/*}:batchGetAssetsHistory"
};
Expand Down Expand Up @@ -109,6 +112,30 @@ service AssetService {
};
option (google.api.method_signature) = "name";
}

// Searches all the resources within the given accessible scope (e.g., a
// project, a folder or an organization). Callers should have
// cloud.assets.SearchAllResources permission upon the requested scope,
// otherwise the request will be rejected.
rpc SearchAllResources(SearchAllResourcesRequest)
returns (SearchAllResourcesResponse) {
option (google.api.http) = {
get: "/v1/{scope=*/*}:searchAllResources"
};
option (google.api.method_signature) = "scope,query,asset_types";
}

// Searches all the IAM policies within the given accessible scope (e.g., a
// project, a folder or an organization). Callers should have
// cloud.assets.SearchAllIamPolicies permission upon the requested scope,
// otherwise the request will be rejected.
rpc SearchAllIamPolicies(SearchAllIamPoliciesRequest)
returns (SearchAllIamPoliciesResponse) {
option (google.api.http) = {
get: "/v1/{scope=*/*}:searchAllIamPolicies"
};
option (google.api.method_signature) = "scope,query";
}
}

// Export asset request.
Expand Down Expand Up @@ -148,8 +175,10 @@ message ExportAssetsRequest {
}

// The export asset response. This message is returned by the
// [google.longrunning.Operations.GetOperation][google.longrunning.Operations.GetOperation] method in the returned
// [google.longrunning.Operation.response][google.longrunning.Operation.response] field.
// [google.longrunning.Operations.GetOperation][google.longrunning.Operations.GetOperation]
// method in the returned
// [google.longrunning.Operation.response][google.longrunning.Operation.response]
// field.
message ExportAssetsResponse {
// Time the snapshot was taken.
google.protobuf.Timestamp read_time = 1;
Expand Down Expand Up @@ -214,9 +243,8 @@ message CreateFeedRequest {
// be unique under a specific parent project/folder/organization.
string feed_id = 2 [(google.api.field_behavior) = REQUIRED];

// Required. The feed details. The field `name` must be empty and it will be generated
// in the format of:
// projects/project_number/feeds/feed_id
// Required. 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
Feed feed = 3 [(google.api.field_behavior) = REQUIRED];
Expand All @@ -230,9 +258,7 @@ message GetFeedRequest {
// organizations/organization_number/feeds/feed_id
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "cloudasset.googleapis.com/Feed"
}
(google.api.resource_reference) = { type: "cloudasset.googleapis.com/Feed" }
];
}

Expand All @@ -251,8 +277,8 @@ message ListFeedsResponse {

// Update asset feed request.
message UpdateFeedRequest {
// Required. The new values of feed details. It must match an existing feed and the
// field `name` must be in the format of:
// Required. 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.
Expand All @@ -261,7 +287,8 @@ message UpdateFeedRequest {
// Required. 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.
google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED];
google.protobuf.FieldMask update_mask = 2
[(google.api.field_behavior) = REQUIRED];
}

message DeleteFeedRequest {
Expand All @@ -271,9 +298,7 @@ message DeleteFeedRequest {
// organizations/organization_number/feeds/feed_id
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "cloudasset.googleapis.com/Feed"
}
(google.api.resource_reference) = { type: "cloudasset.googleapis.com/Feed" }
];
}

Expand Down Expand Up @@ -401,7 +426,156 @@ message Feed {

// Required. Feed output configuration defining where the asset updates are
// published to.
FeedOutputConfig feed_output_config = 5 [(google.api.field_behavior) = REQUIRED];
FeedOutputConfig feed_output_config = 5
[(google.api.field_behavior) = REQUIRED];
}

// Search all resources request.
message SearchAllResourcesRequest {
// Required. A scope can be a project, a folder or an organization. The search
// is limited to the resources within the `scope`.
//
// The allowed values are:
//
// * projects/{PROJECT_ID}
// * projects/{PROJECT_NUMBER}
// * folders/{FOLDER_NUMBER}
// * organizations/{ORGANIZATION_NUMBER}
string scope = 1 [(google.api.field_behavior) = REQUIRED];

// Optional. The query statement. An empty query can be specified to search
// all the resources of certain `asset_types` within the given `scope`.
//
// Examples:
//
// * `name : "Important"` to find Cloud resources whose name contains
// "Important" as a word.
// * `displayName : "Impor*"` to find Cloud resources whose display name
// contains "Impor" as a word prefix.
// * `description : "*por*"` to find Cloud resources whose description
// contains "por" as a substring.
// * `location : "us-west*"` to find Cloud resources whose location is
// prefixed with "us-west".
// * `labels : "prod"` to find Cloud resources whose labels contain "prod" as
// a key or value.
// * `labels.env : "prod"` to find Cloud resources which have a label "env"
// and its value is "prod".
// * `labels.env : *` to find Cloud resources which have a label "env".
// * `"Important"` to find Cloud resources which contain "Important" as a word
// in any of the searchable fields.
// * `"Impor*"` to find Cloud resources which contain "Impor" as a word prefix
// in any of the searchable fields.
// * `"*por*"` to find Cloud resources which contain "por" as a substring in
// any of the searchable fields.
// * `("Important" AND location : ("us-west1" OR "global"))` to find Cloud
// resources which contain "Important" as a word in any of the searchable
// fields and are also located in the "us-west1" region or the "global"
// location.
//
// See [how to construct a
// query](https://cloud.google.com/asset-inventory/docs/searching-resources#how_to_construct_a_query)
// for more details.
string query = 2 [(google.api.field_behavior) = OPTIONAL];

// 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).
repeated string asset_types = 3 [(google.api.field_behavior) = OPTIONAL];

// 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.
int32 page_size = 4 [(google.api.field_behavior) = OPTIONAL];

// 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.
string page_token = 5 [(google.api.field_behavior) = OPTIONAL];

// 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". See [supported resource metadata
// fields](https://cloud.google.com/asset-inventory/docs/searching-resources#query_on_resource_metadata_fields)
// for more details.
string order_by = 6 [(google.api.field_behavior) = OPTIONAL];
}

// Search all resources response.
message SearchAllResourcesResponse {
// A list of Resources that match the search query. It contains the resource
// standard metadata information.
repeated ResourceSearchResult results = 1;

// 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`.
string next_page_token = 2;
}

// Search all IAM policies request.
message SearchAllIamPoliciesRequest {
// Required. A scope can be a project, a folder or an organization. The search
// is limited to the IAM policies within the `scope`.
//
// The allowed values are:
//
// * projects/{PROJECT_ID}
// * projects/{PROJECT_NUMBER}
// * folders/{FOLDER_NUMBER}
// * organizations/{ORGANIZATION_NUMBER}
string scope = 1 [(google.api.field_behavior) = REQUIRED];

// Optional. The query statement. An empty query can be specified to search
// all the IAM policies within the given `scope`.
//
// Examples:
//
// * `policy : "amy@gmail.com"` to find Cloud IAM policy bindings that
// specify user "amy@gmail.com".
// * `policy : "roles/compute.admin"` to find Cloud IAM policy bindings that
// specify the Compute Admin role.
// * `policy.role.permissions : "storage.buckets.update"` to find Cloud IAM
// policy bindings that specify a role containing "storage.buckets.update"
// permission.
// * `resource : "organizations/123"` to find Cloud IAM policy bindings that
// are set on "organizations/123".
// * `(resource : ("organizations/123" OR "folders/1234") AND policy : "amy")`
// to find Cloud IAM policy bindings that are set on "organizations/123" or
// "folders/1234", and also specify user "amy".
//
// See [how to construct a
// query](https://cloud.google.com/asset-inventory/docs/searching-iam-policies#how_to_construct_a_query)
// for more details.
string query = 2 [(google.api.field_behavior) = OPTIONAL];

// 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.
int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL];

// 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.
string page_token = 4 [(google.api.field_behavior) = OPTIONAL];
}

// Search all IAM policies response.
message SearchAllIamPoliciesResponse {
// A list of IamPolicy that match the search query. Related information such
// as the associated resource is returned along with the policy.
repeated IamPolicySearchResult results = 1;

// 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`.
string next_page_token = 2;
}

// Asset content type.
Expand Down
Loading