diff --git a/README.md b/README.md
index 5fd6959..8a362cc 100644
--- a/README.md
+++ b/README.md
@@ -67,6 +67,7 @@ Positional Arguments:
gaia Get information on a Gaia ID.
drive Get information on a Drive file or folder.
geolocate Geolocate a BSSID.
+ spiderdal Find assets using Digital Assets Links.
Options:
-h, --help show this help message and exit
@@ -115,7 +116,7 @@ This project is under [AGPL Licence](https://choosealicense.com/licenses/agpl-3.
Thanks to these awesome people for supporting me !
-
+
\
You like my work ?\
diff --git a/ghunt/apis/accounts.py b/ghunt/apis/accounts.py
index 4aebff4..424ba0e 100644
--- a/ghunt/apis/accounts.py
+++ b/ghunt/apis/accounts.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
import httpx
@@ -36,19 +36,23 @@ class Accounts(GAPI):
self._load_api(creds, headers)
async def OAuthLogin(self, as_client: httpx.AsyncClient) -> str:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ key_origin = None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/OAuthLogin"
- data_type = None # json, data or None
-
params = {
"source": "ChromiumBrowser",
"issueuberauth": 1
}
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params)
# Parsing
uber_auth = req.text
diff --git a/ghunt/apis/calendar.py b/ghunt/apis/calendar.py
index 4fbbff3..7334bb8 100644
--- a/ghunt/apis/calendar.py
+++ b/ghunt/apis/calendar.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.parsers.calendar import Calendar, CalendarEvents
import httpx
@@ -26,20 +26,21 @@ class CalendarHttp(GAPI):
self.hostname = "clients6.google.com"
self.scheme = "https"
- self.authentication_mode = "sapisidhash" # sapisidhash, cookies_only, oauth or None
- self.require_key = "calendar" # key name, or None
-
self._load_api(creds, headers)
async def get_calendar(self, as_client: httpx.AsyncClient, calendar_id: str) -> Tuple[bool, Calendar]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "sapisidhash", # sapisidhash, cookies_only, oauth or None
+ require_key = "calendar", # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/calendar/v3/calendars/{calendar_id}"
- data_type = None # json, data or None
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, None, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url)
# Parsing
data = json.loads(req.text)
@@ -54,11 +55,17 @@ class CalendarHttp(GAPI):
async def get_events(self, as_client: httpx.AsyncClient, calendar_id: str, params_template="next_events",
time_min=datetime.today().replace(tzinfo=timezone.utc).isoformat(), max_results=250, page_token="") -> Tuple[bool, CalendarEvents]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "sapisidhash", # sapisidhash, cookies_only, oauth or None
+ require_key = "calendar", # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/calendar/v3/calendars/{calendar_id}/events"
- data_type = None # json, data or None
+
params_templates = {
"next_events": {
"calendarId": calendar_id,
@@ -82,14 +89,13 @@ class CalendarHttp(GAPI):
}
if not params_templates.get(params_template):
- raise GHuntParamsTemplateError(f"The asked template {params_template} for the endpoint {endpoint_name} wasn't recognized by GHunt.")
+ raise GHuntParamsTemplateError(f"The asked template {params_template} for the endpoint {endpoint.name} wasn't recognized by GHunt.")
params = params_templates[params_template]
if page_token:
params["pageToken"] = page_token
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
diff --git a/ghunt/apis/clientauthconfig.py b/ghunt/apis/clientauthconfig.py
index 4be064a..97d673b 100644
--- a/ghunt/apis/clientauthconfig.py
+++ b/ghunt/apis/clientauthconfig.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.parsers.clientauthconfig import CacBrand
import httpx
@@ -25,25 +25,26 @@ class ClientAuthConfigHttp(GAPI):
self.hostname = "clientauthconfig.googleapis.com"
self.scheme = "https"
- self.authentication_mode = None # sapisidhash, cookies_only, oauth or None
- self.require_key = "pantheon" # key name, or None
-
self._load_api(creds, headers)
async def get_brand(self, as_client: httpx.AsyncClient, project_number: int) -> Tuple[bool, CacBrand]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = None, # sapisidhash, cookies_only, oauth or None
+ require_key = "pantheon", # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/v1/brands/lookupkey/brand/{project_number}"
- data_type = None # json, data or None
params = {
"readMask": "*",
"$outputDefaults": True
}
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
diff --git a/ghunt/apis/digitalassetslinks.py b/ghunt/apis/digitalassetslinks.py
new file mode 100644
index 0000000..7164717
--- /dev/null
+++ b/ghunt/apis/digitalassetslinks.py
@@ -0,0 +1,71 @@
+from ghunt.objects.base import GHuntCreds
+from ghunt.errors import *
+import ghunt.globals as gb
+from ghunt.objects.apis import GAPI, EndpointConfig
+from ghunt.parsers.digitalassetslinks import DalStatements
+
+import httpx
+
+from typing import *
+import inspect
+import json
+
+
+class DigitalAssetsLinksHttp(GAPI):
+ def __init__(self, creds: GHuntCreds, headers: Dict[str, str] = {}):
+ super().__init__()
+
+ if not headers:
+ headers = gb.config.headers
+
+ base_headers = {}
+
+ headers = {**headers, **base_headers}
+
+ self.hostname = "digitalassetlinks.googleapis.com"
+ self.scheme = "https"
+
+ self._load_api(creds, headers)
+
+ async def list_statements(self, as_client: httpx.AsyncClient, website: str="",
+ android_package_name: str="", android_cert_fingerprint: str="") -> Tuple[bool, DalStatements]:
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = None, # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
+
+ base_url = "/v1/statements:list"
+
+ # Inputs checks
+ if website and (android_package_name or android_cert_fingerprint):
+ raise GHuntParamsInputError(f"[DigitalAssetsLinks API list statements] website and {android_package_name if android_package_name else android_cert_fingerprint} can't be both put at the same time.")
+ elif not website and not (android_package_name and android_cert_fingerprint):
+ raise GHuntParamsInputError("[DigitalAssetsLinks API list statements] Please , android_package_name and android_cert_ingerprint.")
+ elif not (website or android_package_name or android_cert_fingerprint):
+ raise GHuntParamsInputError("[DigitalAssetsLinks API list statements] Please choose at least one parameter between website, android_package_name and android_cert_ingerprint.")
+
+ params = {}
+ if website:
+ params["source.web.site"] = website
+ if android_package_name:
+ params["source.androidApp.packageName"] = android_package_name
+ if android_cert_fingerprint:
+ params["source.androidApp.certificate.sha256Fingerprint"] = android_cert_fingerprint
+
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
+
+ # Parsing
+ data = json.loads(req.text)
+
+ statements = DalStatements()
+ if "error" in data:
+ return False, statements
+
+ statements._scrape(data)
+
+ found = bool(statements.statements)
+ return found, statements
\ No newline at end of file
diff --git a/ghunt/apis/drive.py b/ghunt/apis/drive.py
index 18ffab4..4ae73c7 100644
--- a/ghunt/apis/drive.py
+++ b/ghunt/apis/drive.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.parsers.drive import DriveCommentList, DriveFile, DriveChildList
from ghunt.knowledge import drive as drive_knowledge
@@ -34,25 +34,26 @@ class DriveHttp(GAPI):
self.hostname = "www.googleapis.com"
self.scheme = "https"
- self.authentication_mode = "oauth" # sapisidhash, cookies_only, oauth or None
- self.require_key = None # key name, or None
-
self._load_api(creds, headers)
async def get_file(self, as_client: httpx.AsyncClient, file_id: str) -> Tuple[bool, DriveFile]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/drive/v2internal/files/{file_id}"
- data_type = None # json, data or None
params = {
"fields": ','.join(drive_knowledge.request_fields),
"supportsAllDrives": True
}
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
@@ -65,11 +66,16 @@ class DriveHttp(GAPI):
return True, drive_file
async def get_comments(self, as_client: httpx.AsyncClient, file_id: str, page_token: str="") -> Tuple[bool, str, DriveCommentList]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/drive/v2internal/files/{file_id}/comments"
- data_type = None # json, data or None
params = {
"supportsAllDrives": True,
@@ -79,8 +85,7 @@ class DriveHttp(GAPI):
if page_token:
params["pageToken"] = page_token
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
@@ -95,11 +100,16 @@ class DriveHttp(GAPI):
return True, next_page_token, drive_comments
async def get_childs(self, as_client: httpx.AsyncClient, file_id: str, page_token: str="") -> Tuple[bool, str, DriveChildList]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/drive/v2internal/files/{file_id}/children"
- data_type = None # json, data or None
params = {
"supportsAllDrives": True,
@@ -109,8 +119,7 @@ class DriveHttp(GAPI):
if page_token:
params["pageToken"] = page_token
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
diff --git a/ghunt/apis/fireconsolepa.py b/ghunt/apis/fireconsolepa.py
new file mode 100644
index 0000000..b8d196c
--- /dev/null
+++ b/ghunt/apis/fireconsolepa.py
@@ -0,0 +1,57 @@
+from ghunt.objects.base import GHuntCreds
+from ghunt.errors import *
+import ghunt.globals as gb
+from ghunt.objects.apis import GAPI, EndpointConfig
+from ghunt.parsers.clientauthconfig import CacBrand
+
+import httpx
+
+from typing import *
+import inspect
+import json
+
+
+class FireconsolePaHttp(GAPI):
+ def __init__(self, creds: GHuntCreds, headers: Dict[str, str] = {}):
+ super().__init__()
+
+ if not headers:
+ headers = gb.config.headers
+
+ base_headers = {}
+
+ headers = {**headers, **base_headers}
+
+ self.hostname = "fireconsole-pa.clients6.google.com"
+ self.scheme = "https"
+
+ self._load_api(creds, headers)
+
+ async def is_project_valid(self, as_client: httpx.AsyncClient, project_identifier: str) -> Tuple[bool, CacBrand]:
+ """
+ Returns if the given project identifier is valid.
+ The project identifier can be a project ID or a project number.
+ """
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "POST",
+ data_type = "json", # json, data or None
+ authentication_mode = "sapisidhash", # sapisidhash, cookies_only, oauth or None
+ require_key = "firebase_console", # key name, or None
+ )
+ self._load_endpoint(endpoint)
+
+ base_url = "/v1/analytics:checkAccess"
+
+ params = {
+ "alt": "json"
+ }
+
+ post_data = {
+ "entityKey": {},
+ "firebaseProjectId": project_identifier
+ }
+
+ req = await self._query(endpoint.name, as_client, base_url, params=params, data=post_data)
+
+ return req.status_code != 404
\ No newline at end of file
diff --git a/ghunt/apis/geolocation.py b/ghunt/apis/geolocation.py
index aae58a0..7e5d6b7 100644
--- a/ghunt/apis/geolocation.py
+++ b/ghunt/apis/geolocation.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.parsers.geolocate import GeolocationResponse
import httpx
@@ -31,11 +31,16 @@ class GeolocationHttp(GAPI):
self._load_api(creds, headers)
async def geolocate(self, as_client: httpx.AsyncClient, bssid: str, body: dict) -> Tuple[bool, GeolocationResponse]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "POST",
+ data_type = "json", # json, data or None
+ authentication_mode = None, # sapisidhash, cookies_only, oauth or None
+ require_key = "geolocation", # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "POST"
base_url = f"/geolocation/v1/geolocate"
- data_type = "json" # json, data or None
if bssid:
payload = {
@@ -52,8 +57,7 @@ class GeolocationHttp(GAPI):
else:
payload = body
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, None, payload, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, data=payload)
# Parsing
data = json.loads(req.text)
diff --git a/ghunt/apis/identitytoolkit.py b/ghunt/apis/identitytoolkit.py
new file mode 100644
index 0000000..9e7549f
--- /dev/null
+++ b/ghunt/apis/identitytoolkit.py
@@ -0,0 +1,57 @@
+from ghunt.objects.base import GHuntCreds
+from ghunt.errors import *
+import ghunt.globals as gb
+from ghunt.objects.apis import GAPI, EndpointConfig
+from ghunt.parsers.identitytoolkit import ITKProjectConfig
+
+import httpx
+
+from typing import *
+import inspect
+import json
+
+
+class IdentityToolkitHttp(GAPI):
+ def __init__(self, creds: GHuntCreds, headers: Dict[str, str] = {}):
+ super().__init__()
+
+ if not headers:
+ headers = gb.config.headers
+
+ base_headers = {}
+
+ headers = {**headers, **base_headers}
+
+ self.hostname = "www.googleapis.com"
+ self.scheme = "https"
+
+ self._load_api(creds, headers)
+
+ async def get_project_config(self, as_client: httpx.AsyncClient, api_key: str) -> Tuple[bool, ITKProjectConfig]:
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = None, # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
+
+ base_url = "/identitytoolkit/v3/relyingparty/getProjectConfig"
+
+ params = {
+ "key": api_key
+ }
+
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
+
+ # Parsing
+ data = json.loads(req.text)
+
+ project_config = ITKProjectConfig()
+ if "error" in data:
+ return False, project_config
+
+ project_config._scrape(data)
+
+ return True, project_config
\ No newline at end of file
diff --git a/ghunt/apis/mobilesdk.py b/ghunt/apis/mobilesdk.py
new file mode 100644
index 0000000..09fcbf9
--- /dev/null
+++ b/ghunt/apis/mobilesdk.py
@@ -0,0 +1,100 @@
+from ghunt.objects.base import GHuntCreds
+from ghunt.errors import *
+import ghunt.globals as gb
+from ghunt.objects.apis import GAPI, EndpointConfig
+from ghunt.parsers.mobilesdk import MobileSDKDynamicConfig
+
+import httpx
+
+from typing import *
+import inspect
+import json
+
+
+class MobileSDKPaHttp(GAPI):
+ def __init__(self, creds: GHuntCreds, headers: Dict[str, str] = {}):
+ super().__init__()
+
+ if not headers:
+ headers = gb.config.headers
+
+ base_headers = {}
+
+ headers = {**headers, **base_headers}
+
+ self.hostname = "mobilesdk-pa.clients6.google.com"
+ self.scheme = "https"
+
+ self._load_api(creds, headers)
+
+ async def test_iam_permissions(self, as_client: httpx.AsyncClient, project_identifier: str, permissions: List[str]) -> Tuple[bool, List[str]]:
+ """
+ Returns the permissions you have against a project.
+ The project identifier can be a project ID or a project number.
+ """
+
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "POST",
+ data_type = "json", # json, data or None
+ authentication_mode = "sapisidhash", # sapisidhash, cookies_only, oauth or None
+ require_key = "firebase_console", # key name, or None
+ )
+ self._load_endpoint(endpoint)
+
+ base_url = f"/v1/projects/{project_identifier}:testIamPermissions"
+
+ post_data = {
+ "permissions": permissions
+ }
+
+ req = await self._query(endpoint.name, as_client, base_url, data=post_data)
+
+ # Parsing
+ data = json.loads(req.text)
+
+ if "error" in data:
+ return False, []
+
+ return True, data.get("permissions", [])
+
+ async def get_webapp_dynamic_config(self, as_client: httpx.AsyncClient, app_id: str) -> Tuple[bool, MobileSDKDynamicConfig]:
+ """
+ Returns the dynamic config of a web app.
+
+ :param app_id: The app id
+ """
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "sapisidhash", # sapisidhash, cookies_only, oauth or None,
+ key_origin="firebase_console", # key name, or None
+ # require_key = "firebase_console", # key name, or None
+ )
+ self._load_endpoint(endpoint)
+
+ # Android OAuth fields
+ self.api_name = "mobilesdk"
+ self.package_name = "com.android.chrome"
+ self.scopes = [
+ "https://www.googleapis.com/auth/cloud-platform",
+ "https://www.googleapis.com/auth/cloud-platform.read-only",
+ "https://www.googleapis.com/auth/firebase",
+ "https://www.googleapis.com/auth/firebase.readonly"
+ ]
+
+ base_url = f"/v1/config/webApps/{app_id}/dynamicConfig"
+
+ req = await self._query(endpoint.name, as_client, base_url)
+
+ # Parsing
+ data = json.loads(req.text)
+
+ dynamic_config = MobileSDKDynamicConfig()
+ if "error" in data:
+ return False, dynamic_config
+
+ dynamic_config._scrape(data)
+
+ return True, dynamic_config
\ No newline at end of file
diff --git a/ghunt/apis/peoplepa.py b/ghunt/apis/peoplepa.py
index acb5b00..17ef9dc 100644
--- a/ghunt/apis/peoplepa.py
+++ b/ghunt/apis/peoplepa.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.parsers.people import Person
import httpx
@@ -18,44 +18,54 @@ class PeoplePaHttp(GAPI):
if not headers:
headers = gb.config.headers
- base_headers = {}
+ base_headers = {
+ "Host": "people-pa.clients6.google.com",
+ }
headers = {**headers, **base_headers}
- self.hostname = "people-pa.clients6.google.com"
+ self.hostname = "googleapis.com"
self.scheme = "https"
- self.authentication_mode = "sapisidhash" # sapisidhash, cookies_only, oauth or None
- self.require_key = "photos" # key name, or None
-
self._load_api(creds, headers)
async def people_lookup(self, as_client: httpx.AsyncClient, email: str, params_template="just_gaia_id") -> Tuple[bool, Person]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "sapisidhash", # sapisidhash, cookies_only, oauth or None
+ require_key = "photos", # key name, or None
+ # key_origin="photos"
+ )
+
+ # Android OAuth fields
+ self.api_name = "people"
+ self.package_name = "com.google.android.gms"
+ self.scopes = [
+ "https://www.googleapis.com/auth/profile.agerange.read",
+ "https://www.googleapis.com/auth/profile.language.read",
+ "https://www.googleapis.com/auth/contacts",
+ "https://www.googleapis.com/auth/peopleapi.legacy.readwrite"
+
+ ]
+
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = "/v2/people/lookup"
- data_type = None # json, data or None
+
params_templates = {
"just_gaia_id": {
"id": email,
"type": "EMAIL",
- "match_type": "EXACT",
- "request_mask.include_field.paths": "person.metadata",
- "request_mask.include_container": [
- "PROFILE",
- "DOMAIN_PROFILE",
- ],
+ "matchType": "EXACT",
+ "requestMask.includeField.paths": "person.metadata"
},
"just_name": {
"id": email,
"type": "EMAIL",
- "match_type": "EXACT",
- "request_mask.include_field.paths": "person.name",
- "request_mask.include_container": [
- "PROFILE",
- "DOMAIN_PROFILE",
- ],
+ "matchType": "EXACT",
+ "requestMask.includeField.paths": "person.name",
"core_id_params.enable_private_names": True
},
"max_details": {
@@ -64,8 +74,7 @@ class PeoplePaHttp(GAPI):
"match_type": "EXACT",
"extension_set.extension_names": [
"DYNAMITE_ADDITIONAL_DATA",
- "DYNAMITE_ORGANIZATION_INFO",
- # "GPLUS_ADDITIONAL_DATA"
+ "DYNAMITE_ORGANIZATION_INFO"
],
"request_mask.include_field.paths": [
"person.metadata.best_display_name",
@@ -74,7 +83,7 @@ class PeoplePaHttp(GAPI):
"person.interaction_settings",
"person.legacy_fields",
"person.metadata",
- # "person.in_app_reachability",
+ "person.in_app_reachability",
"person.name",
"person.read_only_profile_info",
"person.sort_keys",
@@ -97,10 +106,10 @@ class PeoplePaHttp(GAPI):
}
if not params_templates.get(params_template):
- raise GHuntParamsTemplateError(f"The asked template {params_template} for the endpoint {endpoint_name} wasn't recognized by GHunt.")
+ raise GHuntParamsTemplateError(f"The asked template {params_template} for the endpoint {endpoint.name} wasn't recognized by GHunt.")
+ params = params_templates[params_template]
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params_templates[params_template], None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
@@ -114,27 +123,40 @@ class PeoplePaHttp(GAPI):
return True, person
async def people(self, as_client: httpx.AsyncClient, gaia_id: str, params_template="just_name") -> Tuple[bool, Person]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "sapisidhash", # sapisidhash, cookies_only, oauth or None
+ require_key = "photos", # key name, or None
+ # key_origin="photos"
+ )
+ self._load_endpoint(endpoint)
+
+ # Android OAuth fields
+ self.api_name = "people"
+ self.package_name = "com.google.android.gms"
+ self.scopes = [
+ "https://www.googleapis.com/auth/profile.agerange.read",
+ "https://www.googleapis.com/auth/profile.language.read",
+ "https://www.googleapis.com/auth/contacts",
+ "https://www.googleapis.com/auth/peopleapi.legacy.readwrite"
+
+ ]
- verb = "GET"
base_url = "/v2/people"
- data_type = None # json, data or None
+
params_templates = {
"just_name": {
"person_id": gaia_id,
- "request_mask.include_field.paths": "person.name",
- "request_mask.include_container": [
- "PROFILE",
- "DOMAIN_PROFILE",
- ],
+ "requestMask.includeField.paths": "person.name",
"core_id_params.enable_private_names": True
},
"max_details": {
"person_id": gaia_id,
"extension_set.extension_names": [
"DYNAMITE_ADDITIONAL_DATA",
- "DYNAMITE_ORGANIZATION_INFO",
- # "GPLUS_ADDITIONAL_DATA"
+ "DYNAMITE_ORGANIZATION_INFO"
],
"request_mask.include_field.paths": [
"person.metadata.best_display_name",
@@ -143,7 +165,7 @@ class PeoplePaHttp(GAPI):
"person.interaction_settings",
"person.legacy_fields",
"person.metadata",
- # "person.in_app_reachability",
+ "person.in_app_reachability",
"person.name",
"person.read_only_profile_info",
"person.sort_keys",
@@ -166,10 +188,10 @@ class PeoplePaHttp(GAPI):
}
if not params_templates.get(params_template):
- raise GHuntParamsTemplateError(f"The asked template {params_template} for the endpoint {endpoint_name} wasn't recognized by GHunt.")
+ raise GHuntParamsTemplateError(f"The asked template {params_template} for the endpoint {endpoint.name} wasn't recognized by GHunt.")
+ params = params_templates[params_template]
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params_templates[params_template], None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
diff --git a/ghunt/apis/playgames.py b/ghunt/apis/playgames.py
index 86d4bc6..cc2ffc2 100644
--- a/ghunt/apis/playgames.py
+++ b/ghunt/apis/playgames.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.parsers.playgames import PlayedGames, PlayerAchievements, PlayerProfile
import httpx
@@ -33,20 +33,21 @@ class PlayGames(GAPI):
self.hostname = "www.googleapis.com"
self.scheme = "https"
- self.authentication_mode = "oauth" # sapisidhash, cookies_only, oauth or None
- self.require_key = None # key name, or None
-
self._load_api(creds, headers)
async def get_profile(self, as_client: httpx.AsyncClient, player_id: str) -> Tuple[bool, PlayerProfile]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/games/v1whitelisted/players/{player_id}"
- data_type = None # json, data or None
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, None, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url)
# Parsing
data = json.loads(req.text)
@@ -60,25 +61,27 @@ class PlayGames(GAPI):
return True, player_profile
async def get_played_games(self, as_client: httpx.AsyncClient, player_id: str, page_token: str="") -> Tuple[bool, str, PlayedGames]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "GET",
+ data_type = None, # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "GET"
base_url = f"/games/v1whitelisted/players/{player_id}/applications/played"
- data_type = None # json, data or None
params = {}
if page_token:
params = {"pageToken": page_token}
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, None, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
played_games = PlayedGames()
if not "items" in data:
- print(req)
- print(req.text)
return False, "", played_games
next_page_token = data.get("nextPageToken", "")
@@ -88,11 +91,16 @@ class PlayGames(GAPI):
return True, next_page_token, played_games
async def get_achievements(self, as_client: httpx.AsyncClient, player_id: str, page_token: str="") -> Tuple[bool, str, PlayerAchievements]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "POST",
+ data_type = "json", # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ )
+ self._load_endpoint(endpoint)
- verb = "POST"
base_url = f"/games/v1whitelisted/players/{player_id}/achievements"
- data_type = "json" # json, data or None
params = {
"state": "UNLOCKED",
@@ -100,20 +108,15 @@ class PlayGames(GAPI):
"sortOrder": "RECENT_FIRST"
}
- data = {}
-
if page_token:
params["pageToken"] = page_token
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, params, data, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, params=params)
# Parsing
data = json.loads(req.text)
achievements = PlayerAchievements()
if not "items" in data:
- print(req)
- print(req.text)
return False, "", achievements
next_page_token = ""
diff --git a/ghunt/apis/playgateway.py b/ghunt/apis/playgateway.py
index 77e7c4b..b25077e 100644
--- a/ghunt/apis/playgateway.py
+++ b/ghunt/apis/playgateway.py
@@ -1,4 +1,4 @@
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.objects.base import GHuntCreds
from ghunt import globals as gb
from ghunt.protos.playgatewaypa.search_player_pb2 import PlayerSearchProto
@@ -29,7 +29,6 @@ class PlayGatewayPaGrpc(GAPI):
if not headers:
headers = gb.config.android_headers
- headers["User-Agent"] = headers["User-Agent"].format(self.package_name)
headers = {**headers, **{
"Content-Type": "application/grpc",
@@ -41,24 +40,25 @@ class PlayGatewayPaGrpc(GAPI):
self.hostname = "playgateway-pa.googleapis.com"
self.scheme = "https"
- self.authentication_mode = "oauth" # sapisidhash, cookies_only, oauth or None
- self.require_key = None # key name, or None
-
self._load_api(creds, headers)
async def search_player(self, as_client: httpx.AsyncClient, query: str) -> PlayerSearchResults:
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "POST",
+ data_type = "data", # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ ext_metadata = {
+ "bin": {
+ "158709649": "CggaBgj22K2aARo4EgoI+aKnlZf996E/GhcQHhoPUkQyQS4yMTEwMDEuMDAyIgIxMToICgZJZ0pHVWdCB1BpeGVsIDU",
+ "173715354": "CgEx"
+ }
+ }
+ )
+ self._load_endpoint(endpoint)
- verb = "POST"
base_url = "/play.gateway.adapter.interplay.v1.PlayGatewayInterplayService/GetPage"
- data_type = "data"
-
- ext_metadata = {
- "bin": {
- "158709649": "CggaBgj22K2aARo4EgoI+aKnlZf996E/GhcQHhoPUkQyQS4yMTEwMDEuMDAyIgIxMToICgZJZ0pHVWdCB1BpeGVsIDU",
- "173715354": "CgEx"
- }
- }
player_search = PlayerSearchProto()
player_search.search_form.query.text = query
@@ -67,8 +67,7 @@ class PlayGatewayPaGrpc(GAPI):
prefix = bytes(1) + pack(">i", len(payload))
data = prefix + payload
- self._load_endpoint(endpoint_name, {}, ext_metadata)
- req = await self._query(as_client, verb, endpoint_name, base_url, None, data, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, data=data)
# Parsing
player_search_results = PlayerSearchResultsProto()
@@ -85,18 +84,22 @@ class PlayGatewayPaGrpc(GAPI):
To get all the details about a player, please use get_player method of PlayGames (HTTP API).
"""
- endpoint_name = inspect.currentframe().f_code.co_name
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "POST",
+ data_type = "data", # json, data or None
+ authentication_mode = "oauth", # sapisidhash, cookies_only, oauth or None
+ require_key = None, # key name, or None
+ ext_metadata = {
+ "bin": {
+ "158709649": "CggaBgj22K2aARo4EgoI+aKnlZf996E/GhcQHhoPUkQyQS4yMTEwMDEuMDAyIgIxMToICgZJZ0pHVWdCB1BpeGVsIDU",
+ "173715354": "CgEx"
+ }
+ }
+ )
+ self._load_endpoint(endpoint)
- verb = "POST"
base_url = "/play.gateway.adapter.interplay.v1.PlayGatewayInterplayService/GetPage"
- data_type = "data"
-
- ext_metadata = {
- "bin": {
- "158709649": "CggaBgj22K2aARo4EgoI+aKnlZf996E/GhcQHhoPUkQyQS4yMTEwMDEuMDAyIgIxMToICgZJZ0pHVWdCB1BpeGVsIDU",
- "173715354": "CgEx"
- }
- }
player_profile = GetPlayerProto()
player_profile.form.query.id = player_id
@@ -105,8 +108,7 @@ class PlayGatewayPaGrpc(GAPI):
prefix = bytes(1) + pack(">i", len(payload))
data = prefix + payload
- self._load_endpoint(endpoint_name, {}, ext_metadata)
- req = await self._query(as_client, verb, endpoint_name, base_url, None, data, data_type)
+ req = await self._query(endpoint.name, as_client, base_url, data=data)
# Parsing
player_profile = GetPlayerResponseProto()
diff --git a/ghunt/apis/vision.py b/ghunt/apis/vision.py
index b76056f..e6b779b 100644
--- a/ghunt/apis/vision.py
+++ b/ghunt/apis/vision.py
@@ -1,7 +1,7 @@
from ghunt.objects.base import GHuntCreds
from ghunt.errors import *
import ghunt.globals as gb
-from ghunt.objects.apis import GAPI
+from ghunt.objects.apis import GAPI, EndpointConfig
from ghunt.parsers.vision import VisionFaceDetection
import httpx
@@ -27,23 +27,26 @@ class VisionHttp(GAPI):
self.hostname = "content-vision.googleapis.com"
self.scheme = "https"
- self.authentication_mode = None # sapisidhash, cookies_only, oauth or None
- self.require_key = "apis_explorer" # key name, or None
- self.key_origin = "https://content-vision.googleapis.com"
-
self._load_api(creds, headers)
async def detect_faces(self, as_client: httpx.AsyncClient, image_url: str = "", image_content: str = "",
- params_template="default") -> Tuple[bool, bool, VisionFaceDetection]:
- endpoint_name = inspect.currentframe().f_code.co_name
+ data_template="default") -> Tuple[bool, bool, VisionFaceDetection]:
+ endpoint = EndpointConfig(
+ name = inspect.currentframe().f_code.co_name,
+ verb = "POST",
+ data_type = "json", # json, data or None
+ authentication_mode = None, # sapisidhash, cookies_only, oauth or None
+ require_key = "apis_explorer", # key name, or None
+ key_origin = "https://content-vision.googleapis.com"
+ )
+ self._load_endpoint(endpoint)
+
+ base_url = "/v1/images:annotate"
# image_url can cause errors with vision_api, so we prefer using image_content
# See => https://cloud.google.com/vision/docs/detecting-faces?#detect_faces_in_a_remote_image
- verb = "POST"
- base_url = "/v1/images:annotate"
- data_type = "json" # json, data or None
- params_templates = {
+ data_templates = {
"default": {
"requests":[
{
@@ -59,8 +62,8 @@ class VisionHttp(GAPI):
}
}
- if not params_templates.get(params_template):
- raise GHuntParamsTemplateError(f"The asked template {params_template} for the endpoint {endpoint_name} wasn't recognized by GHunt.")
+ if not data_templates.get(data_template):
+ raise GHuntParamsTemplateError(f"The asked template {data_template} for the endpoint {endpoint.name} wasn't recognized by GHunt.")
# Inputs checks
if image_url and image_content:
@@ -68,19 +71,21 @@ class VisionHttp(GAPI):
elif not image_url and not image_content:
raise GHuntParamsInputError("[Vision API faces detection] Please choose at least one parameter between image_url and image_content.")
- if image_url:
- params_templates["default"]["requests"][0]["image"] = {
- "source": {
- "imageUri": image_url
+ if data_template == "default":
+ if image_url:
+ data_templates["default"]["requests"][0]["image"] = {
+ "source": {
+ "imageUri": image_url
+ }
+ }
+ elif image_content:
+ data_templates["default"]["requests"][0]["image"] = {
+ "content": image_content
}
- }
- elif image_content:
- params_templates["default"]["requests"][0]["image"] = {
- "content": image_content
- }
- self._load_endpoint(endpoint_name)
- req = await self._query(as_client, verb, endpoint_name, base_url, None, params_templates[params_template], data_type)
+ data = data_templates[data_template]
+ req = await self._query(endpoint.name, as_client, base_url, data=data)
+
rate_limited = req.status_code == 429 # API Explorer sometimes rate-limit because they set their DefaultRequestsPerMinutePerProject to 1800
vision_face_detection = VisionFaceDetection()
diff --git a/ghunt/cli.py b/ghunt/cli.py
index 90d2645..b309be2 100644
--- a/ghunt/cli.py
+++ b/ghunt/cli.py
@@ -42,12 +42,20 @@ def parse_and_run():
geolocate_group.add_argument("-f", "--file", type=Path, help="File containing a raw request body, useful to put many BSSIDs. ([italic light_steel_blue1][link=https://developers.google.com/maps/documentation/geolocation/requests-geolocation?#sample-requests]Reference format[/link][/italic light_steel_blue1])")
parser_geolocate.add_argument('--json', type=Path, help="File to write the JSON output to.")
+ ### Spiderdal module
+ parser_spiderdal = subparsers.add_parser('spiderdal', help="Find assets using Digital Assets Links.", formatter_class=RichHelpFormatter)
+ parser_spiderdal.add_argument("-p", "--package", help="Example: com.squareup.cash")
+ parser_spiderdal.add_argument("-f", "--fingerprint", help="Example: 21:A7:46:75:96:C1:68:65:0F:D7:B6:31:B6:54:22:EB:56:3E:1D:21:AF:F2:2D:DE:73:89:BA:0D:5D:73:87:48")
+ parser_spiderdal.add_argument("-u", "--url", help="Example: https://cash.app. If a domain is given, it will convert it to a URL, and also try the \"www\" subdomain.")
+ parser_spiderdal.add_argument("-s", "--strict", action='store_true', help="Don't attempt to convert the domain to a URL, and don't try the \"www\" subdomain.")
+ parser_spiderdal.add_argument('--json', type=Path, help="File to write the JSON output to.")
+
### Parsing
args = None
if not sys.argv[1:]:
parser.parse_args(["--help"])
else:
- for mod in ["email", "gaia", "drive", "geolocate"]:
+ for mod in ["email", "gaia", "drive", "geolocate", "spiderdal"]:
if sys.argv[1] == mod and not sys.argv[2:]:
parser.parse_args([mod, "--help"])
@@ -71,4 +79,9 @@ def process_args(args: argparse.Namespace):
asyncio.run(drive.hunt(None, args.file_id, args.json))
case "geolocate":
from ghunt.modules import geolocate
- asyncio.run(geolocate.main(None, args.bssid, args.file, args.json))
\ No newline at end of file
+ asyncio.run(geolocate.main(None, args.bssid, args.file, args.json))
+ case "spiderdal":
+ if any([args.package, args.fingerprint]) and not all([args.package, args.fingerprint]):
+ exit("[!] You must provide both a package name and a certificate fingerprint.")
+ from ghunt.modules import spiderdal
+ asyncio.run(spiderdal.main(args.url, args.package, args.fingerprint, args.strict, args.json))
\ No newline at end of file
diff --git a/ghunt/errors.py b/ghunt/errors.py
index 0b8e7ad..87ba7a0 100644
--- a/ghunt/errors.py
+++ b/ghunt/errors.py
@@ -1,50 +1,50 @@
-class GHuntKnowledgeError(BaseException):
+class GHuntKnowledgeError(Exception):
pass
-class GHuntCorruptedHeadersError(BaseException):
+class GHuntCorruptedHeadersError(Exception):
pass
-class GHuntUnknownVerbError(BaseException):
+class GHuntUnknownVerbError(Exception):
pass
-class GHuntUnknownRequestDataTypeError(BaseException):
+class GHuntUnknownRequestDataTypeError(Exception):
pass
-class GHuntInsufficientCreds(BaseException):
+class GHuntInsufficientCreds(Exception):
pass
-class GHuntParamsTemplateError(BaseException):
+class GHuntParamsTemplateError(Exception):
pass
-class GHuntParamsInputError(BaseException):
+class GHuntParamsInputError(Exception):
pass
-class GHuntAPIResponseParsingError(BaseException):
+class GHuntAPIResponseParsingError(Exception):
pass
-class GHuntObjectsMergingError(BaseException):
+class GHuntObjectsMergingError(Exception):
pass
-class GHuntAndroidMasterAuthError(BaseException):
+class GHuntAndroidMasterAuthError(Exception):
pass
-class GHuntAndroidAppOAuth2Error(BaseException):
+class GHuntAndroidAppOAuth2Error(Exception):
pass
-class GHuntOSIDAuthError(BaseException):
+class GHuntOSIDAuthError(Exception):
pass
-class GHuntCredsNotLoaded(BaseException):
+class GHuntCredsNotLoaded(Exception):
pass
-class GHuntInvalidSession(BaseException):
+class GHuntInvalidSession(Exception):
pass
-class GHuntNotAuthenticated(BaseException):
+class GHuntNotAuthenticated(Exception):
pass
-class GHuntInvalidTarget(BaseException):
+class GHuntInvalidTarget(Exception):
pass
-class GHuntLoginError(BaseException):
+class GHuntLoginError(Exception):
pass
\ No newline at end of file
diff --git a/ghunt/helpers/gcp.py b/ghunt/helpers/gcp.py
new file mode 100644
index 0000000..4e1071f
--- /dev/null
+++ b/ghunt/helpers/gcp.py
@@ -0,0 +1,29 @@
+import dns.message
+import dns.asyncquery
+import httpx
+
+from ghunt.objects.base import GHuntCreds
+from ghunt.apis.identitytoolkit import IdentityToolkitHttp
+
+
+async def is_cloud_functions_panel_existing(project_id: str):
+ q = dns.message.make_query(f"endpoints.{project_id}.cloud.goog", "A")
+ r = await dns.asyncquery.tcp(q, "8.8.8.8")
+ return bool(r.answer)
+
+async def project_nb_from_key(as_client: httpx.AsyncClient, ghunt_creds: GHuntCreds, api_key: str, fallback=True) -> str|None:
+ identitytoolkit_api = IdentityToolkitHttp(ghunt_creds)
+ found, project_config = await identitytoolkit_api.get_project_config(as_client, api_key)
+ if found:
+ return project_config.project_id
+ if fallback:
+ # Fallback on fetching the project number by producing an error
+ import json
+ import re
+ req = await as_client.get("https://blobcomments-pa.clients6.google.com/$discovery/rest", params={"key": api_key})
+ try:
+ data = json.loads(req.text)
+ return re.findall(r'\d{12}', data["error"]["message"])[0]
+ except Exception:
+ pass
+ return None
\ No newline at end of file
diff --git a/ghunt/helpers/iam.py b/ghunt/helpers/iam.py
new file mode 100644
index 0000000..056e948
--- /dev/null
+++ b/ghunt/helpers/iam.py
@@ -0,0 +1,29 @@
+import httpx
+import asyncio
+
+from ghunt.objects.base import GHuntCreds
+from ghunt.apis.mobilesdk import MobileSDKPaHttp
+from ghunt.knowledge import iam
+from ghunt.helpers.utils import chunkify
+
+from typing import *
+
+
+async def test_all_permissions(as_client: httpx.AsyncClient, ghunt_creds: GHuntCreds, project_identifier: str):
+
+ async def test_permission(as_client: httpx.AsyncClient, mobilesdk_api: MobileSDKPaHttp, limiter: asyncio.Semaphore,
+ project_identifier: str, permissions: List[str], results: List[str]):
+ async with limiter:
+ _, perms = await mobilesdk_api.test_iam_permissions(as_client, project_identifier, permissions)
+ results.extend(perms)
+
+ mobilesdk_api = MobileSDKPaHttp(ghunt_creds)
+ results: List[str] = []
+ limiter = asyncio.Semaphore(20)
+ tasks = []
+ for perms_chunk in chunkify(iam.permissions, 100): # Max 100 permissions per request
+ tasks.append(test_permission(as_client, mobilesdk_api, limiter, project_identifier, perms_chunk, results))
+ await asyncio.gather(*tasks)
+
+ results = list(set(results))
+ print(results)
\ No newline at end of file
diff --git a/ghunt/helpers/playstore.py b/ghunt/helpers/playstore.py
new file mode 100644
index 0000000..5c7a040
--- /dev/null
+++ b/ghunt/helpers/playstore.py
@@ -0,0 +1,9 @@
+import httpx
+
+
+async def app_exists(as_client: httpx.AsyncClient, package: str) -> bool:
+ params = {
+ "id": package
+ }
+ req = await as_client.head(f"https://play.google.com/store/apps/details", params=params)
+ return req.status_code == 200
diff --git a/ghunt/helpers/utils.py b/ghunt/helpers/utils.py
index ff4e512..ce03d60 100644
--- a/ghunt/helpers/utils.py
+++ b/ghunt/helpers/utils.py
@@ -31,6 +31,14 @@ def oprint(obj: any) -> str:
pretty_output = json.dumps(json.loads(serialized), indent=2)
print(pretty_output)
+def chunkify(lst, n):
+ """
+ Cut a given list to chunks of n items.
+ """
+ k, m = divmod(len(lst), n)
+ for i in range(n):
+ yield lst[i*k+min(i, m):(i+1)*k+min(i+1, m)]
+
def within_docker() -> bool:
return Path('/.dockerenv').is_file()
diff --git a/ghunt/knowledge/iam.py b/ghunt/knowledge/iam.py
new file mode 100644
index 0000000..71b3978
--- /dev/null
+++ b/ghunt/knowledge/iam.py
@@ -0,0 +1,6834 @@
+permissions = [
+ "accessapproval.requests.approve",
+ "accessapproval.requests.dismiss",
+ "accessapproval.requests.get",
+ "accessapproval.requests.invalidate",
+ "accessapproval.requests.list",
+ "accessapproval.serviceAccounts.get",
+ "accessapproval.settings.delete",
+ "accessapproval.settings.get",
+ "accessapproval.settings.update",
+ "actions.agent.claimContentProvider",
+ "actions.agent.get",
+ "actions.agent.update",
+ "actions.agentVersions.create",
+ "actions.agentVersions.delete",
+ "actions.agentVersions.deploy",
+ "actions.agentVersions.get",
+ "actions.agentVersions.list",
+ "aiplatform.annotationSpecs.create",
+ "aiplatform.annotationSpecs.delete",
+ "aiplatform.annotationSpecs.get",
+ "aiplatform.annotationSpecs.list",
+ "aiplatform.annotationSpecs.update",
+ "aiplatform.annotations.create",
+ "aiplatform.annotations.delete",
+ "aiplatform.annotations.get",
+ "aiplatform.annotations.list",
+ "aiplatform.annotations.update",
+ "aiplatform.artifacts.create",
+ "aiplatform.artifacts.delete",
+ "aiplatform.artifacts.get",
+ "aiplatform.artifacts.list",
+ "aiplatform.artifacts.update",
+ "aiplatform.batchPredictionJobs.cancel",
+ "aiplatform.batchPredictionJobs.create",
+ "aiplatform.batchPredictionJobs.delete",
+ "aiplatform.batchPredictionJobs.get",
+ "aiplatform.batchPredictionJobs.list",
+ "aiplatform.contexts.addContextArtifactsAndExecutions",
+ "aiplatform.contexts.addContextChildren",
+ "aiplatform.contexts.create",
+ "aiplatform.contexts.delete",
+ "aiplatform.contexts.get",
+ "aiplatform.contexts.list",
+ "aiplatform.contexts.queryContextLineageSubgraph",
+ "aiplatform.contexts.update",
+ "aiplatform.customJobs.cancel",
+ "aiplatform.customJobs.create",
+ "aiplatform.customJobs.delete",
+ "aiplatform.customJobs.get",
+ "aiplatform.customJobs.list",
+ "aiplatform.dataItems.create",
+ "aiplatform.dataItems.delete",
+ "aiplatform.dataItems.get",
+ "aiplatform.dataItems.list",
+ "aiplatform.dataItems.update",
+ "aiplatform.dataLabelingJobs.cancel",
+ "aiplatform.dataLabelingJobs.create",
+ "aiplatform.dataLabelingJobs.delete",
+ "aiplatform.dataLabelingJobs.get",
+ "aiplatform.dataLabelingJobs.list",
+ "aiplatform.datasets.create",
+ "aiplatform.datasets.delete",
+ "aiplatform.datasets.export",
+ "aiplatform.datasets.get",
+ "aiplatform.datasets.import",
+ "aiplatform.datasets.list",
+ "aiplatform.datasets.update",
+ "aiplatform.deploymentResourcePools.create",
+ "aiplatform.deploymentResourcePools.delete",
+ "aiplatform.deploymentResourcePools.get",
+ "aiplatform.deploymentResourcePools.list",
+ "aiplatform.deploymentResourcePools.queryDeployedModels",
+ "aiplatform.deploymentResourcePools.update",
+ "aiplatform.edgeDeploymentJobs.create",
+ "aiplatform.edgeDeploymentJobs.delete",
+ "aiplatform.edgeDeploymentJobs.get",
+ "aiplatform.edgeDeploymentJobs.list",
+ "aiplatform.edgeDeviceDebugInfo.get",
+ "aiplatform.edgeDevices.create",
+ "aiplatform.edgeDevices.delete",
+ "aiplatform.edgeDevices.get",
+ "aiplatform.edgeDevices.list",
+ "aiplatform.edgeDevices.update",
+ "aiplatform.endpoints.create",
+ "aiplatform.endpoints.delete",
+ "aiplatform.endpoints.deploy",
+ "aiplatform.endpoints.explain",
+ "aiplatform.endpoints.get",
+ "aiplatform.endpoints.list",
+ "aiplatform.endpoints.predict",
+ "aiplatform.endpoints.undeploy",
+ "aiplatform.endpoints.update",
+ "aiplatform.entityTypes.create",
+ "aiplatform.entityTypes.delete",
+ "aiplatform.entityTypes.deleteFeatureValues",
+ "aiplatform.entityTypes.exportFeatureValues",
+ "aiplatform.entityTypes.get",
+ "aiplatform.entityTypes.getIamPolicy",
+ "aiplatform.entityTypes.importFeatureValues",
+ "aiplatform.entityTypes.list",
+ "aiplatform.entityTypes.readFeatureValues",
+ "aiplatform.entityTypes.setIamPolicy",
+ "aiplatform.entityTypes.streamingReadFeatureValues",
+ "aiplatform.entityTypes.update",
+ "aiplatform.entityTypes.writeFeatureValues",
+ "aiplatform.executions.addExecutionEvents",
+ "aiplatform.executions.create",
+ "aiplatform.executions.delete",
+ "aiplatform.executions.get",
+ "aiplatform.executions.list",
+ "aiplatform.executions.queryExecutionInputsAndOutputs",
+ "aiplatform.executions.update",
+ "aiplatform.features.create",
+ "aiplatform.features.delete",
+ "aiplatform.features.get",
+ "aiplatform.features.list",
+ "aiplatform.features.update",
+ "aiplatform.featurestores.batchReadFeatureValues",
+ "aiplatform.featurestores.create",
+ "aiplatform.featurestores.delete",
+ "aiplatform.featurestores.exportFeatures",
+ "aiplatform.featurestores.get",
+ "aiplatform.featurestores.getIamPolicy",
+ "aiplatform.featurestores.importFeatures",
+ "aiplatform.featurestores.list",
+ "aiplatform.featurestores.readFeatures",
+ "aiplatform.featurestores.setIamPolicy",
+ "aiplatform.featurestores.update",
+ "aiplatform.featurestores.writeFeatures",
+ "aiplatform.humanInTheLoops.create",
+ "aiplatform.humanInTheLoops.delete",
+ "aiplatform.humanInTheLoops.get",
+ "aiplatform.humanInTheLoops.list",
+ "aiplatform.humanInTheLoops.queryAnnotationStats",
+ "aiplatform.humanInTheLoops.send",
+ "aiplatform.humanInTheLoops.update",
+ "aiplatform.hyperparameterTuningJobs.cancel",
+ "aiplatform.hyperparameterTuningJobs.create",
+ "aiplatform.hyperparameterTuningJobs.delete",
+ "aiplatform.hyperparameterTuningJobs.get",
+ "aiplatform.hyperparameterTuningJobs.list",
+ "aiplatform.indexEndpoints.create",
+ "aiplatform.indexEndpoints.delete",
+ "aiplatform.indexEndpoints.deploy",
+ "aiplatform.indexEndpoints.get",
+ "aiplatform.indexEndpoints.list",
+ "aiplatform.indexEndpoints.undeploy",
+ "aiplatform.indexEndpoints.update",
+ "aiplatform.indexes.create",
+ "aiplatform.indexes.delete",
+ "aiplatform.indexes.get",
+ "aiplatform.indexes.list",
+ "aiplatform.indexes.update",
+ "aiplatform.locations.get",
+ "aiplatform.locations.list",
+ "aiplatform.metadataSchemas.create",
+ "aiplatform.metadataSchemas.delete",
+ "aiplatform.metadataSchemas.get",
+ "aiplatform.metadataSchemas.list",
+ "aiplatform.metadataStores.create",
+ "aiplatform.metadataStores.delete",
+ "aiplatform.metadataStores.get",
+ "aiplatform.metadataStores.list",
+ "aiplatform.migratableResources.migrate",
+ "aiplatform.migratableResources.search",
+ "aiplatform.modelDeploymentMonitoringJobs.create",
+ "aiplatform.modelDeploymentMonitoringJobs.delete",
+ "aiplatform.modelDeploymentMonitoringJobs.get",
+ "aiplatform.modelDeploymentMonitoringJobs.list",
+ "aiplatform.modelDeploymentMonitoringJobs.pause",
+ "aiplatform.modelDeploymentMonitoringJobs.resume",
+ "aiplatform.modelDeploymentMonitoringJobs.searchStatsAnomalies",
+ "aiplatform.modelDeploymentMonitoringJobs.update",
+ "aiplatform.modelEvaluationSlices.get",
+ "aiplatform.modelEvaluationSlices.list",
+ "aiplatform.modelEvaluations.exportEvaluatedDataItems",
+ "aiplatform.modelEvaluations.get",
+ "aiplatform.modelEvaluations.list",
+ "aiplatform.models.delete",
+ "aiplatform.models.export",
+ "aiplatform.models.get",
+ "aiplatform.models.list",
+ "aiplatform.models.update",
+ "aiplatform.models.upload",
+ "aiplatform.nasJobs.cancel",
+ "aiplatform.nasJobs.create",
+ "aiplatform.nasJobs.delete",
+ "aiplatform.nasJobs.get",
+ "aiplatform.nasJobs.list",
+ "aiplatform.nasTrialDetails.get",
+ "aiplatform.nasTrialDetails.list",
+ "aiplatform.operations.list",
+ "aiplatform.pipelineJobs.cancel",
+ "aiplatform.pipelineJobs.create",
+ "aiplatform.pipelineJobs.delete",
+ "aiplatform.pipelineJobs.get",
+ "aiplatform.pipelineJobs.list",
+ "aiplatform.specialistPools.create",
+ "aiplatform.specialistPools.delete",
+ "aiplatform.specialistPools.get",
+ "aiplatform.specialistPools.list",
+ "aiplatform.specialistPools.update",
+ "aiplatform.studies.create",
+ "aiplatform.studies.delete",
+ "aiplatform.studies.get",
+ "aiplatform.studies.list",
+ "aiplatform.studies.update",
+ "aiplatform.tensorboardExperiments.create",
+ "aiplatform.tensorboardExperiments.delete",
+ "aiplatform.tensorboardExperiments.get",
+ "aiplatform.tensorboardExperiments.list",
+ "aiplatform.tensorboardExperiments.update",
+ "aiplatform.tensorboardExperiments.write",
+ "aiplatform.tensorboardRuns.batchCreate",
+ "aiplatform.tensorboardRuns.create",
+ "aiplatform.tensorboardRuns.delete",
+ "aiplatform.tensorboardRuns.get",
+ "aiplatform.tensorboardRuns.list",
+ "aiplatform.tensorboardRuns.update",
+ "aiplatform.tensorboardRuns.write",
+ "aiplatform.tensorboardTimeSeries.batchCreate",
+ "aiplatform.tensorboardTimeSeries.batchRead",
+ "aiplatform.tensorboardTimeSeries.create",
+ "aiplatform.tensorboardTimeSeries.delete",
+ "aiplatform.tensorboardTimeSeries.get",
+ "aiplatform.tensorboardTimeSeries.list",
+ "aiplatform.tensorboardTimeSeries.read",
+ "aiplatform.tensorboardTimeSeries.update",
+ "aiplatform.tensorboards.create",
+ "aiplatform.tensorboards.delete",
+ "aiplatform.tensorboards.get",
+ "aiplatform.tensorboards.list",
+ "aiplatform.tensorboards.recordAccess",
+ "aiplatform.tensorboards.update",
+ "aiplatform.trainingPipelines.cancel",
+ "aiplatform.trainingPipelines.create",
+ "aiplatform.trainingPipelines.delete",
+ "aiplatform.trainingPipelines.get",
+ "aiplatform.trainingPipelines.list",
+ "aiplatform.trials.create",
+ "aiplatform.trials.delete",
+ "aiplatform.trials.get",
+ "aiplatform.trials.list",
+ "aiplatform.trials.update",
+ "alloydb.backups.create",
+ "alloydb.backups.delete",
+ "alloydb.backups.get",
+ "alloydb.backups.list",
+ "alloydb.backups.update",
+ "alloydb.clusters.create",
+ "alloydb.clusters.delete",
+ "alloydb.clusters.generateClientCertificate",
+ "alloydb.clusters.get",
+ "alloydb.clusters.list",
+ "alloydb.clusters.update",
+ "alloydb.instances.connect",
+ "alloydb.instances.create",
+ "alloydb.instances.delete",
+ "alloydb.instances.failover",
+ "alloydb.instances.get",
+ "alloydb.instances.list",
+ "alloydb.instances.restart",
+ "alloydb.instances.update",
+ "alloydb.locations.get",
+ "alloydb.locations.list",
+ "alloydb.operations.cancel",
+ "alloydb.operations.delete",
+ "alloydb.operations.get",
+ "alloydb.operations.list",
+ "alloydb.supportedDatabaseFlags.get",
+ "alloydb.supportedDatabaseFlags.list",
+ "analyticshub.dataExchanges.create",
+ "analyticshub.dataExchanges.delete",
+ "analyticshub.dataExchanges.get",
+ "analyticshub.dataExchanges.getIamPolicy",
+ "analyticshub.dataExchanges.list",
+ "analyticshub.dataExchanges.setIamPolicy",
+ "analyticshub.dataExchanges.update",
+ "analyticshub.listings.create",
+ "analyticshub.listings.delete",
+ "analyticshub.listings.get",
+ "analyticshub.listings.getIamPolicy",
+ "analyticshub.listings.list",
+ "analyticshub.listings.setIamPolicy",
+ "analyticshub.listings.subscribe",
+ "analyticshub.listings.update",
+ "androidmanagement.enterprises.manage",
+ "apigateway.apiconfigs.create",
+ "apigateway.apiconfigs.delete",
+ "apigateway.apiconfigs.get",
+ "apigateway.apiconfigs.getIamPolicy",
+ "apigateway.apiconfigs.list",
+ "apigateway.apiconfigs.setIamPolicy",
+ "apigateway.apiconfigs.update",
+ "apigateway.apis.create",
+ "apigateway.apis.delete",
+ "apigateway.apis.get",
+ "apigateway.apis.getIamPolicy",
+ "apigateway.apis.list",
+ "apigateway.apis.setIamPolicy",
+ "apigateway.apis.update",
+ "apigateway.gateways.create",
+ "apigateway.gateways.delete",
+ "apigateway.gateways.get",
+ "apigateway.gateways.getIamPolicy",
+ "apigateway.gateways.list",
+ "apigateway.gateways.setIamPolicy",
+ "apigateway.gateways.update",
+ "apigateway.locations.get",
+ "apigateway.locations.list",
+ "apigateway.operations.cancel",
+ "apigateway.operations.delete",
+ "apigateway.operations.get",
+ "apigateway.operations.list",
+ "apigee.apiproductattributes.createOrUpdateAll",
+ "apigee.apiproductattributes.delete",
+ "apigee.apiproductattributes.get",
+ "apigee.apiproductattributes.list",
+ "apigee.apiproductattributes.update",
+ "apigee.apiproducts.create",
+ "apigee.apiproducts.delete",
+ "apigee.apiproducts.get",
+ "apigee.apiproducts.list",
+ "apigee.apiproducts.update",
+ "apigee.appkeys.create",
+ "apigee.appkeys.delete",
+ "apigee.appkeys.get",
+ "apigee.appkeys.manage",
+ "apigee.apps.get",
+ "apigee.apps.list",
+ "apigee.archivedeployments.create",
+ "apigee.archivedeployments.delete",
+ "apigee.archivedeployments.download",
+ "apigee.archivedeployments.get",
+ "apigee.archivedeployments.list",
+ "apigee.archivedeployments.update",
+ "apigee.archivedeployments.upload",
+ "apigee.caches.delete",
+ "apigee.caches.list",
+ "apigee.canaryevaluations.create",
+ "apigee.canaryevaluations.get",
+ "apigee.datacollectors.create",
+ "apigee.datacollectors.delete",
+ "apigee.datacollectors.get",
+ "apigee.datacollectors.list",
+ "apigee.datacollectors.update",
+ "apigee.datalocation.get",
+ "apigee.datastores.create",
+ "apigee.datastores.delete",
+ "apigee.datastores.get",
+ "apigee.datastores.list",
+ "apigee.datastores.update",
+ "apigee.deployments.create",
+ "apigee.deployments.delete",
+ "apigee.deployments.get",
+ "apigee.deployments.list",
+ "apigee.deployments.update",
+ "apigee.developerappattributes.createOrUpdateAll",
+ "apigee.developerappattributes.delete",
+ "apigee.developerappattributes.get",
+ "apigee.developerappattributes.list",
+ "apigee.developerappattributes.update",
+ "apigee.developerapps.create",
+ "apigee.developerapps.delete",
+ "apigee.developerapps.get",
+ "apigee.developerapps.list",
+ "apigee.developerapps.manage",
+ "apigee.developerattributes.createOrUpdateAll",
+ "apigee.developerattributes.delete",
+ "apigee.developerattributes.get",
+ "apigee.developerattributes.list",
+ "apigee.developerattributes.update",
+ "apigee.developerbalances.adjust",
+ "apigee.developerbalances.get",
+ "apigee.developerbalances.update",
+ "apigee.developermonetizationconfigs.get",
+ "apigee.developermonetizationconfigs.update",
+ "apigee.developers.create",
+ "apigee.developers.delete",
+ "apigee.developers.get",
+ "apigee.developers.list",
+ "apigee.developers.update",
+ "apigee.developersubscriptions.create",
+ "apigee.developersubscriptions.get",
+ "apigee.developersubscriptions.list",
+ "apigee.developersubscriptions.update",
+ "apigee.endpointattachments.create",
+ "apigee.endpointattachments.delete",
+ "apigee.endpointattachments.get",
+ "apigee.endpointattachments.list",
+ "apigee.envgroupattachments.create",
+ "apigee.envgroupattachments.delete",
+ "apigee.envgroupattachments.get",
+ "apigee.envgroupattachments.list",
+ "apigee.envgroups.create",
+ "apigee.envgroups.delete",
+ "apigee.envgroups.get",
+ "apigee.envgroups.list",
+ "apigee.envgroups.update",
+ "apigee.environments.create",
+ "apigee.environments.delete",
+ "apigee.environments.get",
+ "apigee.environments.getDataLocation",
+ "apigee.environments.getIamPolicy",
+ "apigee.environments.getStats",
+ "apigee.environments.list",
+ "apigee.environments.manageRuntime",
+ "apigee.environments.setIamPolicy",
+ "apigee.environments.update",
+ "apigee.exports.create",
+ "apigee.exports.get",
+ "apigee.exports.list",
+ "apigee.flowhooks.attachSharedFlow",
+ "apigee.flowhooks.detachSharedFlow",
+ "apigee.flowhooks.getSharedFlow",
+ "apigee.flowhooks.list",
+ "apigee.hostqueries.create",
+ "apigee.hostqueries.get",
+ "apigee.hostqueries.list",
+ "apigee.hostsecurityreports.create",
+ "apigee.hostsecurityreports.get",
+ "apigee.hostsecurityreports.list",
+ "apigee.hoststats.get",
+ "apigee.ingressconfigs.get",
+ "apigee.instanceattachments.create",
+ "apigee.instanceattachments.delete",
+ "apigee.instanceattachments.get",
+ "apigee.instanceattachments.list",
+ "apigee.instances.create",
+ "apigee.instances.delete",
+ "apigee.instances.get",
+ "apigee.instances.list",
+ "apigee.instances.reportStatus",
+ "apigee.instances.update",
+ "apigee.keystorealiases.create",
+ "apigee.keystorealiases.delete",
+ "apigee.keystorealiases.exportCertificate",
+ "apigee.keystorealiases.generateCSR",
+ "apigee.keystorealiases.get",
+ "apigee.keystorealiases.list",
+ "apigee.keystorealiases.update",
+ "apigee.keystores.create",
+ "apigee.keystores.delete",
+ "apigee.keystores.export",
+ "apigee.keystores.get",
+ "apigee.keystores.list",
+ "apigee.keyvaluemapentries.create",
+ "apigee.keyvaluemapentries.delete",
+ "apigee.keyvaluemapentries.get",
+ "apigee.keyvaluemapentries.list",
+ "apigee.keyvaluemaps.create",
+ "apigee.keyvaluemaps.delete",
+ "apigee.keyvaluemaps.list",
+ "apigee.maskconfigs.get",
+ "apigee.maskconfigs.update",
+ "apigee.operations.get",
+ "apigee.operations.list",
+ "apigee.organizations.create",
+ "apigee.organizations.delete",
+ "apigee.organizations.get",
+ "apigee.organizations.list",
+ "apigee.organizations.update",
+ "apigee.portals.create",
+ "apigee.portals.delete",
+ "apigee.portals.get",
+ "apigee.portals.list",
+ "apigee.portals.update",
+ "apigee.projects.migrate",
+ "apigee.projects.previewMigration",
+ "apigee.projects.update",
+ "apigee.proxies.create",
+ "apigee.proxies.delete",
+ "apigee.proxies.get",
+ "apigee.proxies.list",
+ "apigee.proxies.update",
+ "apigee.proxyrevisions.delete",
+ "apigee.proxyrevisions.deploy",
+ "apigee.proxyrevisions.get",
+ "apigee.proxyrevisions.list",
+ "apigee.proxyrevisions.undeploy",
+ "apigee.proxyrevisions.update",
+ "apigee.queries.create",
+ "apigee.queries.get",
+ "apigee.queries.list",
+ "apigee.rateplans.create",
+ "apigee.rateplans.delete",
+ "apigee.rateplans.get",
+ "apigee.rateplans.list",
+ "apigee.rateplans.update",
+ "apigee.references.create",
+ "apigee.references.delete",
+ "apigee.references.get",
+ "apigee.references.list",
+ "apigee.references.update",
+ "apigee.reports.create",
+ "apigee.reports.delete",
+ "apigee.reports.get",
+ "apigee.reports.list",
+ "apigee.reports.update",
+ "apigee.resourcefiles.create",
+ "apigee.resourcefiles.delete",
+ "apigee.resourcefiles.get",
+ "apigee.resourcefiles.list",
+ "apigee.resourcefiles.update",
+ "apigee.runtimeconfigs.get",
+ "apigee.securityProfileEnvironments.computeScore",
+ "apigee.securityProfileEnvironments.create",
+ "apigee.securityProfileEnvironments.delete",
+ "apigee.securityProfiles.get",
+ "apigee.securityProfiles.list",
+ "apigee.securityStats.queryTabularStats",
+ "apigee.securityStats.queryTimeSeriesStats",
+ "apigee.securityreports.create",
+ "apigee.securityreports.get",
+ "apigee.securityreports.list",
+ "apigee.sharedflowrevisions.delete",
+ "apigee.sharedflowrevisions.deploy",
+ "apigee.sharedflowrevisions.get",
+ "apigee.sharedflowrevisions.list",
+ "apigee.sharedflowrevisions.undeploy",
+ "apigee.sharedflowrevisions.update",
+ "apigee.sharedflows.create",
+ "apigee.sharedflows.delete",
+ "apigee.sharedflows.get",
+ "apigee.sharedflows.list",
+ "apigee.targetservers.create",
+ "apigee.targetservers.delete",
+ "apigee.targetservers.get",
+ "apigee.targetservers.list",
+ "apigee.targetservers.update",
+ "apigee.traceconfig.get",
+ "apigee.traceconfig.update",
+ "apigee.traceconfigoverrides.create",
+ "apigee.traceconfigoverrides.delete",
+ "apigee.traceconfigoverrides.get",
+ "apigee.traceconfigoverrides.list",
+ "apigee.traceconfigoverrides.update",
+ "apigee.tracesessions.create",
+ "apigee.tracesessions.delete",
+ "apigee.tracesessions.get",
+ "apigee.tracesessions.list",
+ "apigeeconnect.connections.list",
+ "apigeeconnect.endpoints.connect",
+ "apigeeregistry.apis.create",
+ "apigeeregistry.apis.delete",
+ "apigeeregistry.apis.get",
+ "apigeeregistry.apis.getIamPolicy",
+ "apigeeregistry.apis.list",
+ "apigeeregistry.apis.setIamPolicy",
+ "apigeeregistry.apis.update",
+ "apigeeregistry.artifacts.create",
+ "apigeeregistry.artifacts.delete",
+ "apigeeregistry.artifacts.get",
+ "apigeeregistry.artifacts.getIamPolicy",
+ "apigeeregistry.artifacts.list",
+ "apigeeregistry.artifacts.setIamPolicy",
+ "apigeeregistry.artifacts.update",
+ "apigeeregistry.deployments.create",
+ "apigeeregistry.deployments.delete",
+ "apigeeregistry.deployments.get",
+ "apigeeregistry.deployments.list",
+ "apigeeregistry.deployments.update",
+ "apigeeregistry.instances.get",
+ "apigeeregistry.instances.update",
+ "apigeeregistry.locations.get",
+ "apigeeregistry.locations.list",
+ "apigeeregistry.operations.cancel",
+ "apigeeregistry.operations.delete",
+ "apigeeregistry.operations.get",
+ "apigeeregistry.operations.list",
+ "apigeeregistry.specs.create",
+ "apigeeregistry.specs.delete",
+ "apigeeregistry.specs.get",
+ "apigeeregistry.specs.getIamPolicy",
+ "apigeeregistry.specs.list",
+ "apigeeregistry.specs.setIamPolicy",
+ "apigeeregistry.specs.update",
+ "apigeeregistry.versions.create",
+ "apigeeregistry.versions.delete",
+ "apigeeregistry.versions.get",
+ "apigeeregistry.versions.getIamPolicy",
+ "apigeeregistry.versions.list",
+ "apigeeregistry.versions.setIamPolicy",
+ "apigeeregistry.versions.update",
+ "apikeys.keys.create",
+ "apikeys.keys.delete",
+ "apikeys.keys.get",
+ "apikeys.keys.getKeyString",
+ "apikeys.keys.list",
+ "apikeys.keys.lookup",
+ "apikeys.keys.undelete",
+ "apikeys.keys.update",
+ "appengine.applications.create",
+ "appengine.applications.get",
+ "appengine.applications.update",
+ "appengine.instances.delete",
+ "appengine.instances.get",
+ "appengine.instances.list",
+ "appengine.memcache.addKey",
+ "appengine.memcache.flush",
+ "appengine.memcache.get",
+ "appengine.memcache.getKey",
+ "appengine.memcache.list",
+ "appengine.memcache.update",
+ "appengine.operations.get",
+ "appengine.operations.list",
+ "appengine.runtimes.actAsAdmin",
+ "appengine.services.delete",
+ "appengine.services.get",
+ "appengine.services.list",
+ "appengine.services.update",
+ "appengine.versions.create",
+ "appengine.versions.delete",
+ "appengine.versions.get",
+ "appengine.versions.getFileContents",
+ "appengine.versions.list",
+ "appengine.versions.update",
+ "artifactregistry.aptartifacts.create",
+ "artifactregistry.dockerimages.get",
+ "artifactregistry.dockerimages.list",
+ "artifactregistry.files.get",
+ "artifactregistry.files.list",
+ "artifactregistry.kfpartifacts.create",
+ "artifactregistry.locations.get",
+ "artifactregistry.locations.list",
+ "artifactregistry.mavenartifacts.get",
+ "artifactregistry.mavenartifacts.list",
+ "artifactregistry.npmpackages.get",
+ "artifactregistry.npmpackages.list",
+ "artifactregistry.packages.delete",
+ "artifactregistry.packages.get",
+ "artifactregistry.packages.list",
+ "artifactregistry.projectsettings.get",
+ "artifactregistry.projectsettings.update",
+ "artifactregistry.pythonpackages.get",
+ "artifactregistry.pythonpackages.list",
+ "artifactregistry.repositories.create",
+ "artifactregistry.repositories.createTagBinding",
+ "artifactregistry.repositories.delete",
+ "artifactregistry.repositories.deleteArtifacts",
+ "artifactregistry.repositories.deleteTagBinding",
+ "artifactregistry.repositories.downloadArtifacts",
+ "artifactregistry.repositories.get",
+ "artifactregistry.repositories.getIamPolicy",
+ "artifactregistry.repositories.list",
+ "artifactregistry.repositories.listEffectiveTags",
+ "artifactregistry.repositories.listTagBindings",
+ "artifactregistry.repositories.setIamPolicy",
+ "artifactregistry.repositories.update",
+ "artifactregistry.repositories.uploadArtifacts",
+ "artifactregistry.tags.create",
+ "artifactregistry.tags.delete",
+ "artifactregistry.tags.get",
+ "artifactregistry.tags.list",
+ "artifactregistry.tags.update",
+ "artifactregistry.versions.delete",
+ "artifactregistry.versions.get",
+ "artifactregistry.versions.list",
+ "artifactregistry.yumartifacts.create",
+ "automl.annotationSpecs.create",
+ "automl.annotationSpecs.delete",
+ "automl.annotationSpecs.get",
+ "automl.annotationSpecs.list",
+ "automl.annotationSpecs.update",
+ "automl.annotations.approve",
+ "automl.annotations.create",
+ "automl.annotations.list",
+ "automl.annotations.manipulate",
+ "automl.annotations.reject",
+ "automl.columnSpecs.get",
+ "automl.columnSpecs.list",
+ "automl.columnSpecs.update",
+ "automl.datasets.create",
+ "automl.datasets.delete",
+ "automl.datasets.export",
+ "automl.datasets.get",
+ "automl.datasets.getIamPolicy",
+ "automl.datasets.import",
+ "automl.datasets.list",
+ "automl.datasets.setIamPolicy",
+ "automl.datasets.update",
+ "automl.examples.delete",
+ "automl.examples.get",
+ "automl.examples.list",
+ "automl.examples.update",
+ "automl.files.delete",
+ "automl.files.list",
+ "automl.humanAnnotationTasks.create",
+ "automl.humanAnnotationTasks.delete",
+ "automl.humanAnnotationTasks.get",
+ "automl.humanAnnotationTasks.list",
+ "automl.locations.get",
+ "automl.locations.getIamPolicy",
+ "automl.locations.list",
+ "automl.locations.setIamPolicy",
+ "automl.modelEvaluations.create",
+ "automl.modelEvaluations.get",
+ "automl.modelEvaluations.list",
+ "automl.models.create",
+ "automl.models.delete",
+ "automl.models.deploy",
+ "automl.models.export",
+ "automl.models.get",
+ "automl.models.getIamPolicy",
+ "automl.models.list",
+ "automl.models.predict",
+ "automl.models.setIamPolicy",
+ "automl.models.undeploy",
+ "automl.operations.cancel",
+ "automl.operations.delete",
+ "automl.operations.get",
+ "automl.operations.list",
+ "automl.tableSpecs.get",
+ "automl.tableSpecs.list",
+ "automl.tableSpecs.update",
+ "automlrecommendations.apiKeys.create",
+ "automlrecommendations.apiKeys.delete",
+ "automlrecommendations.apiKeys.list",
+ "automlrecommendations.catalogItems.create",
+ "automlrecommendations.catalogItems.delete",
+ "automlrecommendations.catalogItems.get",
+ "automlrecommendations.catalogItems.list",
+ "automlrecommendations.catalogItems.update",
+ "automlrecommendations.catalogs.getStats",
+ "automlrecommendations.catalogs.list",
+ "automlrecommendations.catalogs.update",
+ "automlrecommendations.eventStores.getStats",
+ "automlrecommendations.events.create",
+ "automlrecommendations.events.list",
+ "automlrecommendations.events.purge",
+ "automlrecommendations.events.rejoin",
+ "automlrecommendations.placements.create",
+ "automlrecommendations.placements.delete",
+ "automlrecommendations.placements.getStats",
+ "automlrecommendations.placements.list",
+ "automlrecommendations.recommendations.create",
+ "automlrecommendations.recommendations.delete",
+ "automlrecommendations.recommendations.list",
+ "automlrecommendations.recommendations.pause",
+ "automlrecommendations.recommendations.resume",
+ "automlrecommendations.recommendations.update",
+ "autoscaling.sites.getIamPolicy",
+ "autoscaling.sites.readRecommendations",
+ "autoscaling.sites.setIamPolicy",
+ "autoscaling.sites.writeMetrics",
+ "autoscaling.sites.writeState",
+ "axt.labels.get",
+ "axt.labels.set",
+ "backupdr.locations.get",
+ "backupdr.locations.list",
+ "backupdr.managementServers.backupAccess",
+ "backupdr.managementServers.create",
+ "backupdr.managementServers.delete",
+ "backupdr.managementServers.get",
+ "backupdr.managementServers.getIamPolicy",
+ "backupdr.managementServers.list",
+ "backupdr.managementServers.manageInternalACL",
+ "backupdr.managementServers.setIamPolicy",
+ "backupdr.operations.cancel",
+ "backupdr.operations.delete",
+ "backupdr.operations.get",
+ "backupdr.operations.list",
+ "baremetalsolution.instancequotas.list",
+ "baremetalsolution.instances.attachNetwork",
+ "baremetalsolution.instances.attachVolume",
+ "baremetalsolution.instances.create",
+ "baremetalsolution.instances.detachLun",
+ "baremetalsolution.instances.detachNetwork",
+ "baremetalsolution.instances.detachVolume",
+ "baremetalsolution.instances.disableInteractiveSerialConsole",
+ "baremetalsolution.instances.enableInteractiveSerialConsole",
+ "baremetalsolution.instances.get",
+ "baremetalsolution.instances.list",
+ "baremetalsolution.instances.reset",
+ "baremetalsolution.instances.start",
+ "baremetalsolution.instances.stop",
+ "baremetalsolution.instances.update",
+ "baremetalsolution.luns.create",
+ "baremetalsolution.luns.delete",
+ "baremetalsolution.luns.get",
+ "baremetalsolution.luns.list",
+ "baremetalsolution.luns.update",
+ "baremetalsolution.networkquotas.list",
+ "baremetalsolution.networks.create",
+ "baremetalsolution.networks.delete",
+ "baremetalsolution.networks.get",
+ "baremetalsolution.networks.list",
+ "baremetalsolution.networks.update",
+ "baremetalsolution.nfsshares.create",
+ "baremetalsolution.nfsshares.delete",
+ "baremetalsolution.nfsshares.get",
+ "baremetalsolution.nfsshares.list",
+ "baremetalsolution.nfsshares.update",
+ "baremetalsolution.snapshotschedulepolicies.create",
+ "baremetalsolution.snapshotschedulepolicies.delete",
+ "baremetalsolution.snapshotschedulepolicies.get",
+ "baremetalsolution.snapshotschedulepolicies.list",
+ "baremetalsolution.snapshotschedulepolicies.update",
+ "baremetalsolution.sshKeys.create",
+ "baremetalsolution.sshKeys.delete",
+ "baremetalsolution.sshKeys.list",
+ "baremetalsolution.volumequotas.list",
+ "baremetalsolution.volumes.create",
+ "baremetalsolution.volumes.delete",
+ "baremetalsolution.volumes.get",
+ "baremetalsolution.volumes.list",
+ "baremetalsolution.volumes.resize",
+ "baremetalsolution.volumes.update",
+ "baremetalsolution.volumesnapshots.create",
+ "baremetalsolution.volumesnapshots.delete",
+ "baremetalsolution.volumesnapshots.get",
+ "baremetalsolution.volumesnapshots.list",
+ "baremetalsolution.volumesnapshots.restore",
+ "batch.jobs.create",
+ "batch.jobs.delete",
+ "batch.jobs.get",
+ "batch.jobs.list",
+ "batch.locations.get",
+ "batch.locations.list",
+ "batch.operations.get",
+ "batch.operations.list",
+ "batch.states.report",
+ "batch.tasks.get",
+ "batch.tasks.list",
+ "beyondcorp.appConnections.create",
+ "beyondcorp.appConnections.delete",
+ "beyondcorp.appConnections.get",
+ "beyondcorp.appConnections.getIamPolicy",
+ "beyondcorp.appConnections.list",
+ "beyondcorp.appConnections.setIamPolicy",
+ "beyondcorp.appConnections.update",
+ "beyondcorp.appConnectors.create",
+ "beyondcorp.appConnectors.delete",
+ "beyondcorp.appConnectors.get",
+ "beyondcorp.appConnectors.getIamPolicy",
+ "beyondcorp.appConnectors.list",
+ "beyondcorp.appConnectors.reportStatus",
+ "beyondcorp.appConnectors.setIamPolicy",
+ "beyondcorp.appConnectors.update",
+ "beyondcorp.appGateways.create",
+ "beyondcorp.appGateways.delete",
+ "beyondcorp.appGateways.get",
+ "beyondcorp.appGateways.getIamPolicy",
+ "beyondcorp.appGateways.list",
+ "beyondcorp.appGateways.setIamPolicy",
+ "beyondcorp.appGateways.update",
+ "beyondcorp.clientConnectorServices.access",
+ "beyondcorp.clientConnectorServices.create",
+ "beyondcorp.clientConnectorServices.delete",
+ "beyondcorp.clientConnectorServices.get",
+ "beyondcorp.clientConnectorServices.getIamPolicy",
+ "beyondcorp.clientConnectorServices.list",
+ "beyondcorp.clientConnectorServices.setIamPolicy",
+ "beyondcorp.clientConnectorServices.update",
+ "beyondcorp.clientGateways.create",
+ "beyondcorp.clientGateways.delete",
+ "beyondcorp.clientGateways.get",
+ "beyondcorp.clientGateways.getIamPolicy",
+ "beyondcorp.clientGateways.list",
+ "beyondcorp.clientGateways.setIamPolicy",
+ "beyondcorp.locations.get",
+ "beyondcorp.locations.list",
+ "beyondcorp.operations.cancel",
+ "beyondcorp.operations.delete",
+ "beyondcorp.operations.get",
+ "beyondcorp.operations.list",
+ "bigquery.bireservations.get",
+ "bigquery.bireservations.update",
+ "bigquery.capacityCommitments.create",
+ "bigquery.capacityCommitments.delete",
+ "bigquery.capacityCommitments.get",
+ "bigquery.capacityCommitments.list",
+ "bigquery.capacityCommitments.update",
+ "bigquery.config.get",
+ "bigquery.config.update",
+ "bigquery.connections.create",
+ "bigquery.connections.delegate",
+ "bigquery.connections.delete",
+ "bigquery.connections.get",
+ "bigquery.connections.getIamPolicy",
+ "bigquery.connections.list",
+ "bigquery.connections.setIamPolicy",
+ "bigquery.connections.update",
+ "bigquery.connections.updateTag",
+ "bigquery.connections.use",
+ "bigquery.dataPolicies.create",
+ "bigquery.dataPolicies.delete",
+ "bigquery.dataPolicies.get",
+ "bigquery.dataPolicies.getIamPolicy",
+ "bigquery.dataPolicies.list",
+ "bigquery.dataPolicies.maskedGet",
+ "bigquery.dataPolicies.setIamPolicy",
+ "bigquery.dataPolicies.update",
+ "bigquery.datasets.create",
+ "bigquery.datasets.createTagBinding",
+ "bigquery.datasets.delete",
+ "bigquery.datasets.deleteTagBinding",
+ "bigquery.datasets.get",
+ "bigquery.datasets.getIamPolicy",
+ "bigquery.datasets.link",
+ "bigquery.datasets.listTagBindings",
+ "bigquery.datasets.setIamPolicy",
+ "bigquery.datasets.update",
+ "bigquery.datasets.updateTag",
+ "bigquery.jobs.create",
+ "bigquery.jobs.delete",
+ "bigquery.jobs.get",
+ "bigquery.jobs.list",
+ "bigquery.jobs.listAll",
+ "bigquery.jobs.listExecutionMetadata",
+ "bigquery.jobs.update",
+ "bigquery.models.create",
+ "bigquery.models.delete",
+ "bigquery.models.export",
+ "bigquery.models.getData",
+ "bigquery.models.getMetadata",
+ "bigquery.models.list",
+ "bigquery.models.updateData",
+ "bigquery.models.updateMetadata",
+ "bigquery.models.updateTag",
+ "bigquery.readsessions.create",
+ "bigquery.readsessions.getData",
+ "bigquery.readsessions.update",
+ "bigquery.reservationAssignments.create",
+ "bigquery.reservationAssignments.delete",
+ "bigquery.reservationAssignments.list",
+ "bigquery.reservationAssignments.search",
+ "bigquery.reservations.create",
+ "bigquery.reservations.delete",
+ "bigquery.reservations.get",
+ "bigquery.reservations.list",
+ "bigquery.reservations.update",
+ "bigquery.routines.create",
+ "bigquery.routines.delete",
+ "bigquery.routines.get",
+ "bigquery.routines.list",
+ "bigquery.routines.update",
+ "bigquery.routines.updateTag",
+ "bigquery.rowAccessPolicies.create",
+ "bigquery.rowAccessPolicies.delete",
+ "bigquery.rowAccessPolicies.getFilteredData",
+ "bigquery.rowAccessPolicies.getIamPolicy",
+ "bigquery.rowAccessPolicies.list",
+ "bigquery.rowAccessPolicies.overrideTimeTravelRestrictions",
+ "bigquery.rowAccessPolicies.setIamPolicy",
+ "bigquery.rowAccessPolicies.update",
+ "bigquery.savedqueries.create",
+ "bigquery.savedqueries.delete",
+ "bigquery.savedqueries.get",
+ "bigquery.savedqueries.list",
+ "bigquery.savedqueries.update",
+ "bigquery.tables.create",
+ "bigquery.tables.createIndex",
+ "bigquery.tables.createSnapshot",
+ "bigquery.tables.delete",
+ "bigquery.tables.deleteIndex",
+ "bigquery.tables.deleteSnapshot",
+ "bigquery.tables.export",
+ "bigquery.tables.get",
+ "bigquery.tables.getData",
+ "bigquery.tables.getIamPolicy",
+ "bigquery.tables.list",
+ "bigquery.tables.restoreSnapshot",
+ "bigquery.tables.setCategory",
+ "bigquery.tables.setIamPolicy",
+ "bigquery.tables.update",
+ "bigquery.tables.updateData",
+ "bigquery.tables.updateTag",
+ "bigquery.transfers.get",
+ "bigquery.transfers.update",
+ "bigquerymigration.locations.get",
+ "bigquerymigration.locations.list",
+ "bigquerymigration.subtaskTypes.executeTask",
+ "bigquerymigration.subtasks.create",
+ "bigquerymigration.subtasks.executeTask",
+ "bigquerymigration.subtasks.get",
+ "bigquerymigration.subtasks.list",
+ "bigquerymigration.taskTypes.orchestrateTask",
+ "bigquerymigration.translation.translate",
+ "bigquerymigration.workflows.create",
+ "bigquerymigration.workflows.delete",
+ "bigquerymigration.workflows.get",
+ "bigquerymigration.workflows.list",
+ "bigquerymigration.workflows.orchestrateTask",
+ "bigquerymigration.workflows.update",
+ "bigquerymigration.workflows.writeLogs",
+ "bigtable.appProfiles.create",
+ "bigtable.appProfiles.delete",
+ "bigtable.appProfiles.get",
+ "bigtable.appProfiles.list",
+ "bigtable.appProfiles.update",
+ "bigtable.backups.create",
+ "bigtable.backups.delete",
+ "bigtable.backups.get",
+ "bigtable.backups.getIamPolicy",
+ "bigtable.backups.list",
+ "bigtable.backups.read",
+ "bigtable.backups.restore",
+ "bigtable.backups.setIamPolicy",
+ "bigtable.backups.update",
+ "bigtable.clusters.create",
+ "bigtable.clusters.delete",
+ "bigtable.clusters.get",
+ "bigtable.clusters.list",
+ "bigtable.clusters.update",
+ "bigtable.hotTablets.list",
+ "bigtable.instances.create",
+ "bigtable.instances.createTagBinding",
+ "bigtable.instances.delete",
+ "bigtable.instances.deleteTagBinding",
+ "bigtable.instances.get",
+ "bigtable.instances.getIamPolicy",
+ "bigtable.instances.list",
+ "bigtable.instances.listEffectiveTags",
+ "bigtable.instances.listTagBindings",
+ "bigtable.instances.ping",
+ "bigtable.instances.setIamPolicy",
+ "bigtable.instances.update",
+ "bigtable.keyvisualizer.get",
+ "bigtable.keyvisualizer.list",
+ "bigtable.locations.list",
+ "bigtable.tables.checkConsistency",
+ "bigtable.tables.create",
+ "bigtable.tables.delete",
+ "bigtable.tables.generateConsistencyToken",
+ "bigtable.tables.get",
+ "bigtable.tables.getIamPolicy",
+ "bigtable.tables.list",
+ "bigtable.tables.mutateRows",
+ "bigtable.tables.readRows",
+ "bigtable.tables.sampleRowKeys",
+ "bigtable.tables.setIamPolicy",
+ "bigtable.tables.undelete",
+ "bigtable.tables.update",
+ "billing.resourceCosts.get",
+ "binaryauthorization.attestors.create",
+ "binaryauthorization.attestors.delete",
+ "binaryauthorization.attestors.get",
+ "binaryauthorization.attestors.getIamPolicy",
+ "binaryauthorization.attestors.list",
+ "binaryauthorization.attestors.setIamPolicy",
+ "binaryauthorization.attestors.update",
+ "binaryauthorization.attestors.verifyImageAttested",
+ "binaryauthorization.continuousValidationConfig.get",
+ "binaryauthorization.continuousValidationConfig.getIamPolicy",
+ "binaryauthorization.continuousValidationConfig.setIamPolicy",
+ "binaryauthorization.continuousValidationConfig.update",
+ "binaryauthorization.platformPolicies.create",
+ "binaryauthorization.platformPolicies.delete",
+ "binaryauthorization.platformPolicies.evaluatePolicy",
+ "binaryauthorization.platformPolicies.get",
+ "binaryauthorization.platformPolicies.list",
+ "binaryauthorization.platformPolicies.replace",
+ "binaryauthorization.policy.evaluatePolicy",
+ "binaryauthorization.policy.get",
+ "binaryauthorization.policy.getIamPolicy",
+ "binaryauthorization.policy.setIamPolicy",
+ "binaryauthorization.policy.update",
+ "carestudio.patients.get",
+ "carestudio.patients.list",
+ "certificatemanager.certissuanceconfigs.create",
+ "certificatemanager.certissuanceconfigs.delete",
+ "certificatemanager.certissuanceconfigs.get",
+ "certificatemanager.certissuanceconfigs.list",
+ "certificatemanager.certissuanceconfigs.update",
+ "certificatemanager.certissuanceconfigs.use",
+ "certificatemanager.certmapentries.create",
+ "certificatemanager.certmapentries.delete",
+ "certificatemanager.certmapentries.get",
+ "certificatemanager.certmapentries.getIamPolicy",
+ "certificatemanager.certmapentries.list",
+ "certificatemanager.certmapentries.setIamPolicy",
+ "certificatemanager.certmapentries.update",
+ "certificatemanager.certmaps.create",
+ "certificatemanager.certmaps.delete",
+ "certificatemanager.certmaps.get",
+ "certificatemanager.certmaps.getIamPolicy",
+ "certificatemanager.certmaps.list",
+ "certificatemanager.certmaps.setIamPolicy",
+ "certificatemanager.certmaps.update",
+ "certificatemanager.certmaps.use",
+ "certificatemanager.certs.create",
+ "certificatemanager.certs.delete",
+ "certificatemanager.certs.get",
+ "certificatemanager.certs.getIamPolicy",
+ "certificatemanager.certs.list",
+ "certificatemanager.certs.setIamPolicy",
+ "certificatemanager.certs.update",
+ "certificatemanager.certs.use",
+ "certificatemanager.dnsauthorizations.create",
+ "certificatemanager.dnsauthorizations.delete",
+ "certificatemanager.dnsauthorizations.get",
+ "certificatemanager.dnsauthorizations.getIamPolicy",
+ "certificatemanager.dnsauthorizations.list",
+ "certificatemanager.dnsauthorizations.setIamPolicy",
+ "certificatemanager.dnsauthorizations.update",
+ "certificatemanager.dnsauthorizations.use",
+ "certificatemanager.locations.get",
+ "certificatemanager.locations.list",
+ "certificatemanager.operations.cancel",
+ "certificatemanager.operations.delete",
+ "certificatemanager.operations.get",
+ "certificatemanager.operations.list",
+ "chat.bots.get",
+ "chat.bots.update",
+ "chronicle.dashboards.copy",
+ "chronicle.dashboards.create",
+ "chronicle.dashboards.delete",
+ "chronicle.dashboards.get",
+ "chronicle.dashboards.list",
+ "chronicle.multitenantDirectories.get",
+ "clientauthconfig.brands.create",
+ "clientauthconfig.brands.delete",
+ "clientauthconfig.brands.get",
+ "clientauthconfig.brands.list",
+ "clientauthconfig.brands.update",
+ "clientauthconfig.clients.create",
+ "clientauthconfig.clients.createSecret",
+ "clientauthconfig.clients.delete",
+ "clientauthconfig.clients.get",
+ "clientauthconfig.clients.getWithSecret",
+ "clientauthconfig.clients.list",
+ "clientauthconfig.clients.listWithSecrets",
+ "clientauthconfig.clients.undelete",
+ "clientauthconfig.clients.update",
+ "cloudasset.assets.analyzeIamPolicy",
+ "cloudasset.assets.analyzeMove",
+ "cloudasset.assets.exportAccessLevel",
+ "cloudasset.assets.exportAccessPolicy",
+ "cloudasset.assets.exportAiplatformBatchPredictionJobs",
+ "cloudasset.assets.exportAiplatformCustomJobs",
+ "cloudasset.assets.exportAiplatformDataLabelingJobs",
+ "cloudasset.assets.exportAiplatformDatasets",
+ "cloudasset.assets.exportAiplatformEndpoints",
+ "cloudasset.assets.exportAiplatformHyperparameterTuningJobs",
+ "cloudasset.assets.exportAiplatformMetadataStores",
+ "cloudasset.assets.exportAiplatformModelDeploymentMonitoringJobs",
+ "cloudasset.assets.exportAiplatformModels",
+ "cloudasset.assets.exportAiplatformPipelineJobs",
+ "cloudasset.assets.exportAiplatformSpecialistPools",
+ "cloudasset.assets.exportAiplatformTrainingPipelines",
+ "cloudasset.assets.exportAllAccessPolicy",
+ "cloudasset.assets.exportAnthosConnectedCluster",
+ "cloudasset.assets.exportAnthosedgeCluster",
+ "cloudasset.assets.exportApigatewayApi",
+ "cloudasset.assets.exportApigatewayApiConfig",
+ "cloudasset.assets.exportApigatewayGateway",
+ "cloudasset.assets.exportApikeysKeys",
+ "cloudasset.assets.exportAppengineApplications",
+ "cloudasset.assets.exportAppengineServices",
+ "cloudasset.assets.exportAppengineVersions",
+ "cloudasset.assets.exportArtifactregistryDockerImages",
+ "cloudasset.assets.exportArtifactregistryRepositories",
+ "cloudasset.assets.exportAssuredWorkloadsWorkloads",
+ "cloudasset.assets.exportBeyondCorpApiGateways",
+ "cloudasset.assets.exportBeyondCorpAppConnections",
+ "cloudasset.assets.exportBeyondCorpAppConnectors",
+ "cloudasset.assets.exportBeyondCorpClientConnectorServices",
+ "cloudasset.assets.exportBeyondCorpClientGateways",
+ "cloudasset.assets.exportBigqueryDatasets",
+ "cloudasset.assets.exportBigqueryModels",
+ "cloudasset.assets.exportBigqueryTables",
+ "cloudasset.assets.exportBigtableAppProfile",
+ "cloudasset.assets.exportBigtableBackup",
+ "cloudasset.assets.exportBigtableCluster",
+ "cloudasset.assets.exportBigtableInstance",
+ "cloudasset.assets.exportBigtableTable",
+ "cloudasset.assets.exportCloudAssetFeeds",
+ "cloudasset.assets.exportCloudDeployDeliveryPipelines",
+ "cloudasset.assets.exportCloudDeployReleases",
+ "cloudasset.assets.exportCloudDeployRollouts",
+ "cloudasset.assets.exportCloudDeployTargets",
+ "cloudasset.assets.exportCloudDocumentAIEvaluation",
+ "cloudasset.assets.exportCloudDocumentAIHumanReviewConfig",
+ "cloudasset.assets.exportCloudDocumentAILabelerPool",
+ "cloudasset.assets.exportCloudDocumentAIProcessor",
+ "cloudasset.assets.exportCloudDocumentAIProcessorVersion",
+ "cloudasset.assets.exportCloudbillingBillingAccounts",
+ "cloudasset.assets.exportCloudbillingProjectBillingInfos",
+ "cloudasset.assets.exportCloudfunctionsFunctions",
+ "cloudasset.assets.exportCloudfunctionsGen2Functions",
+ "cloudasset.assets.exportCloudkmsCryptoKeyVersions",
+ "cloudasset.assets.exportCloudkmsCryptoKeys",
+ "cloudasset.assets.exportCloudkmsEkmConnections",
+ "cloudasset.assets.exportCloudkmsImportJobs",
+ "cloudasset.assets.exportCloudkmsKeyRings",
+ "cloudasset.assets.exportCloudmemcacheInstances",
+ "cloudasset.assets.exportCloudresourcemanagerFolders",
+ "cloudasset.assets.exportCloudresourcemanagerOrganizations",
+ "cloudasset.assets.exportCloudresourcemanagerProjects",
+ "cloudasset.assets.exportCloudresourcemanagerTagBindings",
+ "cloudasset.assets.exportCloudresourcemanagerTagKeys",
+ "cloudasset.assets.exportCloudresourcemanagerTagValues",
+ "cloudasset.assets.exportComposerEnvironments",
+ "cloudasset.assets.exportComputeAddress",
+ "cloudasset.assets.exportComputeAutoscalers",
+ "cloudasset.assets.exportComputeBackendBuckets",
+ "cloudasset.assets.exportComputeBackendServices",
+ "cloudasset.assets.exportComputeCommitments",
+ "cloudasset.assets.exportComputeDisks",
+ "cloudasset.assets.exportComputeExternalVpnGateways",
+ "cloudasset.assets.exportComputeFirewallPolicies",
+ "cloudasset.assets.exportComputeFirewalls",
+ "cloudasset.assets.exportComputeForwardingRules",
+ "cloudasset.assets.exportComputeGlobalAddress",
+ "cloudasset.assets.exportComputeGlobalForwardingRules",
+ "cloudasset.assets.exportComputeHealthChecks",
+ "cloudasset.assets.exportComputeHttpHealthChecks",
+ "cloudasset.assets.exportComputeHttpsHealthChecks",
+ "cloudasset.assets.exportComputeImages",
+ "cloudasset.assets.exportComputeInstanceGroupManagers",
+ "cloudasset.assets.exportComputeInstanceGroups",
+ "cloudasset.assets.exportComputeInstanceTemplates",
+ "cloudasset.assets.exportComputeInstances",
+ "cloudasset.assets.exportComputeInterconnect",
+ "cloudasset.assets.exportComputeInterconnectAttachment",
+ "cloudasset.assets.exportComputeLicenses",
+ "cloudasset.assets.exportComputeNetworkEndpointGroups",
+ "cloudasset.assets.exportComputeNetworks",
+ "cloudasset.assets.exportComputeNodeGroups",
+ "cloudasset.assets.exportComputeNodeTemplates",
+ "cloudasset.assets.exportComputePacketMirrorings",
+ "cloudasset.assets.exportComputeProjects",
+ "cloudasset.assets.exportComputeRegionAutoscaler",
+ "cloudasset.assets.exportComputeRegionBackendServices",
+ "cloudasset.assets.exportComputeRegionDisk",
+ "cloudasset.assets.exportComputeRegionInstanceGroup",
+ "cloudasset.assets.exportComputeRegionInstanceGroupManager",
+ "cloudasset.assets.exportComputeReservations",
+ "cloudasset.assets.exportComputeResourcePolicies",
+ "cloudasset.assets.exportComputeRouters",
+ "cloudasset.assets.exportComputeRoutes",
+ "cloudasset.assets.exportComputeSecurityPolicy",
+ "cloudasset.assets.exportComputeServiceAttachments",
+ "cloudasset.assets.exportComputeSnapshots",
+ "cloudasset.assets.exportComputeSslCertificates",
+ "cloudasset.assets.exportComputeSslPolicies",
+ "cloudasset.assets.exportComputeSubnetworks",
+ "cloudasset.assets.exportComputeTargetHttpProxies",
+ "cloudasset.assets.exportComputeTargetHttpsProxies",
+ "cloudasset.assets.exportComputeTargetInstances",
+ "cloudasset.assets.exportComputeTargetPools",
+ "cloudasset.assets.exportComputeTargetSslProxies",
+ "cloudasset.assets.exportComputeTargetTcpProxies",
+ "cloudasset.assets.exportComputeTargetVpnGateways",
+ "cloudasset.assets.exportComputeUrlMaps",
+ "cloudasset.assets.exportComputeVpnGateways",
+ "cloudasset.assets.exportComputeVpnTunnels",
+ "cloudasset.assets.exportConnectorsConnections",
+ "cloudasset.assets.exportConnectorsConnectorVersions",
+ "cloudasset.assets.exportConnectorsConnectors",
+ "cloudasset.assets.exportConnectorsProviders",
+ "cloudasset.assets.exportConnectorsRuntimeConfigs",
+ "cloudasset.assets.exportContainerAppsDeployment",
+ "cloudasset.assets.exportContainerAppsReplicaSets",
+ "cloudasset.assets.exportContainerBatchJobs",
+ "cloudasset.assets.exportContainerClusterrole",
+ "cloudasset.assets.exportContainerClusterrolebinding",
+ "cloudasset.assets.exportContainerClusters",
+ "cloudasset.assets.exportContainerExtensionsIngresses",
+ "cloudasset.assets.exportContainerJobs",
+ "cloudasset.assets.exportContainerNamespace",
+ "cloudasset.assets.exportContainerNetworkingIngresses",
+ "cloudasset.assets.exportContainerNetworkingNetworkPolicies",
+ "cloudasset.assets.exportContainerNode",
+ "cloudasset.assets.exportContainerNodepool",
+ "cloudasset.assets.exportContainerPod",
+ "cloudasset.assets.exportContainerReplicaSets",
+ "cloudasset.assets.exportContainerRole",
+ "cloudasset.assets.exportContainerRolebinding",
+ "cloudasset.assets.exportContainerServices",
+ "cloudasset.assets.exportContainerregistryImage",
+ "cloudasset.assets.exportDataMigrationConnectionProfiles",
+ "cloudasset.assets.exportDataMigrationMigrationJobs",
+ "cloudasset.assets.exportDataflowJobs",
+ "cloudasset.assets.exportDatafusionInstance",
+ "cloudasset.assets.exportDataplexAssets",
+ "cloudasset.assets.exportDataplexLakes",
+ "cloudasset.assets.exportDataplexTasks",
+ "cloudasset.assets.exportDataplexZones",
+ "cloudasset.assets.exportDataprocAutoscalingPolicies",
+ "cloudasset.assets.exportDataprocBatches",
+ "cloudasset.assets.exportDataprocClusters",
+ "cloudasset.assets.exportDataprocJobs",
+ "cloudasset.assets.exportDataprocSessions",
+ "cloudasset.assets.exportDataprocWorkflowTemplates",
+ "cloudasset.assets.exportDatastreamConnectionProfile",
+ "cloudasset.assets.exportDatastreamPrivateConnection",
+ "cloudasset.assets.exportDatastreamStream",
+ "cloudasset.assets.exportDialogflowAgents",
+ "cloudasset.assets.exportDialogflowConversationProfiles",
+ "cloudasset.assets.exportDialogflowKnowledgeBases",
+ "cloudasset.assets.exportDialogflowLocationSettings",
+ "cloudasset.assets.exportDlpDeidentifyTemplates",
+ "cloudasset.assets.exportDlpDlpJobs",
+ "cloudasset.assets.exportDlpInspectTemplates",
+ "cloudasset.assets.exportDlpJobTriggers",
+ "cloudasset.assets.exportDlpStoredInfoTypes",
+ "cloudasset.assets.exportDnsManagedZones",
+ "cloudasset.assets.exportDnsPolicies",
+ "cloudasset.assets.exportDomainsRegistrations",
+ "cloudasset.assets.exportEventarcTriggers",
+ "cloudasset.assets.exportFileBackups",
+ "cloudasset.assets.exportFileInstances",
+ "cloudasset.assets.exportFirebaseAppInfos",
+ "cloudasset.assets.exportFirebaseProjects",
+ "cloudasset.assets.exportFirestoreDatabases",
+ "cloudasset.assets.exportGKEHubFeatures",
+ "cloudasset.assets.exportGKEHubMemberships",
+ "cloudasset.assets.exportGameservicesGameServerClusters",
+ "cloudasset.assets.exportGameservicesGameServerConfigs",
+ "cloudasset.assets.exportGameservicesGameServerDeployments",
+ "cloudasset.assets.exportGameservicesRealms",
+ "cloudasset.assets.exportGkeBackupBackupPlans",
+ "cloudasset.assets.exportGkeBackupBackups",
+ "cloudasset.assets.exportGkeBackupRestorePlans",
+ "cloudasset.assets.exportGkeBackupRestores",
+ "cloudasset.assets.exportGkeBackupVolumeBackups",
+ "cloudasset.assets.exportGkeBackupVolumeRestores",
+ "cloudasset.assets.exportHealthcareConsentStores",
+ "cloudasset.assets.exportHealthcareDatasets",
+ "cloudasset.assets.exportHealthcareDicomStores",
+ "cloudasset.assets.exportHealthcareFhirStores",
+ "cloudasset.assets.exportHealthcareHl7V2Stores",
+ "cloudasset.assets.exportIamPolicy",
+ "cloudasset.assets.exportIamRoles",
+ "cloudasset.assets.exportIamServiceAccountKeys",
+ "cloudasset.assets.exportIamServiceAccounts",
+ "cloudasset.assets.exportIapTunnel",
+ "cloudasset.assets.exportIapTunnelInstances",
+ "cloudasset.assets.exportIapTunnelZones",
+ "cloudasset.assets.exportIapWeb",
+ "cloudasset.assets.exportIapWebServiceVersion",
+ "cloudasset.assets.exportIapWebServices",
+ "cloudasset.assets.exportIapWebType",
+ "cloudasset.assets.exportIdsEndpoints",
+ "cloudasset.assets.exportIntegrationsAuthConfigs",
+ "cloudasset.assets.exportIntegrationsCertificates",
+ "cloudasset.assets.exportIntegrationsExecutions",
+ "cloudasset.assets.exportIntegrationsIntegrationVersions",
+ "cloudasset.assets.exportIntegrationsIntegrations",
+ "cloudasset.assets.exportIntegrationsSfdcChannels",
+ "cloudasset.assets.exportIntegrationsSfdcInstances",
+ "cloudasset.assets.exportIntegrationsSuspensions",
+ "cloudasset.assets.exportLoggingLogMetrics",
+ "cloudasset.assets.exportLoggingLogSinks",
+ "cloudasset.assets.exportManagedidentitiesDomain",
+ "cloudasset.assets.exportMetastoreBackups",
+ "cloudasset.assets.exportMetastoreMetadataImports",
+ "cloudasset.assets.exportMetastoreServices",
+ "cloudasset.assets.exportMonitoringAlertPolicies",
+ "cloudasset.assets.exportNetworkConnectivityHubs",
+ "cloudasset.assets.exportNetworkConnectivitySpokes",
+ "cloudasset.assets.exportNetworkManagementConnectivityTests",
+ "cloudasset.assets.exportNetworkServicesEndpointPolicies",
+ "cloudasset.assets.exportNetworkServicesGateways",
+ "cloudasset.assets.exportNetworkServicesGrpcRoutes",
+ "cloudasset.assets.exportNetworkServicesHttpRoutes",
+ "cloudasset.assets.exportNetworkServicesMeshes",
+ "cloudasset.assets.exportNetworkServicesServiceBindings",
+ "cloudasset.assets.exportNetworkServicesTcpRoutes",
+ "cloudasset.assets.exportNetworkServicesTlsRoutes",
+ "cloudasset.assets.exportOSConfigOSPolicyAssignmentReports",
+ "cloudasset.assets.exportOSConfigOSPolicyAssignments",
+ "cloudasset.assets.exportOSConfigVulnerabilityReports",
+ "cloudasset.assets.exportOSInventories",
+ "cloudasset.assets.exportOrgPolicy",
+ "cloudasset.assets.exportPatchDeployments",
+ "cloudasset.assets.exportPubsubSnapshots",
+ "cloudasset.assets.exportPubsubSubscriptions",
+ "cloudasset.assets.exportPubsubTopics",
+ "cloudasset.assets.exportRedisInstances",
+ "cloudasset.assets.exportResource",
+ "cloudasset.assets.exportSecretManagerSecretVersions",
+ "cloudasset.assets.exportSecretManagerSecrets",
+ "cloudasset.assets.exportServiceDirectoryNamespaces",
+ "cloudasset.assets.exportServicePerimeter",
+ "cloudasset.assets.exportServiceconsumermanagementConsumerProperty",
+ "cloudasset.assets.exportServiceconsumermanagementConsumerQuotaLimits",
+ "cloudasset.assets.exportServiceconsumermanagementConsumers",
+ "cloudasset.assets.exportServiceconsumermanagementProducerOverrides",
+ "cloudasset.assets.exportServiceconsumermanagementTenancyUnits",
+ "cloudasset.assets.exportServiceconsumermanagementVisibility",
+ "cloudasset.assets.exportServicemanagementServices",
+ "cloudasset.assets.exportServiceusageAdminOverrides",
+ "cloudasset.assets.exportServiceusageConsumerOverrides",
+ "cloudasset.assets.exportServiceusageServices",
+ "cloudasset.assets.exportSpannerBackups",
+ "cloudasset.assets.exportSpannerDatabases",
+ "cloudasset.assets.exportSpannerInstances",
+ "cloudasset.assets.exportSpeakerIdPhrases",
+ "cloudasset.assets.exportSpeakerIdSettings",
+ "cloudasset.assets.exportSpeakerIdSpeakers",
+ "cloudasset.assets.exportSpeechCustomClasses",
+ "cloudasset.assets.exportSpeechPhraseSets",
+ "cloudasset.assets.exportSqladminBackupRuns",
+ "cloudasset.assets.exportSqladminInstances",
+ "cloudasset.assets.exportStorageBuckets",
+ "cloudasset.assets.exportTpuNodes",
+ "cloudasset.assets.exportVpcaccessConnector",
+ "cloudasset.assets.listAccessLevel",
+ "cloudasset.assets.listAccessPolicy",
+ "cloudasset.assets.listAiplatformBatchPredictionJobs",
+ "cloudasset.assets.listAiplatformCustomJobs",
+ "cloudasset.assets.listAiplatformDataLabelingJobs",
+ "cloudasset.assets.listAiplatformDatasets",
+ "cloudasset.assets.listAiplatformEndpoints",
+ "cloudasset.assets.listAiplatformHyperparameterTuningJobs",
+ "cloudasset.assets.listAiplatformMetadataStores",
+ "cloudasset.assets.listAiplatformModelDeploymentMonitoringJobs",
+ "cloudasset.assets.listAiplatformModels",
+ "cloudasset.assets.listAiplatformPipelineJobs",
+ "cloudasset.assets.listAiplatformSpecialistPools",
+ "cloudasset.assets.listAiplatformTrainingPipelines",
+ "cloudasset.assets.listAllAccessPolicy",
+ "cloudasset.assets.listAnthosConnectedCluster",
+ "cloudasset.assets.listAnthosedgeCluster",
+ "cloudasset.assets.listApigatewayApi",
+ "cloudasset.assets.listApigatewayApiConfig",
+ "cloudasset.assets.listApigatewayGateway",
+ "cloudasset.assets.listApikeysKeys",
+ "cloudasset.assets.listAppengineApplications",
+ "cloudasset.assets.listAppengineServices",
+ "cloudasset.assets.listAppengineVersions",
+ "cloudasset.assets.listArtifactregistryDockerImages",
+ "cloudasset.assets.listArtifactregistryRepositories",
+ "cloudasset.assets.listAssuredWorkloadsWorkloads",
+ "cloudasset.assets.listBeyondCorpApiGateways",
+ "cloudasset.assets.listBeyondCorpAppConnections",
+ "cloudasset.assets.listBeyondCorpAppConnectors",
+ "cloudasset.assets.listBeyondCorpClientConnectorServices",
+ "cloudasset.assets.listBeyondCorpClientGateways",
+ "cloudasset.assets.listBigqueryDatasets",
+ "cloudasset.assets.listBigqueryModels",
+ "cloudasset.assets.listBigqueryTables",
+ "cloudasset.assets.listBigtableAppProfile",
+ "cloudasset.assets.listBigtableBackup",
+ "cloudasset.assets.listBigtableCluster",
+ "cloudasset.assets.listBigtableInstance",
+ "cloudasset.assets.listBigtableTable",
+ "cloudasset.assets.listCloudAssetFeeds",
+ "cloudasset.assets.listCloudDeployDeliveryPipelines",
+ "cloudasset.assets.listCloudDeployReleases",
+ "cloudasset.assets.listCloudDeployRollouts",
+ "cloudasset.assets.listCloudDeployTargets",
+ "cloudasset.assets.listCloudDocumentAIEvaluation",
+ "cloudasset.assets.listCloudDocumentAIHumanReviewConfig",
+ "cloudasset.assets.listCloudDocumentAILabelerPool",
+ "cloudasset.assets.listCloudDocumentAIProcessor",
+ "cloudasset.assets.listCloudDocumentAIProcessorVersion",
+ "cloudasset.assets.listCloudbillingBillingAccounts",
+ "cloudasset.assets.listCloudbillingProjectBillingInfos",
+ "cloudasset.assets.listCloudfunctionsFunctions",
+ "cloudasset.assets.listCloudfunctionsGen2Functions",
+ "cloudasset.assets.listCloudkmsCryptoKeyVersions",
+ "cloudasset.assets.listCloudkmsCryptoKeys",
+ "cloudasset.assets.listCloudkmsEkmConnections",
+ "cloudasset.assets.listCloudkmsImportJobs",
+ "cloudasset.assets.listCloudkmsKeyRings",
+ "cloudasset.assets.listCloudmemcacheInstances",
+ "cloudasset.assets.listCloudresourcemanagerFolders",
+ "cloudasset.assets.listCloudresourcemanagerOrganizations",
+ "cloudasset.assets.listCloudresourcemanagerProjects",
+ "cloudasset.assets.listCloudresourcemanagerTagBindings",
+ "cloudasset.assets.listCloudresourcemanagerTagKeys",
+ "cloudasset.assets.listCloudresourcemanagerTagValues",
+ "cloudasset.assets.listComposerEnvironments",
+ "cloudasset.assets.listComputeAddress",
+ "cloudasset.assets.listComputeAutoscalers",
+ "cloudasset.assets.listComputeBackendBuckets",
+ "cloudasset.assets.listComputeBackendServices",
+ "cloudasset.assets.listComputeCommitments",
+ "cloudasset.assets.listComputeDisks",
+ "cloudasset.assets.listComputeExternalVpnGateways",
+ "cloudasset.assets.listComputeFirewallPolicies",
+ "cloudasset.assets.listComputeFirewalls",
+ "cloudasset.assets.listComputeForwardingRules",
+ "cloudasset.assets.listComputeGlobalAddress",
+ "cloudasset.assets.listComputeGlobalForwardingRules",
+ "cloudasset.assets.listComputeHealthChecks",
+ "cloudasset.assets.listComputeHttpHealthChecks",
+ "cloudasset.assets.listComputeHttpsHealthChecks",
+ "cloudasset.assets.listComputeImages",
+ "cloudasset.assets.listComputeInstanceGroupManagers",
+ "cloudasset.assets.listComputeInstanceGroups",
+ "cloudasset.assets.listComputeInstanceTemplates",
+ "cloudasset.assets.listComputeInstances",
+ "cloudasset.assets.listComputeInterconnect",
+ "cloudasset.assets.listComputeInterconnectAttachment",
+ "cloudasset.assets.listComputeLicenses",
+ "cloudasset.assets.listComputeNetworkEndpointGroups",
+ "cloudasset.assets.listComputeNetworks",
+ "cloudasset.assets.listComputeNodeGroups",
+ "cloudasset.assets.listComputeNodeTemplates",
+ "cloudasset.assets.listComputePacketMirrorings",
+ "cloudasset.assets.listComputeProjects",
+ "cloudasset.assets.listComputeRegionAutoscaler",
+ "cloudasset.assets.listComputeRegionBackendServices",
+ "cloudasset.assets.listComputeRegionDisk",
+ "cloudasset.assets.listComputeRegionInstanceGroup",
+ "cloudasset.assets.listComputeRegionInstanceGroupManager",
+ "cloudasset.assets.listComputeReservations",
+ "cloudasset.assets.listComputeResourcePolicies",
+ "cloudasset.assets.listComputeRouters",
+ "cloudasset.assets.listComputeRoutes",
+ "cloudasset.assets.listComputeSecurityPolicy",
+ "cloudasset.assets.listComputeServiceAttachments",
+ "cloudasset.assets.listComputeSnapshots",
+ "cloudasset.assets.listComputeSslCertificates",
+ "cloudasset.assets.listComputeSslPolicies",
+ "cloudasset.assets.listComputeSubnetworks",
+ "cloudasset.assets.listComputeTargetHttpProxies",
+ "cloudasset.assets.listComputeTargetHttpsProxies",
+ "cloudasset.assets.listComputeTargetInstances",
+ "cloudasset.assets.listComputeTargetPools",
+ "cloudasset.assets.listComputeTargetSslProxies",
+ "cloudasset.assets.listComputeTargetTcpProxies",
+ "cloudasset.assets.listComputeTargetVpnGateways",
+ "cloudasset.assets.listComputeUrlMaps",
+ "cloudasset.assets.listComputeVpnGateways",
+ "cloudasset.assets.listComputeVpnTunnels",
+ "cloudasset.assets.listConnectorsConnections",
+ "cloudasset.assets.listConnectorsConnectorVersions",
+ "cloudasset.assets.listConnectorsConnectors",
+ "cloudasset.assets.listConnectorsProviders",
+ "cloudasset.assets.listConnectorsRuntimeConfigs",
+ "cloudasset.assets.listContainerAppsDeployment",
+ "cloudasset.assets.listContainerAppsReplicaSets",
+ "cloudasset.assets.listContainerBatchJobs",
+ "cloudasset.assets.listContainerClusterrole",
+ "cloudasset.assets.listContainerClusterrolebinding",
+ "cloudasset.assets.listContainerClusters",
+ "cloudasset.assets.listContainerExtensionsIngresses",
+ "cloudasset.assets.listContainerJobs",
+ "cloudasset.assets.listContainerNamespace",
+ "cloudasset.assets.listContainerNetworkingIngresses",
+ "cloudasset.assets.listContainerNetworkingNetworkPolicies",
+ "cloudasset.assets.listContainerNode",
+ "cloudasset.assets.listContainerNodepool",
+ "cloudasset.assets.listContainerPod",
+ "cloudasset.assets.listContainerReplicaSets",
+ "cloudasset.assets.listContainerRole",
+ "cloudasset.assets.listContainerRolebinding",
+ "cloudasset.assets.listContainerServices",
+ "cloudasset.assets.listContainerregistryImage",
+ "cloudasset.assets.listDataMigrationConnectionProfiles",
+ "cloudasset.assets.listDataMigrationMigrationJobs",
+ "cloudasset.assets.listDataflowJobs",
+ "cloudasset.assets.listDatafusionInstance",
+ "cloudasset.assets.listDataplexAssets",
+ "cloudasset.assets.listDataplexLakes",
+ "cloudasset.assets.listDataplexTasks",
+ "cloudasset.assets.listDataplexZones",
+ "cloudasset.assets.listDataprocAutoscalingPolicies",
+ "cloudasset.assets.listDataprocBatches",
+ "cloudasset.assets.listDataprocClusters",
+ "cloudasset.assets.listDataprocJobs",
+ "cloudasset.assets.listDataprocSessions",
+ "cloudasset.assets.listDataprocWorkflowTemplates",
+ "cloudasset.assets.listDatastreamConnectionProfile",
+ "cloudasset.assets.listDatastreamPrivateConnection",
+ "cloudasset.assets.listDatastreamStream",
+ "cloudasset.assets.listDialogflowAgents",
+ "cloudasset.assets.listDialogflowConversationProfiles",
+ "cloudasset.assets.listDialogflowKnowledgeBases",
+ "cloudasset.assets.listDialogflowLocationSettings",
+ "cloudasset.assets.listDlpDeidentifyTemplates",
+ "cloudasset.assets.listDlpDlpJobs",
+ "cloudasset.assets.listDlpInspectTemplates",
+ "cloudasset.assets.listDlpJobTriggers",
+ "cloudasset.assets.listDlpStoredInfoTypes",
+ "cloudasset.assets.listDnsManagedZones",
+ "cloudasset.assets.listDnsPolicies",
+ "cloudasset.assets.listDomainsRegistrations",
+ "cloudasset.assets.listEventarcTriggers",
+ "cloudasset.assets.listFileBackups",
+ "cloudasset.assets.listFileInstances",
+ "cloudasset.assets.listFirebaseAppInfos",
+ "cloudasset.assets.listFirebaseProjects",
+ "cloudasset.assets.listFirestoreDatabases",
+ "cloudasset.assets.listGKEHubFeatures",
+ "cloudasset.assets.listGKEHubMemberships",
+ "cloudasset.assets.listGameservicesGameServerClusters",
+ "cloudasset.assets.listGameservicesGameServerConfigs",
+ "cloudasset.assets.listGameservicesGameServerDeployments",
+ "cloudasset.assets.listGameservicesRealms",
+ "cloudasset.assets.listGkeBackupBackupPlans",
+ "cloudasset.assets.listGkeBackupBackups",
+ "cloudasset.assets.listGkeBackupRestorePlans",
+ "cloudasset.assets.listGkeBackupRestores",
+ "cloudasset.assets.listGkeBackupVolumeBackups",
+ "cloudasset.assets.listGkeBackupVolumeRestores",
+ "cloudasset.assets.listHealthcareConsentStores",
+ "cloudasset.assets.listHealthcareDatasets",
+ "cloudasset.assets.listHealthcareDicomStores",
+ "cloudasset.assets.listHealthcareFhirStores",
+ "cloudasset.assets.listHealthcareHl7V2Stores",
+ "cloudasset.assets.listIamPolicy",
+ "cloudasset.assets.listIamRoles",
+ "cloudasset.assets.listIamServiceAccountKeys",
+ "cloudasset.assets.listIamServiceAccounts",
+ "cloudasset.assets.listIapTunnel",
+ "cloudasset.assets.listIapTunnelInstances",
+ "cloudasset.assets.listIapTunnelZones",
+ "cloudasset.assets.listIapWeb",
+ "cloudasset.assets.listIapWebServiceVersion",
+ "cloudasset.assets.listIapWebServices",
+ "cloudasset.assets.listIapWebType",
+ "cloudasset.assets.listIdsEndpoints",
+ "cloudasset.assets.listIntegrationsAuthConfigs",
+ "cloudasset.assets.listIntegrationsCertificates",
+ "cloudasset.assets.listIntegrationsExecutions",
+ "cloudasset.assets.listIntegrationsIntegrationVersions",
+ "cloudasset.assets.listIntegrationsIntegrations",
+ "cloudasset.assets.listIntegrationsSfdcChannels",
+ "cloudasset.assets.listIntegrationsSfdcInstances",
+ "cloudasset.assets.listIntegrationsSuspensions",
+ "cloudasset.assets.listLoggingLogMetrics",
+ "cloudasset.assets.listLoggingLogSinks",
+ "cloudasset.assets.listManagedidentitiesDomain",
+ "cloudasset.assets.listMetastoreBackups",
+ "cloudasset.assets.listMetastoreMetadataImports",
+ "cloudasset.assets.listMetastoreServices",
+ "cloudasset.assets.listMonitoringAlertPolicies",
+ "cloudasset.assets.listNetworkConnectivityHubs",
+ "cloudasset.assets.listNetworkConnectivitySpokes",
+ "cloudasset.assets.listNetworkManagementConnectivityTests",
+ "cloudasset.assets.listNetworkServicesEndpointPolicies",
+ "cloudasset.assets.listNetworkServicesGateways",
+ "cloudasset.assets.listNetworkServicesGrpcRoutes",
+ "cloudasset.assets.listNetworkServicesHttpRoutes",
+ "cloudasset.assets.listNetworkServicesMeshes",
+ "cloudasset.assets.listNetworkServicesServiceBindings",
+ "cloudasset.assets.listNetworkServicesTcpRoutes",
+ "cloudasset.assets.listNetworkServicesTlsRoutes",
+ "cloudasset.assets.listOSConfigOSPolicyAssignmentReports",
+ "cloudasset.assets.listOSConfigOSPolicyAssignments",
+ "cloudasset.assets.listOSConfigVulnerabilityReports",
+ "cloudasset.assets.listOSInventories",
+ "cloudasset.assets.listOrgPolicy",
+ "cloudasset.assets.listPatchDeployments",
+ "cloudasset.assets.listPubsubSnapshots",
+ "cloudasset.assets.listPubsubSubscriptions",
+ "cloudasset.assets.listPubsubTopics",
+ "cloudasset.assets.listRedisInstances",
+ "cloudasset.assets.listResource",
+ "cloudasset.assets.listRunDomainMapping",
+ "cloudasset.assets.listRunRevision",
+ "cloudasset.assets.listRunService",
+ "cloudasset.assets.listSecretManagerSecretVersions",
+ "cloudasset.assets.listSecretManagerSecrets",
+ "cloudasset.assets.listServiceDirectoryNamespaces",
+ "cloudasset.assets.listServicePerimeter",
+ "cloudasset.assets.listServiceconsumermanagementConsumerProperty",
+ "cloudasset.assets.listServiceconsumermanagementConsumerQuotaLimits",
+ "cloudasset.assets.listServiceconsumermanagementConsumers",
+ "cloudasset.assets.listServiceconsumermanagementProducerOverrides",
+ "cloudasset.assets.listServiceconsumermanagementTenancyUnits",
+ "cloudasset.assets.listServiceconsumermanagementVisibility",
+ "cloudasset.assets.listServicemanagementServices",
+ "cloudasset.assets.listServiceusageAdminOverrides",
+ "cloudasset.assets.listServiceusageConsumerOverrides",
+ "cloudasset.assets.listServiceusageServices",
+ "cloudasset.assets.listSpannerBackups",
+ "cloudasset.assets.listSpannerDatabases",
+ "cloudasset.assets.listSpannerInstances",
+ "cloudasset.assets.listSpeakerIdPhrases",
+ "cloudasset.assets.listSpeakerIdSettings",
+ "cloudasset.assets.listSpeakerIdSpeakers",
+ "cloudasset.assets.listSpeechCustomClasses",
+ "cloudasset.assets.listSpeechPhraseSets",
+ "cloudasset.assets.listSqladminBackupRuns",
+ "cloudasset.assets.listSqladminInstances",
+ "cloudasset.assets.listStorageBuckets",
+ "cloudasset.assets.listTpuNodes",
+ "cloudasset.assets.listVpcaccessConnector",
+ "cloudasset.assets.searchAllIamPolicies",
+ "cloudasset.assets.searchAllResources",
+ "cloudasset.feeds.create",
+ "cloudasset.feeds.delete",
+ "cloudasset.feeds.get",
+ "cloudasset.feeds.list",
+ "cloudasset.feeds.update",
+ "cloudasset.savedqueries.create",
+ "cloudasset.savedqueries.delete",
+ "cloudasset.savedqueries.get",
+ "cloudasset.savedqueries.list",
+ "cloudasset.savedqueries.update",
+ "cloudbuild.builds.approve",
+ "cloudbuild.builds.create",
+ "cloudbuild.builds.get",
+ "cloudbuild.builds.list",
+ "cloudbuild.builds.update",
+ "cloudbuild.integrations.create",
+ "cloudbuild.integrations.delete",
+ "cloudbuild.integrations.get",
+ "cloudbuild.integrations.list",
+ "cloudbuild.integrations.update",
+ "cloudbuild.workerpools.create",
+ "cloudbuild.workerpools.delete",
+ "cloudbuild.workerpools.get",
+ "cloudbuild.workerpools.list",
+ "cloudbuild.workerpools.update",
+ "cloudbuild.workerpools.use",
+ "cloudconfig.configs.get",
+ "cloudconfig.configs.update",
+ "clouddebugger.breakpoints.create",
+ "clouddebugger.breakpoints.delete",
+ "clouddebugger.breakpoints.get",
+ "clouddebugger.breakpoints.list",
+ "clouddebugger.breakpoints.listActive",
+ "clouddebugger.breakpoints.update",
+ "clouddebugger.debuggees.create",
+ "clouddebugger.debuggees.list",
+ "clouddeploy.config.get",
+ "clouddeploy.deliveryPipelines.create",
+ "clouddeploy.deliveryPipelines.delete",
+ "clouddeploy.deliveryPipelines.get",
+ "clouddeploy.deliveryPipelines.getIamPolicy",
+ "clouddeploy.deliveryPipelines.list",
+ "clouddeploy.deliveryPipelines.setIamPolicy",
+ "clouddeploy.deliveryPipelines.update",
+ "clouddeploy.jobRuns.get",
+ "clouddeploy.jobRuns.list",
+ "clouddeploy.locations.get",
+ "clouddeploy.locations.list",
+ "clouddeploy.operations.cancel",
+ "clouddeploy.operations.delete",
+ "clouddeploy.operations.get",
+ "clouddeploy.operations.list",
+ "clouddeploy.releases.abandon",
+ "clouddeploy.releases.create",
+ "clouddeploy.releases.delete",
+ "clouddeploy.releases.get",
+ "clouddeploy.releases.list",
+ "clouddeploy.rollouts.approve",
+ "clouddeploy.rollouts.create",
+ "clouddeploy.rollouts.get",
+ "clouddeploy.rollouts.list",
+ "clouddeploy.rollouts.retryJob",
+ "clouddeploy.targets.create",
+ "clouddeploy.targets.delete",
+ "clouddeploy.targets.get",
+ "clouddeploy.targets.getIamPolicy",
+ "clouddeploy.targets.list",
+ "clouddeploy.targets.setIamPolicy",
+ "clouddeploy.targets.update",
+ "cloudfunctions.functions.call",
+ "cloudfunctions.functions.create",
+ "cloudfunctions.functions.delete",
+ "cloudfunctions.functions.get",
+ "cloudfunctions.functions.getIamPolicy",
+ "cloudfunctions.functions.invoke",
+ "cloudfunctions.functions.list",
+ "cloudfunctions.functions.setIamPolicy",
+ "cloudfunctions.functions.sourceCodeGet",
+ "cloudfunctions.functions.sourceCodeSet",
+ "cloudfunctions.functions.update",
+ "cloudfunctions.locations.get",
+ "cloudfunctions.locations.list",
+ "cloudfunctions.operations.get",
+ "cloudfunctions.operations.list",
+ "cloudfunctions.runtimes.list",
+ "cloudiot.devices.bindGateway",
+ "cloudiot.devices.create",
+ "cloudiot.devices.delete",
+ "cloudiot.devices.get",
+ "cloudiot.devices.list",
+ "cloudiot.devices.sendCommand",
+ "cloudiot.devices.unbindGateway",
+ "cloudiot.devices.update",
+ "cloudiot.devices.updateConfig",
+ "cloudiot.registries.create",
+ "cloudiot.registries.delete",
+ "cloudiot.registries.get",
+ "cloudiot.registries.getIamPolicy",
+ "cloudiot.registries.list",
+ "cloudiot.registries.setIamPolicy",
+ "cloudiot.registries.update",
+ "cloudiottoken.tokensettings.get",
+ "cloudiottoken.tokensettings.update",
+ "cloudjobdiscovery.companies.create",
+ "cloudjobdiscovery.companies.delete",
+ "cloudjobdiscovery.companies.get",
+ "cloudjobdiscovery.companies.list",
+ "cloudjobdiscovery.companies.update",
+ "cloudjobdiscovery.events.create",
+ "cloudjobdiscovery.jobs.create",
+ "cloudjobdiscovery.jobs.delete",
+ "cloudjobdiscovery.jobs.get",
+ "cloudjobdiscovery.jobs.search",
+ "cloudjobdiscovery.jobs.update",
+ "cloudjobdiscovery.profiles.create",
+ "cloudjobdiscovery.profiles.delete",
+ "cloudjobdiscovery.profiles.get",
+ "cloudjobdiscovery.profiles.search",
+ "cloudjobdiscovery.profiles.update",
+ "cloudjobdiscovery.tenants.create",
+ "cloudjobdiscovery.tenants.delete",
+ "cloudjobdiscovery.tenants.get",
+ "cloudjobdiscovery.tenants.update",
+ "cloudjobdiscovery.tools.access",
+ "cloudkms.cryptoKeyVersions.create",
+ "cloudkms.cryptoKeyVersions.destroy",
+ "cloudkms.cryptoKeyVersions.get",
+ "cloudkms.cryptoKeyVersions.list",
+ "cloudkms.cryptoKeyVersions.manageRawPKCS1Keys",
+ "cloudkms.cryptoKeyVersions.restore",
+ "cloudkms.cryptoKeyVersions.update",
+ "cloudkms.cryptoKeyVersions.useToDecrypt",
+ "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation",
+ "cloudkms.cryptoKeyVersions.useToEncrypt",
+ "cloudkms.cryptoKeyVersions.useToEncryptViaDelegation",
+ "cloudkms.cryptoKeyVersions.useToSign",
+ "cloudkms.cryptoKeyVersions.useToVerify",
+ "cloudkms.cryptoKeyVersions.viewPublicKey",
+ "cloudkms.cryptoKeys.create",
+ "cloudkms.cryptoKeys.get",
+ "cloudkms.cryptoKeys.getIamPolicy",
+ "cloudkms.cryptoKeys.list",
+ "cloudkms.cryptoKeys.setIamPolicy",
+ "cloudkms.cryptoKeys.update",
+ "cloudkms.ekmConnections.create",
+ "cloudkms.ekmConnections.get",
+ "cloudkms.ekmConnections.getIamPolicy",
+ "cloudkms.ekmConnections.list",
+ "cloudkms.ekmConnections.setIamPolicy",
+ "cloudkms.ekmConnections.update",
+ "cloudkms.ekmConnections.use",
+ "cloudkms.importJobs.create",
+ "cloudkms.importJobs.get",
+ "cloudkms.importJobs.getIamPolicy",
+ "cloudkms.importJobs.list",
+ "cloudkms.importJobs.setIamPolicy",
+ "cloudkms.importJobs.useToImport",
+ "cloudkms.keyRings.create",
+ "cloudkms.keyRings.createTagBinding",
+ "cloudkms.keyRings.deleteTagBinding",
+ "cloudkms.keyRings.get",
+ "cloudkms.keyRings.getIamPolicy",
+ "cloudkms.keyRings.list",
+ "cloudkms.keyRings.listEffectiveTags",
+ "cloudkms.keyRings.listTagBindings",
+ "cloudkms.keyRings.setIamPolicy",
+ "cloudkms.locations.generateRandomBytes",
+ "cloudkms.locations.get",
+ "cloudkms.locations.list",
+ "cloudmessaging.messages.create",
+ "cloudmigration.velostrataendpoints.connect",
+ "cloudnotifications.activities.list",
+ "cloudoptimization.operations.create",
+ "cloudoptimization.operations.get",
+ "cloudprivatecatalog.targets.get",
+ "cloudprivatecatalogproducer.catalogAssociations.create",
+ "cloudprivatecatalogproducer.catalogAssociations.delete",
+ "cloudprivatecatalogproducer.catalogAssociations.get",
+ "cloudprivatecatalogproducer.catalogAssociations.list",
+ "cloudprivatecatalogproducer.producerCatalogs.attachProduct",
+ "cloudprivatecatalogproducer.producerCatalogs.create",
+ "cloudprivatecatalogproducer.producerCatalogs.delete",
+ "cloudprivatecatalogproducer.producerCatalogs.detachProduct",
+ "cloudprivatecatalogproducer.producerCatalogs.get",
+ "cloudprivatecatalogproducer.producerCatalogs.getIamPolicy",
+ "cloudprivatecatalogproducer.producerCatalogs.list",
+ "cloudprivatecatalogproducer.producerCatalogs.setIamPolicy",
+ "cloudprivatecatalogproducer.producerCatalogs.update",
+ "cloudprivatecatalogproducer.products.create",
+ "cloudprivatecatalogproducer.products.delete",
+ "cloudprivatecatalogproducer.products.get",
+ "cloudprivatecatalogproducer.products.getIamPolicy",
+ "cloudprivatecatalogproducer.products.list",
+ "cloudprivatecatalogproducer.products.setIamPolicy",
+ "cloudprivatecatalogproducer.products.update",
+ "cloudprivatecatalogproducer.targets.associate",
+ "cloudprivatecatalogproducer.targets.unassociate",
+ "cloudprofiler.profiles.create",
+ "cloudprofiler.profiles.list",
+ "cloudprofiler.profiles.update",
+ "cloudscheduler.jobs.create",
+ "cloudscheduler.jobs.delete",
+ "cloudscheduler.jobs.enable",
+ "cloudscheduler.jobs.fullView",
+ "cloudscheduler.jobs.get",
+ "cloudscheduler.jobs.list",
+ "cloudscheduler.jobs.pause",
+ "cloudscheduler.jobs.run",
+ "cloudscheduler.jobs.update",
+ "cloudscheduler.locations.get",
+ "cloudscheduler.locations.list",
+ "cloudsecurityscanner.crawledurls.list",
+ "cloudsecurityscanner.results.get",
+ "cloudsecurityscanner.results.list",
+ "cloudsecurityscanner.scanruns.get",
+ "cloudsecurityscanner.scanruns.getSummary",
+ "cloudsecurityscanner.scanruns.list",
+ "cloudsecurityscanner.scanruns.stop",
+ "cloudsecurityscanner.scans.create",
+ "cloudsecurityscanner.scans.delete",
+ "cloudsecurityscanner.scans.get",
+ "cloudsecurityscanner.scans.list",
+ "cloudsecurityscanner.scans.run",
+ "cloudsecurityscanner.scans.update",
+ "cloudsql.backupRuns.create",
+ "cloudsql.backupRuns.delete",
+ "cloudsql.backupRuns.get",
+ "cloudsql.backupRuns.list",
+ "cloudsql.databases.create",
+ "cloudsql.databases.delete",
+ "cloudsql.databases.get",
+ "cloudsql.databases.list",
+ "cloudsql.databases.update",
+ "cloudsql.instances.addServerCa",
+ "cloudsql.instances.clone",
+ "cloudsql.instances.connect",
+ "cloudsql.instances.create",
+ "cloudsql.instances.createTagBinding",
+ "cloudsql.instances.delete",
+ "cloudsql.instances.deleteTagBinding",
+ "cloudsql.instances.demoteMaster",
+ "cloudsql.instances.export",
+ "cloudsql.instances.failover",
+ "cloudsql.instances.get",
+ "cloudsql.instances.import",
+ "cloudsql.instances.list",
+ "cloudsql.instances.listEffectiveTags",
+ "cloudsql.instances.listServerCas",
+ "cloudsql.instances.listTagBindings",
+ "cloudsql.instances.login",
+ "cloudsql.instances.promoteReplica",
+ "cloudsql.instances.resetSslConfig",
+ "cloudsql.instances.restart",
+ "cloudsql.instances.restoreBackup",
+ "cloudsql.instances.rotateServerCa",
+ "cloudsql.instances.startReplica",
+ "cloudsql.instances.stopReplica",
+ "cloudsql.instances.truncateLog",
+ "cloudsql.instances.update",
+ "cloudsql.sslCerts.create",
+ "cloudsql.sslCerts.createEphemeral",
+ "cloudsql.sslCerts.delete",
+ "cloudsql.sslCerts.get",
+ "cloudsql.sslCerts.list",
+ "cloudsql.users.create",
+ "cloudsql.users.delete",
+ "cloudsql.users.get",
+ "cloudsql.users.list",
+ "cloudsql.users.update",
+ "cloudsupport.properties.get",
+ "cloudsupport.techCases.create",
+ "cloudsupport.techCases.escalate",
+ "cloudsupport.techCases.get",
+ "cloudsupport.techCases.list",
+ "cloudsupport.techCases.update",
+ "cloudtasks.locations.get",
+ "cloudtasks.locations.list",
+ "cloudtasks.queues.create",
+ "cloudtasks.queues.delete",
+ "cloudtasks.queues.get",
+ "cloudtasks.queues.getIamPolicy",
+ "cloudtasks.queues.list",
+ "cloudtasks.queues.pause",
+ "cloudtasks.queues.purge",
+ "cloudtasks.queues.resume",
+ "cloudtasks.queues.setIamPolicy",
+ "cloudtasks.queues.update",
+ "cloudtasks.tasks.create",
+ "cloudtasks.tasks.delete",
+ "cloudtasks.tasks.fullView",
+ "cloudtasks.tasks.get",
+ "cloudtasks.tasks.list",
+ "cloudtasks.tasks.run",
+ "cloudtestservice.environmentcatalog.get",
+ "cloudtestservice.matrices.create",
+ "cloudtestservice.matrices.get",
+ "cloudtestservice.matrices.update",
+ "cloudtoolresults.executions.create",
+ "cloudtoolresults.executions.get",
+ "cloudtoolresults.executions.list",
+ "cloudtoolresults.executions.update",
+ "cloudtoolresults.histories.create",
+ "cloudtoolresults.histories.get",
+ "cloudtoolresults.histories.list",
+ "cloudtoolresults.settings.create",
+ "cloudtoolresults.settings.get",
+ "cloudtoolresults.settings.update",
+ "cloudtoolresults.steps.create",
+ "cloudtoolresults.steps.get",
+ "cloudtoolresults.steps.list",
+ "cloudtoolresults.steps.update",
+ "cloudtrace.insights.get",
+ "cloudtrace.insights.list",
+ "cloudtrace.stats.get",
+ "cloudtrace.tasks.create",
+ "cloudtrace.tasks.delete",
+ "cloudtrace.tasks.get",
+ "cloudtrace.tasks.list",
+ "cloudtrace.traces.get",
+ "cloudtrace.traces.list",
+ "cloudtrace.traces.patch",
+ "cloudtranslate.generalModels.batchDocPredict",
+ "cloudtranslate.generalModels.batchPredict",
+ "cloudtranslate.generalModels.docPredict",
+ "cloudtranslate.generalModels.get",
+ "cloudtranslate.generalModels.predict",
+ "cloudtranslate.glossaries.batchDocPredict",
+ "cloudtranslate.glossaries.batchPredict",
+ "cloudtranslate.glossaries.create",
+ "cloudtranslate.glossaries.delete",
+ "cloudtranslate.glossaries.docPredict",
+ "cloudtranslate.glossaries.get",
+ "cloudtranslate.glossaries.list",
+ "cloudtranslate.glossaries.predict",
+ "cloudtranslate.glossaries.update",
+ "cloudtranslate.glossaryentries.create",
+ "cloudtranslate.glossaryentries.delete",
+ "cloudtranslate.glossaryentries.get",
+ "cloudtranslate.glossaryentries.list",
+ "cloudtranslate.glossaryentries.update",
+ "cloudtranslate.languageDetectionModels.predict",
+ "cloudtranslate.locations.get",
+ "cloudtranslate.locations.list",
+ "cloudtranslate.operations.cancel",
+ "cloudtranslate.operations.delete",
+ "cloudtranslate.operations.get",
+ "cloudtranslate.operations.list",
+ "cloudtranslate.operations.wait",
+ "commercebusinessenablement.leadgenConfig.get",
+ "commercebusinessenablement.leadgenConfig.update",
+ "commercebusinessenablement.paymentConfig.get",
+ "commercebusinessenablement.paymentConfig.update",
+ "commerceorggovernance.consumerSharingPolicies.get",
+ "commerceorggovernance.consumerSharingPolicies.update",
+ "commerceorggovernance.services.list",
+ "commerceprice.privateoffers.cancel",
+ "commerceprice.privateoffers.create",
+ "commerceprice.privateoffers.delete",
+ "commerceprice.privateoffers.get",
+ "commerceprice.privateoffers.list",
+ "commerceprice.privateoffers.publish",
+ "commerceprice.privateoffers.update",
+ "composer.dags.execute",
+ "composer.dags.get",
+ "composer.dags.getSourceCode",
+ "composer.dags.list",
+ "composer.environments.create",
+ "composer.environments.delete",
+ "composer.environments.get",
+ "composer.environments.list",
+ "composer.environments.update",
+ "composer.imageversions.list",
+ "composer.operations.delete",
+ "composer.operations.get",
+ "composer.operations.list",
+ "compute.acceleratorTypes.get",
+ "compute.acceleratorTypes.list",
+ "compute.addresses.create",
+ "compute.addresses.createInternal",
+ "compute.addresses.delete",
+ "compute.addresses.deleteInternal",
+ "compute.addresses.get",
+ "compute.addresses.list",
+ "compute.addresses.setLabels",
+ "compute.addresses.use",
+ "compute.addresses.useInternal",
+ "compute.autoscalers.create",
+ "compute.autoscalers.delete",
+ "compute.autoscalers.get",
+ "compute.autoscalers.list",
+ "compute.autoscalers.update",
+ "compute.backendBuckets.addSignedUrlKey",
+ "compute.backendBuckets.create",
+ "compute.backendBuckets.delete",
+ "compute.backendBuckets.deleteSignedUrlKey",
+ "compute.backendBuckets.get",
+ "compute.backendBuckets.getIamPolicy",
+ "compute.backendBuckets.list",
+ "compute.backendBuckets.setIamPolicy",
+ "compute.backendBuckets.setSecurityPolicy",
+ "compute.backendBuckets.update",
+ "compute.backendBuckets.use",
+ "compute.backendServices.addSignedUrlKey",
+ "compute.backendServices.create",
+ "compute.backendServices.delete",
+ "compute.backendServices.deleteSignedUrlKey",
+ "compute.backendServices.get",
+ "compute.backendServices.getIamPolicy",
+ "compute.backendServices.list",
+ "compute.backendServices.setIamPolicy",
+ "compute.backendServices.setSecurityPolicy",
+ "compute.backendServices.update",
+ "compute.backendServices.use",
+ "compute.commitments.create",
+ "compute.commitments.get",
+ "compute.commitments.list",
+ "compute.commitments.update",
+ "compute.commitments.updateReservations",
+ "compute.diskTypes.get",
+ "compute.diskTypes.list",
+ "compute.disks.addResourcePolicies",
+ "compute.disks.create",
+ "compute.disks.createSnapshot",
+ "compute.disks.createTagBinding",
+ "compute.disks.delete",
+ "compute.disks.deleteTagBinding",
+ "compute.disks.get",
+ "compute.disks.getIamPolicy",
+ "compute.disks.list",
+ "compute.disks.listEffectiveTags",
+ "compute.disks.listTagBindings",
+ "compute.disks.removeResourcePolicies",
+ "compute.disks.resize",
+ "compute.disks.setIamPolicy",
+ "compute.disks.setLabels",
+ "compute.disks.update",
+ "compute.disks.use",
+ "compute.disks.useReadOnly",
+ "compute.externalVpnGateways.create",
+ "compute.externalVpnGateways.delete",
+ "compute.externalVpnGateways.get",
+ "compute.externalVpnGateways.list",
+ "compute.externalVpnGateways.setLabels",
+ "compute.externalVpnGateways.use",
+ "compute.firewallPolicies.cloneRules",
+ "compute.firewallPolicies.create",
+ "compute.firewallPolicies.delete",
+ "compute.firewallPolicies.get",
+ "compute.firewallPolicies.getIamPolicy",
+ "compute.firewallPolicies.list",
+ "compute.firewallPolicies.setIamPolicy",
+ "compute.firewallPolicies.update",
+ "compute.firewallPolicies.use",
+ "compute.firewalls.create",
+ "compute.firewalls.delete",
+ "compute.firewalls.get",
+ "compute.firewalls.list",
+ "compute.firewalls.update",
+ "compute.forwardingRules.create",
+ "compute.forwardingRules.delete",
+ "compute.forwardingRules.get",
+ "compute.forwardingRules.list",
+ "compute.forwardingRules.pscCreate",
+ "compute.forwardingRules.pscDelete",
+ "compute.forwardingRules.pscSetLabels",
+ "compute.forwardingRules.pscSetTarget",
+ "compute.forwardingRules.pscUpdate",
+ "compute.forwardingRules.setLabels",
+ "compute.forwardingRules.setTarget",
+ "compute.forwardingRules.update",
+ "compute.forwardingRules.use",
+ "compute.globalAddresses.create",
+ "compute.globalAddresses.createInternal",
+ "compute.globalAddresses.delete",
+ "compute.globalAddresses.deleteInternal",
+ "compute.globalAddresses.get",
+ "compute.globalAddresses.list",
+ "compute.globalAddresses.setLabels",
+ "compute.globalAddresses.use",
+ "compute.globalForwardingRules.create",
+ "compute.globalForwardingRules.delete",
+ "compute.globalForwardingRules.get",
+ "compute.globalForwardingRules.list",
+ "compute.globalForwardingRules.pscCreate",
+ "compute.globalForwardingRules.pscDelete",
+ "compute.globalForwardingRules.pscGet",
+ "compute.globalForwardingRules.pscSetLabels",
+ "compute.globalForwardingRules.pscSetTarget",
+ "compute.globalForwardingRules.pscUpdate",
+ "compute.globalForwardingRules.setLabels",
+ "compute.globalForwardingRules.setTarget",
+ "compute.globalForwardingRules.update",
+ "compute.globalNetworkEndpointGroups.attachNetworkEndpoints",
+ "compute.globalNetworkEndpointGroups.create",
+ "compute.globalNetworkEndpointGroups.delete",
+ "compute.globalNetworkEndpointGroups.detachNetworkEndpoints",
+ "compute.globalNetworkEndpointGroups.get",
+ "compute.globalNetworkEndpointGroups.list",
+ "compute.globalNetworkEndpointGroups.use",
+ "compute.globalOperations.delete",
+ "compute.globalOperations.get",
+ "compute.globalOperations.getIamPolicy",
+ "compute.globalOperations.list",
+ "compute.globalOperations.setIamPolicy",
+ "compute.globalPublicDelegatedPrefixes.create",
+ "compute.globalPublicDelegatedPrefixes.delete",
+ "compute.globalPublicDelegatedPrefixes.get",
+ "compute.globalPublicDelegatedPrefixes.list",
+ "compute.globalPublicDelegatedPrefixes.update",
+ "compute.globalPublicDelegatedPrefixes.updatePolicy",
+ "compute.globalPublicDelegatedPrefixes.use",
+ "compute.healthChecks.create",
+ "compute.healthChecks.delete",
+ "compute.healthChecks.get",
+ "compute.healthChecks.list",
+ "compute.healthChecks.update",
+ "compute.healthChecks.use",
+ "compute.healthChecks.useReadOnly",
+ "compute.httpHealthChecks.create",
+ "compute.httpHealthChecks.delete",
+ "compute.httpHealthChecks.get",
+ "compute.httpHealthChecks.list",
+ "compute.httpHealthChecks.update",
+ "compute.httpHealthChecks.use",
+ "compute.httpHealthChecks.useReadOnly",
+ "compute.httpsHealthChecks.create",
+ "compute.httpsHealthChecks.delete",
+ "compute.httpsHealthChecks.get",
+ "compute.httpsHealthChecks.list",
+ "compute.httpsHealthChecks.update",
+ "compute.httpsHealthChecks.use",
+ "compute.httpsHealthChecks.useReadOnly",
+ "compute.images.create",
+ "compute.images.createTagBinding",
+ "compute.images.delete",
+ "compute.images.deleteTagBinding",
+ "compute.images.deprecate",
+ "compute.images.get",
+ "compute.images.getFromFamily",
+ "compute.images.getIamPolicy",
+ "compute.images.list",
+ "compute.images.listEffectiveTags",
+ "compute.images.listTagBindings",
+ "compute.images.setIamPolicy",
+ "compute.images.setLabels",
+ "compute.images.update",
+ "compute.images.useReadOnly",
+ "compute.instanceGroupManagers.create",
+ "compute.instanceGroupManagers.delete",
+ "compute.instanceGroupManagers.get",
+ "compute.instanceGroupManagers.list",
+ "compute.instanceGroupManagers.update",
+ "compute.instanceGroupManagers.use",
+ "compute.instanceGroups.create",
+ "compute.instanceGroups.delete",
+ "compute.instanceGroups.get",
+ "compute.instanceGroups.list",
+ "compute.instanceGroups.update",
+ "compute.instanceGroups.use",
+ "compute.instanceTemplates.create",
+ "compute.instanceTemplates.delete",
+ "compute.instanceTemplates.get",
+ "compute.instanceTemplates.getIamPolicy",
+ "compute.instanceTemplates.list",
+ "compute.instanceTemplates.setIamPolicy",
+ "compute.instanceTemplates.useReadOnly",
+ "compute.instances.addAccessConfig",
+ "compute.instances.addMaintenancePolicies",
+ "compute.instances.addResourcePolicies",
+ "compute.instances.attachDisk",
+ "compute.instances.create",
+ "compute.instances.createTagBinding",
+ "compute.instances.delete",
+ "compute.instances.deleteAccessConfig",
+ "compute.instances.deleteTagBinding",
+ "compute.instances.detachDisk",
+ "compute.instances.get",
+ "compute.instances.getEffectiveFirewalls",
+ "compute.instances.getGuestAttributes",
+ "compute.instances.getIamPolicy",
+ "compute.instances.getScreenshot",
+ "compute.instances.getSerialPortOutput",
+ "compute.instances.getShieldedInstanceIdentity",
+ "compute.instances.getShieldedVmIdentity",
+ "compute.instances.list",
+ "compute.instances.listEffectiveTags",
+ "compute.instances.listReferrers",
+ "compute.instances.listTagBindings",
+ "compute.instances.osAdminLogin",
+ "compute.instances.osLogin",
+ "compute.instances.removeMaintenancePolicies",
+ "compute.instances.removeResourcePolicies",
+ "compute.instances.reset",
+ "compute.instances.resume",
+ "compute.instances.sendDiagnosticInterrupt",
+ "compute.instances.setDeletionProtection",
+ "compute.instances.setDiskAutoDelete",
+ "compute.instances.setIamPolicy",
+ "compute.instances.setLabels",
+ "compute.instances.setMachineResources",
+ "compute.instances.setMachineType",
+ "compute.instances.setMetadata",
+ "compute.instances.setMinCpuPlatform",
+ "compute.instances.setName",
+ "compute.instances.setScheduling",
+ "compute.instances.setServiceAccount",
+ "compute.instances.setShieldedInstanceIntegrityPolicy",
+ "compute.instances.setShieldedVmIntegrityPolicy",
+ "compute.instances.setTags",
+ "compute.instances.start",
+ "compute.instances.startWithEncryptionKey",
+ "compute.instances.stop",
+ "compute.instances.suspend",
+ "compute.instances.update",
+ "compute.instances.updateAccessConfig",
+ "compute.instances.updateDisplayDevice",
+ "compute.instances.updateNetworkInterface",
+ "compute.instances.updateSecurity",
+ "compute.instances.updateShieldedInstanceConfig",
+ "compute.instances.updateShieldedVmConfig",
+ "compute.instances.use",
+ "compute.instances.useReadOnly",
+ "compute.interconnectAttachments.create",
+ "compute.interconnectAttachments.delete",
+ "compute.interconnectAttachments.get",
+ "compute.interconnectAttachments.list",
+ "compute.interconnectAttachments.setLabels",
+ "compute.interconnectAttachments.update",
+ "compute.interconnectAttachments.use",
+ "compute.interconnectLocations.get",
+ "compute.interconnectLocations.list",
+ "compute.interconnects.create",
+ "compute.interconnects.delete",
+ "compute.interconnects.get",
+ "compute.interconnects.list",
+ "compute.interconnects.setLabels",
+ "compute.interconnects.update",
+ "compute.interconnects.use",
+ "compute.licenseCodes.get",
+ "compute.licenseCodes.getIamPolicy",
+ "compute.licenseCodes.list",
+ "compute.licenseCodes.setIamPolicy",
+ "compute.licenseCodes.update",
+ "compute.licenseCodes.use",
+ "compute.licenses.create",
+ "compute.licenses.delete",
+ "compute.licenses.get",
+ "compute.licenses.getIamPolicy",
+ "compute.licenses.list",
+ "compute.licenses.setIamPolicy",
+ "compute.machineImages.create",
+ "compute.machineImages.delete",
+ "compute.machineImages.get",
+ "compute.machineImages.getIamPolicy",
+ "compute.machineImages.list",
+ "compute.machineImages.setIamPolicy",
+ "compute.machineImages.useReadOnly",
+ "compute.machineTypes.get",
+ "compute.machineTypes.list",
+ "compute.maintenancePolicies.create",
+ "compute.maintenancePolicies.delete",
+ "compute.maintenancePolicies.get",
+ "compute.maintenancePolicies.getIamPolicy",
+ "compute.maintenancePolicies.list",
+ "compute.maintenancePolicies.setIamPolicy",
+ "compute.maintenancePolicies.use",
+ "compute.networkAttachments.create",
+ "compute.networkAttachments.delete",
+ "compute.networkAttachments.get",
+ "compute.networkAttachments.list",
+ "compute.networkEdgeSecurityServices.create",
+ "compute.networkEdgeSecurityServices.delete",
+ "compute.networkEdgeSecurityServices.get",
+ "compute.networkEdgeSecurityServices.list",
+ "compute.networkEdgeSecurityServices.update",
+ "compute.networkEndpointGroups.attachNetworkEndpoints",
+ "compute.networkEndpointGroups.create",
+ "compute.networkEndpointGroups.delete",
+ "compute.networkEndpointGroups.detachNetworkEndpoints",
+ "compute.networkEndpointGroups.get",
+ "compute.networkEndpointGroups.getIamPolicy",
+ "compute.networkEndpointGroups.list",
+ "compute.networkEndpointGroups.setIamPolicy",
+ "compute.networkEndpointGroups.use",
+ "compute.networks.access",
+ "compute.networks.addPeering",
+ "compute.networks.create",
+ "compute.networks.delete",
+ "compute.networks.get",
+ "compute.networks.getEffectiveFirewalls",
+ "compute.networks.getRegionEffectiveFirewalls",
+ "compute.networks.list",
+ "compute.networks.listPeeringRoutes",
+ "compute.networks.mirror",
+ "compute.networks.removePeering",
+ "compute.networks.setFirewallPolicy",
+ "compute.networks.switchToCustomMode",
+ "compute.networks.update",
+ "compute.networks.updatePeering",
+ "compute.networks.updatePolicy",
+ "compute.networks.use",
+ "compute.networks.useExternalIp",
+ "compute.nodeGroups.addNodes",
+ "compute.nodeGroups.create",
+ "compute.nodeGroups.delete",
+ "compute.nodeGroups.deleteNodes",
+ "compute.nodeGroups.get",
+ "compute.nodeGroups.getIamPolicy",
+ "compute.nodeGroups.list",
+ "compute.nodeGroups.setIamPolicy",
+ "compute.nodeGroups.setNodeTemplate",
+ "compute.nodeGroups.update",
+ "compute.nodeTemplates.create",
+ "compute.nodeTemplates.delete",
+ "compute.nodeTemplates.get",
+ "compute.nodeTemplates.getIamPolicy",
+ "compute.nodeTemplates.list",
+ "compute.nodeTemplates.setIamPolicy",
+ "compute.nodeTypes.get",
+ "compute.nodeTypes.list",
+ "compute.organizations.administerXpn",
+ "compute.packetMirrorings.create",
+ "compute.packetMirrorings.delete",
+ "compute.packetMirrorings.get",
+ "compute.packetMirrorings.list",
+ "compute.packetMirrorings.update",
+ "compute.projects.get",
+ "compute.projects.setCommonInstanceMetadata",
+ "compute.projects.setDefaultNetworkTier",
+ "compute.projects.setDefaultServiceAccount",
+ "compute.projects.setUsageExportBucket",
+ "compute.publicAdvertisedPrefixes.create",
+ "compute.publicAdvertisedPrefixes.delete",
+ "compute.publicAdvertisedPrefixes.get",
+ "compute.publicAdvertisedPrefixes.list",
+ "compute.publicAdvertisedPrefixes.update",
+ "compute.publicAdvertisedPrefixes.updatePolicy",
+ "compute.publicAdvertisedPrefixes.use",
+ "compute.publicDelegatedPrefixes.create",
+ "compute.publicDelegatedPrefixes.delete",
+ "compute.publicDelegatedPrefixes.get",
+ "compute.publicDelegatedPrefixes.list",
+ "compute.publicDelegatedPrefixes.update",
+ "compute.publicDelegatedPrefixes.updatePolicy",
+ "compute.publicDelegatedPrefixes.use",
+ "compute.regionBackendServices.create",
+ "compute.regionBackendServices.delete",
+ "compute.regionBackendServices.get",
+ "compute.regionBackendServices.getIamPolicy",
+ "compute.regionBackendServices.list",
+ "compute.regionBackendServices.setIamPolicy",
+ "compute.regionBackendServices.setSecurityPolicy",
+ "compute.regionBackendServices.update",
+ "compute.regionBackendServices.use",
+ "compute.regionFirewallPolicies.cloneRules",
+ "compute.regionFirewallPolicies.create",
+ "compute.regionFirewallPolicies.delete",
+ "compute.regionFirewallPolicies.get",
+ "compute.regionFirewallPolicies.getIamPolicy",
+ "compute.regionFirewallPolicies.list",
+ "compute.regionFirewallPolicies.setIamPolicy",
+ "compute.regionFirewallPolicies.update",
+ "compute.regionFirewallPolicies.use",
+ "compute.regionHealthCheckServices.create",
+ "compute.regionHealthCheckServices.delete",
+ "compute.regionHealthCheckServices.get",
+ "compute.regionHealthCheckServices.list",
+ "compute.regionHealthCheckServices.update",
+ "compute.regionHealthCheckServices.use",
+ "compute.regionHealthChecks.create",
+ "compute.regionHealthChecks.delete",
+ "compute.regionHealthChecks.get",
+ "compute.regionHealthChecks.list",
+ "compute.regionHealthChecks.update",
+ "compute.regionHealthChecks.use",
+ "compute.regionHealthChecks.useReadOnly",
+ "compute.regionNetworkEndpointGroups.create",
+ "compute.regionNetworkEndpointGroups.delete",
+ "compute.regionNetworkEndpointGroups.get",
+ "compute.regionNetworkEndpointGroups.list",
+ "compute.regionNetworkEndpointGroups.use",
+ "compute.regionNotificationEndpoints.create",
+ "compute.regionNotificationEndpoints.delete",
+ "compute.regionNotificationEndpoints.get",
+ "compute.regionNotificationEndpoints.list",
+ "compute.regionNotificationEndpoints.update",
+ "compute.regionNotificationEndpoints.use",
+ "compute.regionOperations.delete",
+ "compute.regionOperations.get",
+ "compute.regionOperations.getIamPolicy",
+ "compute.regionOperations.list",
+ "compute.regionOperations.setIamPolicy",
+ "compute.regionSecurityPolicies.create",
+ "compute.regionSecurityPolicies.delete",
+ "compute.regionSecurityPolicies.get",
+ "compute.regionSecurityPolicies.list",
+ "compute.regionSecurityPolicies.update",
+ "compute.regionSecurityPolicies.use",
+ "compute.regionSslCertificates.create",
+ "compute.regionSslCertificates.delete",
+ "compute.regionSslCertificates.get",
+ "compute.regionSslCertificates.list",
+ "compute.regionSslPolicies.create",
+ "compute.regionSslPolicies.delete",
+ "compute.regionSslPolicies.get",
+ "compute.regionSslPolicies.list",
+ "compute.regionSslPolicies.listAvailableFeatures",
+ "compute.regionSslPolicies.update",
+ "compute.regionSslPolicies.use",
+ "compute.regionTargetHttpProxies.create",
+ "compute.regionTargetHttpProxies.delete",
+ "compute.regionTargetHttpProxies.get",
+ "compute.regionTargetHttpProxies.list",
+ "compute.regionTargetHttpProxies.setUrlMap",
+ "compute.regionTargetHttpProxies.update",
+ "compute.regionTargetHttpProxies.use",
+ "compute.regionTargetHttpsProxies.create",
+ "compute.regionTargetHttpsProxies.delete",
+ "compute.regionTargetHttpsProxies.get",
+ "compute.regionTargetHttpsProxies.list",
+ "compute.regionTargetHttpsProxies.setSslCertificates",
+ "compute.regionTargetHttpsProxies.setUrlMap",
+ "compute.regionTargetHttpsProxies.update",
+ "compute.regionTargetHttpsProxies.use",
+ "compute.regionTargetTcpProxies.create",
+ "compute.regionTargetTcpProxies.delete",
+ "compute.regionTargetTcpProxies.get",
+ "compute.regionTargetTcpProxies.list",
+ "compute.regionTargetTcpProxies.use",
+ "compute.regionUrlMaps.create",
+ "compute.regionUrlMaps.delete",
+ "compute.regionUrlMaps.get",
+ "compute.regionUrlMaps.invalidateCache",
+ "compute.regionUrlMaps.list",
+ "compute.regionUrlMaps.update",
+ "compute.regionUrlMaps.use",
+ "compute.regionUrlMaps.validate",
+ "compute.regions.get",
+ "compute.regions.list",
+ "compute.reservations.create",
+ "compute.reservations.delete",
+ "compute.reservations.get",
+ "compute.reservations.list",
+ "compute.reservations.resize",
+ "compute.reservations.update",
+ "compute.resourcePolicies.create",
+ "compute.resourcePolicies.delete",
+ "compute.resourcePolicies.get",
+ "compute.resourcePolicies.getIamPolicy",
+ "compute.resourcePolicies.list",
+ "compute.resourcePolicies.setIamPolicy",
+ "compute.resourcePolicies.use",
+ "compute.routers.create",
+ "compute.routers.delete",
+ "compute.routers.get",
+ "compute.routers.list",
+ "compute.routers.update",
+ "compute.routers.use",
+ "compute.routes.create",
+ "compute.routes.delete",
+ "compute.routes.get",
+ "compute.routes.list",
+ "compute.securityPolicies.create",
+ "compute.securityPolicies.delete",
+ "compute.securityPolicies.get",
+ "compute.securityPolicies.getIamPolicy",
+ "compute.securityPolicies.list",
+ "compute.securityPolicies.setIamPolicy",
+ "compute.securityPolicies.setLabels",
+ "compute.securityPolicies.update",
+ "compute.securityPolicies.use",
+ "compute.serviceAttachments.create",
+ "compute.serviceAttachments.delete",
+ "compute.serviceAttachments.get",
+ "compute.serviceAttachments.getIamPolicy",
+ "compute.serviceAttachments.list",
+ "compute.serviceAttachments.setIamPolicy",
+ "compute.serviceAttachments.update",
+ "compute.serviceAttachments.use",
+ "compute.snapshots.create",
+ "compute.snapshots.createTagBinding",
+ "compute.snapshots.delete",
+ "compute.snapshots.deleteTagBinding",
+ "compute.snapshots.get",
+ "compute.snapshots.getIamPolicy",
+ "compute.snapshots.list",
+ "compute.snapshots.listEffectiveTags",
+ "compute.snapshots.listTagBindings",
+ "compute.snapshots.setIamPolicy",
+ "compute.snapshots.setLabels",
+ "compute.snapshots.useReadOnly",
+ "compute.sslCertificates.create",
+ "compute.sslCertificates.delete",
+ "compute.sslCertificates.get",
+ "compute.sslCertificates.list",
+ "compute.sslPolicies.create",
+ "compute.sslPolicies.delete",
+ "compute.sslPolicies.get",
+ "compute.sslPolicies.list",
+ "compute.sslPolicies.listAvailableFeatures",
+ "compute.sslPolicies.update",
+ "compute.sslPolicies.use",
+ "compute.subnetworks.create",
+ "compute.subnetworks.delete",
+ "compute.subnetworks.expandIpCidrRange",
+ "compute.subnetworks.get",
+ "compute.subnetworks.getIamPolicy",
+ "compute.subnetworks.list",
+ "compute.subnetworks.mirror",
+ "compute.subnetworks.setIamPolicy",
+ "compute.subnetworks.setPrivateIpGoogleAccess",
+ "compute.subnetworks.update",
+ "compute.subnetworks.use",
+ "compute.subnetworks.useExternalIp",
+ "compute.targetGrpcProxies.create",
+ "compute.targetGrpcProxies.delete",
+ "compute.targetGrpcProxies.get",
+ "compute.targetGrpcProxies.list",
+ "compute.targetGrpcProxies.update",
+ "compute.targetGrpcProxies.use",
+ "compute.targetHttpProxies.create",
+ "compute.targetHttpProxies.delete",
+ "compute.targetHttpProxies.get",
+ "compute.targetHttpProxies.list",
+ "compute.targetHttpProxies.setUrlMap",
+ "compute.targetHttpProxies.update",
+ "compute.targetHttpProxies.use",
+ "compute.targetHttpsProxies.create",
+ "compute.targetHttpsProxies.delete",
+ "compute.targetHttpsProxies.get",
+ "compute.targetHttpsProxies.list",
+ "compute.targetHttpsProxies.setCertificateMap",
+ "compute.targetHttpsProxies.setQuicOverride",
+ "compute.targetHttpsProxies.setSslCertificates",
+ "compute.targetHttpsProxies.setSslPolicy",
+ "compute.targetHttpsProxies.setUrlMap",
+ "compute.targetHttpsProxies.update",
+ "compute.targetHttpsProxies.use",
+ "compute.targetInstances.create",
+ "compute.targetInstances.delete",
+ "compute.targetInstances.get",
+ "compute.targetInstances.list",
+ "compute.targetInstances.use",
+ "compute.targetPools.addHealthCheck",
+ "compute.targetPools.addInstance",
+ "compute.targetPools.create",
+ "compute.targetPools.delete",
+ "compute.targetPools.get",
+ "compute.targetPools.list",
+ "compute.targetPools.removeHealthCheck",
+ "compute.targetPools.removeInstance",
+ "compute.targetPools.update",
+ "compute.targetPools.use",
+ "compute.targetSslProxies.create",
+ "compute.targetSslProxies.delete",
+ "compute.targetSslProxies.get",
+ "compute.targetSslProxies.list",
+ "compute.targetSslProxies.setBackendService",
+ "compute.targetSslProxies.setCertificateMap",
+ "compute.targetSslProxies.setProxyHeader",
+ "compute.targetSslProxies.setSslCertificates",
+ "compute.targetSslProxies.setSslPolicy",
+ "compute.targetSslProxies.update",
+ "compute.targetSslProxies.use",
+ "compute.targetTcpProxies.create",
+ "compute.targetTcpProxies.delete",
+ "compute.targetTcpProxies.get",
+ "compute.targetTcpProxies.list",
+ "compute.targetTcpProxies.update",
+ "compute.targetTcpProxies.use",
+ "compute.targetVpnGateways.create",
+ "compute.targetVpnGateways.delete",
+ "compute.targetVpnGateways.get",
+ "compute.targetVpnGateways.list",
+ "compute.targetVpnGateways.setLabels",
+ "compute.targetVpnGateways.use",
+ "compute.urlMaps.create",
+ "compute.urlMaps.delete",
+ "compute.urlMaps.get",
+ "compute.urlMaps.invalidateCache",
+ "compute.urlMaps.list",
+ "compute.urlMaps.update",
+ "compute.urlMaps.use",
+ "compute.urlMaps.validate",
+ "compute.vpnGateways.create",
+ "compute.vpnGateways.delete",
+ "compute.vpnGateways.get",
+ "compute.vpnGateways.list",
+ "compute.vpnGateways.setLabels",
+ "compute.vpnGateways.use",
+ "compute.vpnTunnels.create",
+ "compute.vpnTunnels.delete",
+ "compute.vpnTunnels.get",
+ "compute.vpnTunnels.list",
+ "compute.vpnTunnels.setLabels",
+ "compute.zoneOperations.delete",
+ "compute.zoneOperations.get",
+ "compute.zoneOperations.getIamPolicy",
+ "compute.zoneOperations.list",
+ "compute.zoneOperations.setIamPolicy",
+ "compute.zones.get",
+ "compute.zones.list",
+ "connectors.actions.execute",
+ "connectors.actions.list",
+ "connectors.connections.create",
+ "connectors.connections.delete",
+ "connectors.connections.executeSqlQuery",
+ "connectors.connections.get",
+ "connectors.connections.getConnectionSchemaMetadata",
+ "connectors.connections.getIamPolicy",
+ "connectors.connections.getRuntimeActionSchema",
+ "connectors.connections.getRuntimeEntitySchema",
+ "connectors.connections.list",
+ "connectors.connections.setIamPolicy",
+ "connectors.connections.update",
+ "connectors.connectors.get",
+ "connectors.connectors.list",
+ "connectors.entities.create",
+ "connectors.entities.delete",
+ "connectors.entities.deleteEntitiesWithConditions",
+ "connectors.entities.get",
+ "connectors.entities.list",
+ "connectors.entities.update",
+ "connectors.entities.updateEntitiesWithConditions",
+ "connectors.entityTypes.list",
+ "connectors.locations.get",
+ "connectors.locations.list",
+ "connectors.operations.cancel",
+ "connectors.operations.delete",
+ "connectors.operations.get",
+ "connectors.operations.list",
+ "connectors.providers.get",
+ "connectors.providers.list",
+ "connectors.runtimeconfig.get",
+ "connectors.schemaMetadata.refresh",
+ "connectors.versions.get",
+ "connectors.versions.list",
+ "consumerprocurement.consents.allowProjectGrant",
+ "consumerprocurement.consents.check",
+ "consumerprocurement.consents.grant",
+ "consumerprocurement.consents.list",
+ "consumerprocurement.consents.revoke",
+ "consumerprocurement.entitlements.get",
+ "consumerprocurement.entitlements.list",
+ "consumerprocurement.freeTrials.create",
+ "consumerprocurement.freeTrials.get",
+ "consumerprocurement.freeTrials.list",
+ "contactcenteraiplatform.contactCenters.create",
+ "contactcenteraiplatform.contactCenters.delete",
+ "contactcenteraiplatform.contactCenters.get",
+ "contactcenteraiplatform.contactCenters.list",
+ "contactcenteraiplatform.contactCenters.update",
+ "contactcenteraiplatform.locations.get",
+ "contactcenteraiplatform.locations.list",
+ "contactcenteraiplatform.operations.cancel",
+ "contactcenteraiplatform.operations.delete",
+ "contactcenteraiplatform.operations.get",
+ "contactcenteraiplatform.operations.list",
+ "contactcenterinsights.analyses.create",
+ "contactcenterinsights.analyses.delete",
+ "contactcenterinsights.analyses.get",
+ "contactcenterinsights.analyses.list",
+ "contactcenterinsights.conversations.create",
+ "contactcenterinsights.conversations.delete",
+ "contactcenterinsights.conversations.export",
+ "contactcenterinsights.conversations.get",
+ "contactcenterinsights.conversations.list",
+ "contactcenterinsights.conversations.update",
+ "contactcenterinsights.issueModels.create",
+ "contactcenterinsights.issueModels.delete",
+ "contactcenterinsights.issueModels.deploy",
+ "contactcenterinsights.issueModels.get",
+ "contactcenterinsights.issueModels.list",
+ "contactcenterinsights.issueModels.undeploy",
+ "contactcenterinsights.issueModels.update",
+ "contactcenterinsights.issues.get",
+ "contactcenterinsights.issues.list",
+ "contactcenterinsights.issues.update",
+ "contactcenterinsights.operations.get",
+ "contactcenterinsights.operations.list",
+ "contactcenterinsights.phraseMatchers.create",
+ "contactcenterinsights.phraseMatchers.delete",
+ "contactcenterinsights.phraseMatchers.get",
+ "contactcenterinsights.phraseMatchers.list",
+ "contactcenterinsights.phraseMatchers.update",
+ "contactcenterinsights.settings.get",
+ "contactcenterinsights.settings.update",
+ "contactcenterinsights.views.create",
+ "contactcenterinsights.views.delete",
+ "contactcenterinsights.views.get",
+ "contactcenterinsights.views.list",
+ "contactcenterinsights.views.update",
+ "container.apiServices.create",
+ "container.apiServices.delete",
+ "container.apiServices.get",
+ "container.apiServices.getStatus",
+ "container.apiServices.list",
+ "container.apiServices.update",
+ "container.apiServices.updateStatus",
+ "container.auditSinks.create",
+ "container.auditSinks.delete",
+ "container.auditSinks.get",
+ "container.auditSinks.list",
+ "container.auditSinks.update",
+ "container.backendConfigs.create",
+ "container.backendConfigs.delete",
+ "container.backendConfigs.get",
+ "container.backendConfigs.list",
+ "container.backendConfigs.update",
+ "container.bindings.create",
+ "container.bindings.delete",
+ "container.bindings.get",
+ "container.bindings.list",
+ "container.bindings.update",
+ "container.certificateSigningRequests.approve",
+ "container.certificateSigningRequests.create",
+ "container.certificateSigningRequests.delete",
+ "container.certificateSigningRequests.get",
+ "container.certificateSigningRequests.getStatus",
+ "container.certificateSigningRequests.list",
+ "container.certificateSigningRequests.update",
+ "container.certificateSigningRequests.updateStatus",
+ "container.clusterRoleBindings.create",
+ "container.clusterRoleBindings.delete",
+ "container.clusterRoleBindings.get",
+ "container.clusterRoleBindings.list",
+ "container.clusterRoleBindings.update",
+ "container.clusterRoles.bind",
+ "container.clusterRoles.create",
+ "container.clusterRoles.delete",
+ "container.clusterRoles.escalate",
+ "container.clusterRoles.get",
+ "container.clusterRoles.list",
+ "container.clusterRoles.update",
+ "container.clusters.create",
+ "container.clusters.createTagBinding",
+ "container.clusters.delete",
+ "container.clusters.deleteTagBinding",
+ "container.clusters.get",
+ "container.clusters.getCredentials",
+ "container.clusters.list",
+ "container.clusters.listEffectiveTags",
+ "container.clusters.listTagBindings",
+ "container.clusters.update",
+ "container.componentStatuses.get",
+ "container.componentStatuses.list",
+ "container.configMaps.create",
+ "container.configMaps.delete",
+ "container.configMaps.get",
+ "container.configMaps.list",
+ "container.configMaps.update",
+ "container.controllerRevisions.create",
+ "container.controllerRevisions.delete",
+ "container.controllerRevisions.get",
+ "container.controllerRevisions.list",
+ "container.controllerRevisions.update",
+ "container.cronJobs.create",
+ "container.cronJobs.delete",
+ "container.cronJobs.get",
+ "container.cronJobs.getStatus",
+ "container.cronJobs.list",
+ "container.cronJobs.update",
+ "container.cronJobs.updateStatus",
+ "container.csiDrivers.create",
+ "container.csiDrivers.delete",
+ "container.csiDrivers.get",
+ "container.csiDrivers.list",
+ "container.csiDrivers.update",
+ "container.csiNodeInfos.create",
+ "container.csiNodeInfos.delete",
+ "container.csiNodeInfos.get",
+ "container.csiNodeInfos.list",
+ "container.csiNodeInfos.update",
+ "container.csiNodes.create",
+ "container.csiNodes.delete",
+ "container.csiNodes.get",
+ "container.csiNodes.list",
+ "container.csiNodes.update",
+ "container.customResourceDefinitions.create",
+ "container.customResourceDefinitions.delete",
+ "container.customResourceDefinitions.get",
+ "container.customResourceDefinitions.getStatus",
+ "container.customResourceDefinitions.list",
+ "container.customResourceDefinitions.update",
+ "container.customResourceDefinitions.updateStatus",
+ "container.daemonSets.create",
+ "container.daemonSets.delete",
+ "container.daemonSets.get",
+ "container.daemonSets.getStatus",
+ "container.daemonSets.list",
+ "container.daemonSets.update",
+ "container.daemonSets.updateStatus",
+ "container.deployments.create",
+ "container.deployments.delete",
+ "container.deployments.get",
+ "container.deployments.getScale",
+ "container.deployments.getStatus",
+ "container.deployments.list",
+ "container.deployments.rollback",
+ "container.deployments.update",
+ "container.deployments.updateScale",
+ "container.deployments.updateStatus",
+ "container.endpointSlices.create",
+ "container.endpointSlices.delete",
+ "container.endpointSlices.get",
+ "container.endpointSlices.list",
+ "container.endpointSlices.update",
+ "container.endpoints.create",
+ "container.endpoints.delete",
+ "container.endpoints.get",
+ "container.endpoints.list",
+ "container.endpoints.update",
+ "container.events.create",
+ "container.events.delete",
+ "container.events.get",
+ "container.events.list",
+ "container.events.update",
+ "container.frontendConfigs.create",
+ "container.frontendConfigs.delete",
+ "container.frontendConfigs.get",
+ "container.frontendConfigs.list",
+ "container.frontendConfigs.update",
+ "container.horizontalPodAutoscalers.create",
+ "container.horizontalPodAutoscalers.delete",
+ "container.horizontalPodAutoscalers.get",
+ "container.horizontalPodAutoscalers.getStatus",
+ "container.horizontalPodAutoscalers.list",
+ "container.horizontalPodAutoscalers.update",
+ "container.horizontalPodAutoscalers.updateStatus",
+ "container.hostServiceAgent.use",
+ "container.ingresses.create",
+ "container.ingresses.delete",
+ "container.ingresses.get",
+ "container.ingresses.getStatus",
+ "container.ingresses.list",
+ "container.ingresses.update",
+ "container.ingresses.updateStatus",
+ "container.initializerConfigurations.create",
+ "container.initializerConfigurations.delete",
+ "container.initializerConfigurations.get",
+ "container.initializerConfigurations.list",
+ "container.initializerConfigurations.update",
+ "container.jobs.create",
+ "container.jobs.delete",
+ "container.jobs.get",
+ "container.jobs.getStatus",
+ "container.jobs.list",
+ "container.jobs.update",
+ "container.jobs.updateStatus",
+ "container.leases.create",
+ "container.leases.delete",
+ "container.leases.get",
+ "container.leases.list",
+ "container.leases.update",
+ "container.limitRanges.create",
+ "container.limitRanges.delete",
+ "container.limitRanges.get",
+ "container.limitRanges.list",
+ "container.limitRanges.update",
+ "container.localSubjectAccessReviews.create",
+ "container.localSubjectAccessReviews.list",
+ "container.managedCertificates.create",
+ "container.managedCertificates.delete",
+ "container.managedCertificates.get",
+ "container.managedCertificates.list",
+ "container.managedCertificates.update",
+ "container.mutatingWebhookConfigurations.create",
+ "container.mutatingWebhookConfigurations.delete",
+ "container.mutatingWebhookConfigurations.get",
+ "container.mutatingWebhookConfigurations.list",
+ "container.mutatingWebhookConfigurations.update",
+ "container.namespaces.create",
+ "container.namespaces.delete",
+ "container.namespaces.finalize",
+ "container.namespaces.get",
+ "container.namespaces.getStatus",
+ "container.namespaces.list",
+ "container.namespaces.update",
+ "container.namespaces.updateStatus",
+ "container.networkPolicies.create",
+ "container.networkPolicies.delete",
+ "container.networkPolicies.get",
+ "container.networkPolicies.list",
+ "container.networkPolicies.update",
+ "container.nodes.create",
+ "container.nodes.delete",
+ "container.nodes.get",
+ "container.nodes.getStatus",
+ "container.nodes.list",
+ "container.nodes.proxy",
+ "container.nodes.update",
+ "container.nodes.updateStatus",
+ "container.operations.get",
+ "container.operations.list",
+ "container.persistentVolumeClaims.create",
+ "container.persistentVolumeClaims.delete",
+ "container.persistentVolumeClaims.get",
+ "container.persistentVolumeClaims.getStatus",
+ "container.persistentVolumeClaims.list",
+ "container.persistentVolumeClaims.update",
+ "container.persistentVolumeClaims.updateStatus",
+ "container.persistentVolumes.create",
+ "container.persistentVolumes.delete",
+ "container.persistentVolumes.get",
+ "container.persistentVolumes.getStatus",
+ "container.persistentVolumes.list",
+ "container.persistentVolumes.update",
+ "container.persistentVolumes.updateStatus",
+ "container.petSets.create",
+ "container.petSets.delete",
+ "container.petSets.get",
+ "container.petSets.list",
+ "container.petSets.update",
+ "container.petSets.updateStatus",
+ "container.podDisruptionBudgets.create",
+ "container.podDisruptionBudgets.delete",
+ "container.podDisruptionBudgets.get",
+ "container.podDisruptionBudgets.getStatus",
+ "container.podDisruptionBudgets.list",
+ "container.podDisruptionBudgets.update",
+ "container.podDisruptionBudgets.updateStatus",
+ "container.podPresets.create",
+ "container.podPresets.delete",
+ "container.podPresets.get",
+ "container.podPresets.list",
+ "container.podPresets.update",
+ "container.podSecurityPolicies.create",
+ "container.podSecurityPolicies.delete",
+ "container.podSecurityPolicies.get",
+ "container.podSecurityPolicies.list",
+ "container.podSecurityPolicies.update",
+ "container.podSecurityPolicies.use",
+ "container.podTemplates.create",
+ "container.podTemplates.delete",
+ "container.podTemplates.get",
+ "container.podTemplates.list",
+ "container.podTemplates.update",
+ "container.pods.attach",
+ "container.pods.create",
+ "container.pods.delete",
+ "container.pods.evict",
+ "container.pods.exec",
+ "container.pods.get",
+ "container.pods.getLogs",
+ "container.pods.getStatus",
+ "container.pods.initialize",
+ "container.pods.list",
+ "container.pods.portForward",
+ "container.pods.proxy",
+ "container.pods.update",
+ "container.pods.updateStatus",
+ "container.priorityClasses.create",
+ "container.priorityClasses.delete",
+ "container.priorityClasses.get",
+ "container.priorityClasses.list",
+ "container.priorityClasses.update",
+ "container.replicaSets.create",
+ "container.replicaSets.delete",
+ "container.replicaSets.get",
+ "container.replicaSets.getScale",
+ "container.replicaSets.getStatus",
+ "container.replicaSets.list",
+ "container.replicaSets.update",
+ "container.replicaSets.updateScale",
+ "container.replicaSets.updateStatus",
+ "container.replicationControllers.create",
+ "container.replicationControllers.delete",
+ "container.replicationControllers.get",
+ "container.replicationControllers.getScale",
+ "container.replicationControllers.getStatus",
+ "container.replicationControllers.list",
+ "container.replicationControllers.update",
+ "container.replicationControllers.updateScale",
+ "container.replicationControllers.updateStatus",
+ "container.resourceQuotas.create",
+ "container.resourceQuotas.delete",
+ "container.resourceQuotas.get",
+ "container.resourceQuotas.getStatus",
+ "container.resourceQuotas.list",
+ "container.resourceQuotas.update",
+ "container.resourceQuotas.updateStatus",
+ "container.roleBindings.create",
+ "container.roleBindings.delete",
+ "container.roleBindings.get",
+ "container.roleBindings.list",
+ "container.roleBindings.update",
+ "container.roles.bind",
+ "container.roles.create",
+ "container.roles.delete",
+ "container.roles.escalate",
+ "container.roles.get",
+ "container.roles.list",
+ "container.roles.update",
+ "container.runtimeClasses.create",
+ "container.runtimeClasses.delete",
+ "container.runtimeClasses.get",
+ "container.runtimeClasses.list",
+ "container.runtimeClasses.update",
+ "container.scheduledJobs.create",
+ "container.scheduledJobs.delete",
+ "container.scheduledJobs.get",
+ "container.scheduledJobs.list",
+ "container.scheduledJobs.update",
+ "container.scheduledJobs.updateStatus",
+ "container.secrets.create",
+ "container.secrets.delete",
+ "container.secrets.get",
+ "container.secrets.list",
+ "container.secrets.update",
+ "container.selfSubjectAccessReviews.create",
+ "container.selfSubjectAccessReviews.list",
+ "container.selfSubjectRulesReviews.create",
+ "container.serviceAccounts.create",
+ "container.serviceAccounts.createToken",
+ "container.serviceAccounts.delete",
+ "container.serviceAccounts.get",
+ "container.serviceAccounts.list",
+ "container.serviceAccounts.update",
+ "container.services.create",
+ "container.services.delete",
+ "container.services.get",
+ "container.services.getStatus",
+ "container.services.list",
+ "container.services.proxy",
+ "container.services.update",
+ "container.services.updateStatus",
+ "container.statefulSets.create",
+ "container.statefulSets.delete",
+ "container.statefulSets.get",
+ "container.statefulSets.getScale",
+ "container.statefulSets.getStatus",
+ "container.statefulSets.list",
+ "container.statefulSets.update",
+ "container.statefulSets.updateScale",
+ "container.statefulSets.updateStatus",
+ "container.storageClasses.create",
+ "container.storageClasses.delete",
+ "container.storageClasses.get",
+ "container.storageClasses.list",
+ "container.storageClasses.update",
+ "container.storageStates.create",
+ "container.storageStates.delete",
+ "container.storageStates.get",
+ "container.storageStates.getStatus",
+ "container.storageStates.list",
+ "container.storageStates.update",
+ "container.storageStates.updateStatus",
+ "container.storageVersionMigrations.create",
+ "container.storageVersionMigrations.delete",
+ "container.storageVersionMigrations.get",
+ "container.storageVersionMigrations.getStatus",
+ "container.storageVersionMigrations.list",
+ "container.storageVersionMigrations.update",
+ "container.storageVersionMigrations.updateStatus",
+ "container.subjectAccessReviews.create",
+ "container.subjectAccessReviews.list",
+ "container.thirdPartyObjects.create",
+ "container.thirdPartyObjects.delete",
+ "container.thirdPartyObjects.get",
+ "container.thirdPartyObjects.list",
+ "container.thirdPartyObjects.update",
+ "container.thirdPartyResources.create",
+ "container.thirdPartyResources.delete",
+ "container.thirdPartyResources.get",
+ "container.thirdPartyResources.list",
+ "container.thirdPartyResources.update",
+ "container.tokenReviews.create",
+ "container.updateInfos.create",
+ "container.updateInfos.delete",
+ "container.updateInfos.get",
+ "container.updateInfos.list",
+ "container.updateInfos.update",
+ "container.validatingWebhookConfigurations.create",
+ "container.validatingWebhookConfigurations.delete",
+ "container.validatingWebhookConfigurations.get",
+ "container.validatingWebhookConfigurations.list",
+ "container.validatingWebhookConfigurations.update",
+ "container.volumeAttachments.create",
+ "container.volumeAttachments.delete",
+ "container.volumeAttachments.get",
+ "container.volumeAttachments.getStatus",
+ "container.volumeAttachments.list",
+ "container.volumeAttachments.update",
+ "container.volumeAttachments.updateStatus",
+ "container.volumeSnapshotClasses.create",
+ "container.volumeSnapshotClasses.delete",
+ "container.volumeSnapshotClasses.get",
+ "container.volumeSnapshotClasses.list",
+ "container.volumeSnapshotClasses.update",
+ "container.volumeSnapshotContents.create",
+ "container.volumeSnapshotContents.delete",
+ "container.volumeSnapshotContents.get",
+ "container.volumeSnapshotContents.getStatus",
+ "container.volumeSnapshotContents.list",
+ "container.volumeSnapshotContents.update",
+ "container.volumeSnapshotContents.updateStatus",
+ "container.volumeSnapshots.create",
+ "container.volumeSnapshots.delete",
+ "container.volumeSnapshots.get",
+ "container.volumeSnapshots.getStatus",
+ "container.volumeSnapshots.list",
+ "container.volumeSnapshots.update",
+ "container.volumeSnapshots.updateStatus",
+ "containeranalysis.notes.attachOccurrence",
+ "containeranalysis.notes.create",
+ "containeranalysis.notes.delete",
+ "containeranalysis.notes.get",
+ "containeranalysis.notes.getIamPolicy",
+ "containeranalysis.notes.list",
+ "containeranalysis.notes.listOccurrences",
+ "containeranalysis.notes.setIamPolicy",
+ "containeranalysis.notes.update",
+ "containeranalysis.occurrences.create",
+ "containeranalysis.occurrences.delete",
+ "containeranalysis.occurrences.get",
+ "containeranalysis.occurrences.getIamPolicy",
+ "containeranalysis.occurrences.list",
+ "containeranalysis.occurrences.setIamPolicy",
+ "containeranalysis.occurrences.update",
+ "containersecurity.clusterSummaries.list",
+ "containersecurity.findings.list",
+ "containersecurity.locations.get",
+ "containersecurity.locations.list",
+ "containersecurity.workloadConfigAudits.list",
+ "contentwarehouse.documentSchemas.create",
+ "contentwarehouse.documentSchemas.delete",
+ "contentwarehouse.documentSchemas.get",
+ "contentwarehouse.documentSchemas.list",
+ "contentwarehouse.documentSchemas.update",
+ "contentwarehouse.documents.create",
+ "contentwarehouse.documents.delete",
+ "contentwarehouse.documents.get",
+ "contentwarehouse.documents.getIamPolicy",
+ "contentwarehouse.documents.setIamPolicy",
+ "contentwarehouse.documents.update",
+ "contentwarehouse.locations.initialize",
+ "contentwarehouse.operations.get",
+ "contentwarehouse.rawDocuments.download",
+ "contentwarehouse.rawDocuments.upload",
+ "contentwarehouse.ruleSets.create",
+ "contentwarehouse.ruleSets.delete",
+ "contentwarehouse.ruleSets.get",
+ "contentwarehouse.ruleSets.list",
+ "contentwarehouse.ruleSets.update",
+ "contentwarehouse.synonymSets.create",
+ "contentwarehouse.synonymSets.delete",
+ "contentwarehouse.synonymSets.get",
+ "contentwarehouse.synonymSets.list",
+ "contentwarehouse.synonymSets.update",
+ "datacatalog.categories.fineGrainedGet",
+ "datacatalog.categories.getIamPolicy",
+ "datacatalog.categories.setIamPolicy",
+ "datacatalog.entries.create",
+ "datacatalog.entries.delete",
+ "datacatalog.entries.get",
+ "datacatalog.entries.getIamPolicy",
+ "datacatalog.entries.list",
+ "datacatalog.entries.setIamPolicy",
+ "datacatalog.entries.update",
+ "datacatalog.entries.updateContacts",
+ "datacatalog.entries.updateOverview",
+ "datacatalog.entries.updateTag",
+ "datacatalog.entryGroups.create",
+ "datacatalog.entryGroups.delete",
+ "datacatalog.entryGroups.get",
+ "datacatalog.entryGroups.getIamPolicy",
+ "datacatalog.entryGroups.list",
+ "datacatalog.entryGroups.setIamPolicy",
+ "datacatalog.entryGroups.update",
+ "datacatalog.entryGroups.updateTag",
+ "datacatalog.tagTemplates.create",
+ "datacatalog.tagTemplates.delete",
+ "datacatalog.tagTemplates.get",
+ "datacatalog.tagTemplates.getIamPolicy",
+ "datacatalog.tagTemplates.getTag",
+ "datacatalog.tagTemplates.setIamPolicy",
+ "datacatalog.tagTemplates.update",
+ "datacatalog.tagTemplates.use",
+ "datacatalog.taxonomies.create",
+ "datacatalog.taxonomies.delete",
+ "datacatalog.taxonomies.get",
+ "datacatalog.taxonomies.getIamPolicy",
+ "datacatalog.taxonomies.list",
+ "datacatalog.taxonomies.setIamPolicy",
+ "datacatalog.taxonomies.update",
+ "dataconnectors.connectors.create",
+ "dataconnectors.connectors.delete",
+ "dataconnectors.connectors.get",
+ "dataconnectors.connectors.getIamPolicy",
+ "dataconnectors.connectors.list",
+ "dataconnectors.connectors.setIamPolicy",
+ "dataconnectors.connectors.update",
+ "dataconnectors.connectors.use",
+ "dataconnectors.locations.get",
+ "dataconnectors.locations.list",
+ "dataconnectors.operations.cancel",
+ "dataconnectors.operations.delete",
+ "dataconnectors.operations.get",
+ "dataconnectors.operations.list",
+ "dataflow.jobs.cancel",
+ "dataflow.jobs.create",
+ "dataflow.jobs.get",
+ "dataflow.jobs.list",
+ "dataflow.jobs.snapshot",
+ "dataflow.jobs.updateContents",
+ "dataflow.messages.list",
+ "dataflow.metrics.get",
+ "dataflow.shuffle.read",
+ "dataflow.shuffle.write",
+ "dataflow.snapshots.delete",
+ "dataflow.snapshots.get",
+ "dataflow.snapshots.list",
+ "dataflow.streamingWorkItems.ImportState",
+ "dataflow.streamingWorkItems.commitWork",
+ "dataflow.streamingWorkItems.getData",
+ "dataflow.streamingWorkItems.getWork",
+ "dataflow.streamingWorkItems.getWorkerMetadata",
+ "dataflow.workItems.lease",
+ "dataflow.workItems.sendMessage",
+ "dataflow.workItems.update",
+ "dataform.compilationResults.create",
+ "dataform.compilationResults.get",
+ "dataform.compilationResults.list",
+ "dataform.compilationResults.query",
+ "dataform.locations.get",
+ "dataform.locations.list",
+ "dataform.repositories.create",
+ "dataform.repositories.delete",
+ "dataform.repositories.fetchRemoteBranches",
+ "dataform.repositories.get",
+ "dataform.repositories.list",
+ "dataform.repositories.update",
+ "dataform.workflowInvocations.cancel",
+ "dataform.workflowInvocations.create",
+ "dataform.workflowInvocations.delete",
+ "dataform.workflowInvocations.get",
+ "dataform.workflowInvocations.list",
+ "dataform.workflowInvocations.query",
+ "dataform.workspaces.commit",
+ "dataform.workspaces.create",
+ "dataform.workspaces.delete",
+ "dataform.workspaces.fetchFileDiff",
+ "dataform.workspaces.fetchFileGitStatuses",
+ "dataform.workspaces.fetchGitAheadBehind",
+ "dataform.workspaces.get",
+ "dataform.workspaces.installNpmPackages",
+ "dataform.workspaces.list",
+ "dataform.workspaces.makeDirectory",
+ "dataform.workspaces.moveDirectory",
+ "dataform.workspaces.moveFile",
+ "dataform.workspaces.pull",
+ "dataform.workspaces.push",
+ "dataform.workspaces.queryDirectoryContents",
+ "dataform.workspaces.readFile",
+ "dataform.workspaces.removeDirectory",
+ "dataform.workspaces.removeFile",
+ "dataform.workspaces.reset",
+ "dataform.workspaces.writeFile",
+ "datafusion.instances.create",
+ "datafusion.instances.delete",
+ "datafusion.instances.get",
+ "datafusion.instances.getIamPolicy",
+ "datafusion.instances.list",
+ "datafusion.instances.restart",
+ "datafusion.instances.runtime",
+ "datafusion.instances.setIamPolicy",
+ "datafusion.instances.update",
+ "datafusion.instances.upgrade",
+ "datafusion.locations.get",
+ "datafusion.locations.list",
+ "datafusion.operations.cancel",
+ "datafusion.operations.delete",
+ "datafusion.operations.get",
+ "datafusion.operations.list",
+ "datalabeling.annotateddatasets.delete",
+ "datalabeling.annotateddatasets.get",
+ "datalabeling.annotateddatasets.label",
+ "datalabeling.annotateddatasets.list",
+ "datalabeling.annotationspecsets.create",
+ "datalabeling.annotationspecsets.delete",
+ "datalabeling.annotationspecsets.get",
+ "datalabeling.annotationspecsets.list",
+ "datalabeling.dataitems.get",
+ "datalabeling.dataitems.list",
+ "datalabeling.datasets.create",
+ "datalabeling.datasets.delete",
+ "datalabeling.datasets.export",
+ "datalabeling.datasets.get",
+ "datalabeling.datasets.import",
+ "datalabeling.datasets.list",
+ "datalabeling.examples.get",
+ "datalabeling.examples.list",
+ "datalabeling.instructions.create",
+ "datalabeling.instructions.delete",
+ "datalabeling.instructions.get",
+ "datalabeling.instructions.list",
+ "datalabeling.operations.cancel",
+ "datalabeling.operations.get",
+ "datalabeling.operations.list",
+ "datamigration.connectionprofiles.create",
+ "datamigration.connectionprofiles.delete",
+ "datamigration.connectionprofiles.get",
+ "datamigration.connectionprofiles.getIamPolicy",
+ "datamigration.connectionprofiles.list",
+ "datamigration.connectionprofiles.setIamPolicy",
+ "datamigration.connectionprofiles.update",
+ "datamigration.locations.get",
+ "datamigration.locations.list",
+ "datamigration.migrationjobs.create",
+ "datamigration.migrationjobs.delete",
+ "datamigration.migrationjobs.generateSshScript",
+ "datamigration.migrationjobs.get",
+ "datamigration.migrationjobs.getIamPolicy",
+ "datamigration.migrationjobs.list",
+ "datamigration.migrationjobs.promote",
+ "datamigration.migrationjobs.restart",
+ "datamigration.migrationjobs.resume",
+ "datamigration.migrationjobs.setIamPolicy",
+ "datamigration.migrationjobs.start",
+ "datamigration.migrationjobs.stop",
+ "datamigration.migrationjobs.update",
+ "datamigration.migrationjobs.verify",
+ "datamigration.operations.cancel",
+ "datamigration.operations.delete",
+ "datamigration.operations.get",
+ "datamigration.operations.list",
+ "datapipelines.jobs.list",
+ "datapipelines.pipelines.create",
+ "datapipelines.pipelines.delete",
+ "datapipelines.pipelines.get",
+ "datapipelines.pipelines.list",
+ "datapipelines.pipelines.run",
+ "datapipelines.pipelines.stop",
+ "datapipelines.pipelines.update",
+ "dataplex.assetActions.list",
+ "dataplex.assets.create",
+ "dataplex.assets.delete",
+ "dataplex.assets.get",
+ "dataplex.assets.getIamPolicy",
+ "dataplex.assets.list",
+ "dataplex.assets.ownData",
+ "dataplex.assets.readData",
+ "dataplex.assets.setIamPolicy",
+ "dataplex.assets.update",
+ "dataplex.assets.writeData",
+ "dataplex.content.create",
+ "dataplex.content.delete",
+ "dataplex.content.get",
+ "dataplex.content.getIamPolicy",
+ "dataplex.content.list",
+ "dataplex.content.setIamPolicy",
+ "dataplex.content.update",
+ "dataplex.datascans.create",
+ "dataplex.datascans.delete",
+ "dataplex.datascans.get",
+ "dataplex.datascans.getData",
+ "dataplex.datascans.getIamPolicy",
+ "dataplex.datascans.list",
+ "dataplex.datascans.run",
+ "dataplex.datascans.setIamPolicy",
+ "dataplex.datascans.update",
+ "dataplex.entities.create",
+ "dataplex.entities.delete",
+ "dataplex.entities.get",
+ "dataplex.entities.list",
+ "dataplex.entities.update",
+ "dataplex.environments.create",
+ "dataplex.environments.delete",
+ "dataplex.environments.execute",
+ "dataplex.environments.get",
+ "dataplex.environments.getIamPolicy",
+ "dataplex.environments.list",
+ "dataplex.environments.setIamPolicy",
+ "dataplex.environments.update",
+ "dataplex.lakeActions.list",
+ "dataplex.lakes.create",
+ "dataplex.lakes.delete",
+ "dataplex.lakes.get",
+ "dataplex.lakes.getIamPolicy",
+ "dataplex.lakes.list",
+ "dataplex.lakes.setIamPolicy",
+ "dataplex.lakes.update",
+ "dataplex.locations.get",
+ "dataplex.locations.list",
+ "dataplex.operations.cancel",
+ "dataplex.operations.delete",
+ "dataplex.operations.get",
+ "dataplex.operations.list",
+ "dataplex.partitions.create",
+ "dataplex.partitions.delete",
+ "dataplex.partitions.get",
+ "dataplex.partitions.list",
+ "dataplex.partitions.update",
+ "dataplex.tasks.cancel",
+ "dataplex.tasks.create",
+ "dataplex.tasks.delete",
+ "dataplex.tasks.get",
+ "dataplex.tasks.getIamPolicy",
+ "dataplex.tasks.list",
+ "dataplex.tasks.run",
+ "dataplex.tasks.setIamPolicy",
+ "dataplex.tasks.update",
+ "dataplex.zoneActions.list",
+ "dataplex.zones.create",
+ "dataplex.zones.delete",
+ "dataplex.zones.get",
+ "dataplex.zones.getIamPolicy",
+ "dataplex.zones.list",
+ "dataplex.zones.setIamPolicy",
+ "dataplex.zones.update",
+ "dataprep.projects.use",
+ "dataproc.agents.create",
+ "dataproc.agents.delete",
+ "dataproc.agents.get",
+ "dataproc.agents.list",
+ "dataproc.agents.update",
+ "dataproc.autoscalingPolicies.create",
+ "dataproc.autoscalingPolicies.delete",
+ "dataproc.autoscalingPolicies.get",
+ "dataproc.autoscalingPolicies.getIamPolicy",
+ "dataproc.autoscalingPolicies.list",
+ "dataproc.autoscalingPolicies.setIamPolicy",
+ "dataproc.autoscalingPolicies.update",
+ "dataproc.autoscalingPolicies.use",
+ "dataproc.batches.cancel",
+ "dataproc.batches.create",
+ "dataproc.batches.delete",
+ "dataproc.batches.get",
+ "dataproc.batches.list",
+ "dataproc.clusters.create",
+ "dataproc.clusters.delete",
+ "dataproc.clusters.get",
+ "dataproc.clusters.getIamPolicy",
+ "dataproc.clusters.list",
+ "dataproc.clusters.setIamPolicy",
+ "dataproc.clusters.start",
+ "dataproc.clusters.stop",
+ "dataproc.clusters.update",
+ "dataproc.clusters.use",
+ "dataproc.jobs.cancel",
+ "dataproc.jobs.create",
+ "dataproc.jobs.delete",
+ "dataproc.jobs.get",
+ "dataproc.jobs.getIamPolicy",
+ "dataproc.jobs.list",
+ "dataproc.jobs.setIamPolicy",
+ "dataproc.jobs.update",
+ "dataproc.operations.cancel",
+ "dataproc.operations.delete",
+ "dataproc.operations.get",
+ "dataproc.operations.getIamPolicy",
+ "dataproc.operations.list",
+ "dataproc.operations.setIamPolicy",
+ "dataproc.tasks.lease",
+ "dataproc.tasks.listInvalidatedLeases",
+ "dataproc.tasks.reportStatus",
+ "dataproc.workflowTemplates.create",
+ "dataproc.workflowTemplates.delete",
+ "dataproc.workflowTemplates.get",
+ "dataproc.workflowTemplates.getIamPolicy",
+ "dataproc.workflowTemplates.instantiate",
+ "dataproc.workflowTemplates.instantiateInline",
+ "dataproc.workflowTemplates.list",
+ "dataproc.workflowTemplates.setIamPolicy",
+ "dataproc.workflowTemplates.update",
+ "dataprocessing.datasources.get",
+ "dataprocessing.datasources.list",
+ "dataprocessing.datasources.update",
+ "dataprocessing.featurecontrols.list",
+ "dataprocessing.featurecontrols.update",
+ "dataprocessing.groupcontrols.get",
+ "dataprocessing.groupcontrols.list",
+ "dataprocessing.groupcontrols.update",
+ "datastore.databases.create",
+ "datastore.databases.export",
+ "datastore.databases.get",
+ "datastore.databases.getMetadata",
+ "datastore.databases.import",
+ "datastore.databases.list",
+ "datastore.databases.update",
+ "datastore.entities.allocateIds",
+ "datastore.entities.create",
+ "datastore.entities.delete",
+ "datastore.entities.get",
+ "datastore.entities.list",
+ "datastore.entities.update",
+ "datastore.indexes.create",
+ "datastore.indexes.delete",
+ "datastore.indexes.get",
+ "datastore.indexes.list",
+ "datastore.indexes.update",
+ "datastore.keyVisualizerScans.get",
+ "datastore.keyVisualizerScans.list",
+ "datastore.locations.get",
+ "datastore.locations.list",
+ "datastore.namespaces.get",
+ "datastore.namespaces.list",
+ "datastore.operations.cancel",
+ "datastore.operations.delete",
+ "datastore.operations.get",
+ "datastore.operations.list",
+ "datastore.statistics.get",
+ "datastore.statistics.list",
+ "datastream.connectionProfiles.create",
+ "datastream.connectionProfiles.createTagBinding",
+ "datastream.connectionProfiles.delete",
+ "datastream.connectionProfiles.deleteTagBinding",
+ "datastream.connectionProfiles.destinationTypes",
+ "datastream.connectionProfiles.discover",
+ "datastream.connectionProfiles.get",
+ "datastream.connectionProfiles.getIamPolicy",
+ "datastream.connectionProfiles.list",
+ "datastream.connectionProfiles.listEffectiveTags",
+ "datastream.connectionProfiles.listStaticServiceIps",
+ "datastream.connectionProfiles.listTagBindings",
+ "datastream.connectionProfiles.setIamPolicy",
+ "datastream.connectionProfiles.sourceTypes",
+ "datastream.connectionProfiles.update",
+ "datastream.locations.fetchStaticIps",
+ "datastream.locations.get",
+ "datastream.locations.list",
+ "datastream.objects.get",
+ "datastream.objects.list",
+ "datastream.objects.startBackfillJob",
+ "datastream.objects.stopBackfillJob",
+ "datastream.operations.cancel",
+ "datastream.operations.delete",
+ "datastream.operations.get",
+ "datastream.operations.list",
+ "datastream.privateConnections.create",
+ "datastream.privateConnections.createTagBinding",
+ "datastream.privateConnections.delete",
+ "datastream.privateConnections.deleteTagBinding",
+ "datastream.privateConnections.get",
+ "datastream.privateConnections.getIamPolicy",
+ "datastream.privateConnections.list",
+ "datastream.privateConnections.listEffectiveTags",
+ "datastream.privateConnections.listTagBindings",
+ "datastream.privateConnections.setIamPolicy",
+ "datastream.routes.create",
+ "datastream.routes.delete",
+ "datastream.routes.get",
+ "datastream.routes.getIamPolicy",
+ "datastream.routes.list",
+ "datastream.routes.setIamPolicy",
+ "datastream.streams.computeState",
+ "datastream.streams.create",
+ "datastream.streams.createTagBinding",
+ "datastream.streams.delete",
+ "datastream.streams.deleteTagBinding",
+ "datastream.streams.fetchErrors",
+ "datastream.streams.get",
+ "datastream.streams.getIamPolicy",
+ "datastream.streams.list",
+ "datastream.streams.listEffectiveTags",
+ "datastream.streams.listTagBindings",
+ "datastream.streams.pause",
+ "datastream.streams.resume",
+ "datastream.streams.setIamPolicy",
+ "datastream.streams.start",
+ "datastream.streams.update",
+ "datastudio.datasources.delete",
+ "datastudio.datasources.get",
+ "datastudio.datasources.getIamPolicy",
+ "datastudio.datasources.move",
+ "datastudio.datasources.restoreTrash",
+ "datastudio.datasources.search",
+ "datastudio.datasources.setIamPolicy",
+ "datastudio.datasources.settingsShare",
+ "datastudio.datasources.share",
+ "datastudio.datasources.trash",
+ "datastudio.datasources.update",
+ "datastudio.reports.delete",
+ "datastudio.reports.get",
+ "datastudio.reports.getIamPolicy",
+ "datastudio.reports.move",
+ "datastudio.reports.restoreTrash",
+ "datastudio.reports.search",
+ "datastudio.reports.setIamPolicy",
+ "datastudio.reports.settingsShare",
+ "datastudio.reports.share",
+ "datastudio.reports.trash",
+ "datastudio.reports.update",
+ "datastudio.workspaces.createUnder",
+ "datastudio.workspaces.delete",
+ "datastudio.workspaces.get",
+ "datastudio.workspaces.getIamPolicy",
+ "datastudio.workspaces.moveIn",
+ "datastudio.workspaces.moveOut",
+ "datastudio.workspaces.restoreTrash",
+ "datastudio.workspaces.search",
+ "datastudio.workspaces.setIamPolicy",
+ "datastudio.workspaces.trash",
+ "datastudio.workspaces.update",
+ "deploymentmanager.compositeTypes.create",
+ "deploymentmanager.compositeTypes.delete",
+ "deploymentmanager.compositeTypes.get",
+ "deploymentmanager.compositeTypes.list",
+ "deploymentmanager.compositeTypes.update",
+ "deploymentmanager.deployments.cancelPreview",
+ "deploymentmanager.deployments.create",
+ "deploymentmanager.deployments.delete",
+ "deploymentmanager.deployments.get",
+ "deploymentmanager.deployments.getIamPolicy",
+ "deploymentmanager.deployments.list",
+ "deploymentmanager.deployments.setIamPolicy",
+ "deploymentmanager.deployments.stop",
+ "deploymentmanager.deployments.update",
+ "deploymentmanager.manifests.get",
+ "deploymentmanager.manifests.list",
+ "deploymentmanager.operations.get",
+ "deploymentmanager.operations.list",
+ "deploymentmanager.resources.get",
+ "deploymentmanager.resources.list",
+ "deploymentmanager.typeProviders.create",
+ "deploymentmanager.typeProviders.delete",
+ "deploymentmanager.typeProviders.get",
+ "deploymentmanager.typeProviders.getType",
+ "deploymentmanager.typeProviders.list",
+ "deploymentmanager.typeProviders.listTypes",
+ "deploymentmanager.typeProviders.update",
+ "deploymentmanager.types.create",
+ "deploymentmanager.types.delete",
+ "deploymentmanager.types.get",
+ "deploymentmanager.types.list",
+ "deploymentmanager.types.update",
+ "dialogflow.agents.create",
+ "dialogflow.agents.delete",
+ "dialogflow.agents.export",
+ "dialogflow.agents.get",
+ "dialogflow.agents.import",
+ "dialogflow.agents.list",
+ "dialogflow.agents.restore",
+ "dialogflow.agents.search",
+ "dialogflow.agents.searchResources",
+ "dialogflow.agents.train",
+ "dialogflow.agents.update",
+ "dialogflow.agents.validate",
+ "dialogflow.answerrecords.delete",
+ "dialogflow.answerrecords.get",
+ "dialogflow.answerrecords.list",
+ "dialogflow.answerrecords.update",
+ "dialogflow.callMatchers.create",
+ "dialogflow.callMatchers.delete",
+ "dialogflow.callMatchers.list",
+ "dialogflow.changelogs.get",
+ "dialogflow.changelogs.list",
+ "dialogflow.contexts.create",
+ "dialogflow.contexts.delete",
+ "dialogflow.contexts.get",
+ "dialogflow.contexts.list",
+ "dialogflow.contexts.update",
+ "dialogflow.conversationDatasets.create",
+ "dialogflow.conversationDatasets.delete",
+ "dialogflow.conversationDatasets.get",
+ "dialogflow.conversationDatasets.import",
+ "dialogflow.conversationDatasets.list",
+ "dialogflow.conversationModels.create",
+ "dialogflow.conversationModels.delete",
+ "dialogflow.conversationModels.deploy",
+ "dialogflow.conversationModels.get",
+ "dialogflow.conversationModels.list",
+ "dialogflow.conversationModels.undeploy",
+ "dialogflow.conversationProfiles.create",
+ "dialogflow.conversationProfiles.delete",
+ "dialogflow.conversationProfiles.get",
+ "dialogflow.conversationProfiles.list",
+ "dialogflow.conversationProfiles.update",
+ "dialogflow.conversations.addPhoneNumber",
+ "dialogflow.conversations.complete",
+ "dialogflow.conversations.create",
+ "dialogflow.conversations.get",
+ "dialogflow.conversations.list",
+ "dialogflow.conversations.update",
+ "dialogflow.documents.create",
+ "dialogflow.documents.delete",
+ "dialogflow.documents.get",
+ "dialogflow.documents.list",
+ "dialogflow.entityTypes.create",
+ "dialogflow.entityTypes.createEntity",
+ "dialogflow.entityTypes.delete",
+ "dialogflow.entityTypes.deleteEntity",
+ "dialogflow.entityTypes.get",
+ "dialogflow.entityTypes.list",
+ "dialogflow.entityTypes.update",
+ "dialogflow.entityTypes.updateEntity",
+ "dialogflow.environments.create",
+ "dialogflow.environments.delete",
+ "dialogflow.environments.get",
+ "dialogflow.environments.getHistory",
+ "dialogflow.environments.list",
+ "dialogflow.environments.lookupHistory",
+ "dialogflow.environments.update",
+ "dialogflow.flows.create",
+ "dialogflow.flows.delete",
+ "dialogflow.flows.get",
+ "dialogflow.flows.list",
+ "dialogflow.flows.train",
+ "dialogflow.flows.update",
+ "dialogflow.flows.validate",
+ "dialogflow.fulfillments.get",
+ "dialogflow.fulfillments.update",
+ "dialogflow.integrations.create",
+ "dialogflow.integrations.delete",
+ "dialogflow.integrations.get",
+ "dialogflow.integrations.list",
+ "dialogflow.integrations.update",
+ "dialogflow.intents.create",
+ "dialogflow.intents.delete",
+ "dialogflow.intents.get",
+ "dialogflow.intents.list",
+ "dialogflow.intents.update",
+ "dialogflow.knowledgeBases.create",
+ "dialogflow.knowledgeBases.delete",
+ "dialogflow.knowledgeBases.get",
+ "dialogflow.knowledgeBases.list",
+ "dialogflow.messages.list",
+ "dialogflow.modelEvaluations.get",
+ "dialogflow.modelEvaluations.list",
+ "dialogflow.operations.get",
+ "dialogflow.pages.create",
+ "dialogflow.pages.delete",
+ "dialogflow.pages.get",
+ "dialogflow.pages.list",
+ "dialogflow.pages.update",
+ "dialogflow.participants.analyzeContent",
+ "dialogflow.participants.create",
+ "dialogflow.participants.get",
+ "dialogflow.participants.list",
+ "dialogflow.participants.suggest",
+ "dialogflow.participants.update",
+ "dialogflow.phoneNumberOrders.cancel",
+ "dialogflow.phoneNumberOrders.create",
+ "dialogflow.phoneNumberOrders.get",
+ "dialogflow.phoneNumberOrders.list",
+ "dialogflow.phoneNumberOrders.update",
+ "dialogflow.phoneNumbers.delete",
+ "dialogflow.phoneNumbers.list",
+ "dialogflow.phoneNumbers.undelete",
+ "dialogflow.phoneNumbers.update",
+ "dialogflow.securitySettings.create",
+ "dialogflow.securitySettings.delete",
+ "dialogflow.securitySettings.get",
+ "dialogflow.securitySettings.list",
+ "dialogflow.securitySettings.update",
+ "dialogflow.sessionEntityTypes.create",
+ "dialogflow.sessionEntityTypes.delete",
+ "dialogflow.sessionEntityTypes.get",
+ "dialogflow.sessionEntityTypes.list",
+ "dialogflow.sessionEntityTypes.update",
+ "dialogflow.sessions.detectIntent",
+ "dialogflow.sessions.streamingDetectIntent",
+ "dialogflow.smartMessagingEntries.create",
+ "dialogflow.smartMessagingEntries.delete",
+ "dialogflow.smartMessagingEntries.get",
+ "dialogflow.smartMessagingEntries.list",
+ "dialogflow.transitionRouteGroups.create",
+ "dialogflow.transitionRouteGroups.delete",
+ "dialogflow.transitionRouteGroups.get",
+ "dialogflow.transitionRouteGroups.list",
+ "dialogflow.transitionRouteGroups.update",
+ "dialogflow.versions.create",
+ "dialogflow.versions.delete",
+ "dialogflow.versions.get",
+ "dialogflow.versions.list",
+ "dialogflow.versions.load",
+ "dialogflow.versions.update",
+ "dialogflow.webhooks.create",
+ "dialogflow.webhooks.delete",
+ "dialogflow.webhooks.get",
+ "dialogflow.webhooks.list",
+ "dialogflow.webhooks.update",
+ "discoveryengine.documents.create",
+ "discoveryengine.documents.delete",
+ "discoveryengine.documents.get",
+ "discoveryengine.documents.import",
+ "discoveryengine.documents.list",
+ "discoveryengine.documents.update",
+ "discoveryengine.operations.get",
+ "discoveryengine.operations.list",
+ "discoveryengine.servingConfigs.recommend",
+ "discoveryengine.userEvents.create",
+ "discoveryengine.userEvents.import",
+ "dlp.analyzeRiskTemplates.create",
+ "dlp.analyzeRiskTemplates.delete",
+ "dlp.analyzeRiskTemplates.get",
+ "dlp.analyzeRiskTemplates.list",
+ "dlp.analyzeRiskTemplates.update",
+ "dlp.columnDataProfiles.get",
+ "dlp.columnDataProfiles.list",
+ "dlp.deidentifyTemplates.create",
+ "dlp.deidentifyTemplates.delete",
+ "dlp.deidentifyTemplates.get",
+ "dlp.deidentifyTemplates.list",
+ "dlp.deidentifyTemplates.update",
+ "dlp.estimates.cancel",
+ "dlp.estimates.create",
+ "dlp.estimates.delete",
+ "dlp.estimates.get",
+ "dlp.estimates.list",
+ "dlp.inspectFindings.list",
+ "dlp.inspectTemplates.create",
+ "dlp.inspectTemplates.delete",
+ "dlp.inspectTemplates.get",
+ "dlp.inspectTemplates.list",
+ "dlp.inspectTemplates.update",
+ "dlp.jobTriggers.create",
+ "dlp.jobTriggers.delete",
+ "dlp.jobTriggers.get",
+ "dlp.jobTriggers.hybridInspect",
+ "dlp.jobTriggers.list",
+ "dlp.jobTriggers.update",
+ "dlp.jobs.cancel",
+ "dlp.jobs.create",
+ "dlp.jobs.delete",
+ "dlp.jobs.get",
+ "dlp.jobs.hybridInspect",
+ "dlp.jobs.list",
+ "dlp.kms.encrypt",
+ "dlp.locations.get",
+ "dlp.locations.list",
+ "dlp.projectDataProfiles.get",
+ "dlp.projectDataProfiles.list",
+ "dlp.storedInfoTypes.create",
+ "dlp.storedInfoTypes.delete",
+ "dlp.storedInfoTypes.get",
+ "dlp.storedInfoTypes.list",
+ "dlp.storedInfoTypes.update",
+ "dlp.tableDataProfiles.get",
+ "dlp.tableDataProfiles.list",
+ "dns.changes.create",
+ "dns.changes.get",
+ "dns.changes.list",
+ "dns.dnsKeys.get",
+ "dns.dnsKeys.list",
+ "dns.managedZoneOperations.get",
+ "dns.managedZoneOperations.list",
+ "dns.managedZones.create",
+ "dns.managedZones.delete",
+ "dns.managedZones.get",
+ "dns.managedZones.getIamPolicy",
+ "dns.managedZones.list",
+ "dns.managedZones.setIamPolicy",
+ "dns.managedZones.update",
+ "dns.networks.bindDNSResponsePolicy",
+ "dns.networks.bindPrivateDNSPolicy",
+ "dns.networks.bindPrivateDNSZone",
+ "dns.networks.targetWithPeeringZone",
+ "dns.policies.create",
+ "dns.policies.delete",
+ "dns.policies.get",
+ "dns.policies.getIamPolicy",
+ "dns.policies.list",
+ "dns.policies.setIamPolicy",
+ "dns.policies.update",
+ "dns.projects.get",
+ "dns.resourceRecordSets.create",
+ "dns.resourceRecordSets.delete",
+ "dns.resourceRecordSets.get",
+ "dns.resourceRecordSets.list",
+ "dns.resourceRecordSets.update",
+ "dns.responsePolicies.create",
+ "dns.responsePolicies.delete",
+ "dns.responsePolicies.get",
+ "dns.responsePolicies.list",
+ "dns.responsePolicies.update",
+ "dns.responsePolicyRules.create",
+ "dns.responsePolicyRules.delete",
+ "dns.responsePolicyRules.get",
+ "dns.responsePolicyRules.list",
+ "dns.responsePolicyRules.update",
+ "documentai.dataLabelingJobs.cancel",
+ "documentai.dataLabelingJobs.create",
+ "documentai.dataLabelingJobs.delete",
+ "documentai.dataLabelingJobs.list",
+ "documentai.dataLabelingJobs.update",
+ "documentai.datasetSchemas.get",
+ "documentai.datasetSchemas.update",
+ "documentai.datasets.createDocuments",
+ "documentai.datasets.deleteDocuments",
+ "documentai.datasets.get",
+ "documentai.datasets.getDocuments",
+ "documentai.datasets.listDocuments",
+ "documentai.datasets.update",
+ "documentai.datasets.updateDocuments",
+ "documentai.evaluationDocuments.get",
+ "documentai.evaluations.create",
+ "documentai.evaluations.get",
+ "documentai.evaluations.list",
+ "documentai.humanReviewConfigs.get",
+ "documentai.humanReviewConfigs.review",
+ "documentai.humanReviewConfigs.update",
+ "documentai.labelerPools.create",
+ "documentai.labelerPools.delete",
+ "documentai.labelerPools.get",
+ "documentai.labelerPools.list",
+ "documentai.labelerPools.update",
+ "documentai.locations.get",
+ "documentai.locations.list",
+ "documentai.operations.getLegacy",
+ "documentai.processedDocumentsSets.get",
+ "documentai.processedDocumentsSets.getDocuments",
+ "documentai.processedDocumentsSets.listDocuments",
+ "documentai.processorTypes.get",
+ "documentai.processorTypes.list",
+ "documentai.processorVersions.create",
+ "documentai.processorVersions.delete",
+ "documentai.processorVersions.get",
+ "documentai.processorVersions.list",
+ "documentai.processorVersions.processBatch",
+ "documentai.processorVersions.processOnline",
+ "documentai.processorVersions.update",
+ "documentai.processors.create",
+ "documentai.processors.delete",
+ "documentai.processors.fetchHumanReviewDetails",
+ "documentai.processors.get",
+ "documentai.processors.list",
+ "documentai.processors.processBatch",
+ "documentai.processors.processOnline",
+ "documentai.processors.update",
+ "domains.locations.get",
+ "domains.locations.list",
+ "domains.operations.cancel",
+ "domains.operations.get",
+ "domains.operations.list",
+ "domains.registrations.configureContact",
+ "domains.registrations.configureDns",
+ "domains.registrations.configureManagement",
+ "domains.registrations.create",
+ "domains.registrations.createTagBinding",
+ "domains.registrations.delete",
+ "domains.registrations.deleteTagBinding",
+ "domains.registrations.get",
+ "domains.registrations.getIamPolicy",
+ "domains.registrations.list",
+ "domains.registrations.listEffectiveTags",
+ "domains.registrations.listTagBindings",
+ "domains.registrations.setIamPolicy",
+ "domains.registrations.update",
+ "earthengine.assets.create",
+ "earthengine.assets.delete",
+ "earthengine.assets.get",
+ "earthengine.assets.getIamPolicy",
+ "earthengine.assets.list",
+ "earthengine.assets.setIamPolicy",
+ "earthengine.assets.update",
+ "earthengine.computations.create",
+ "earthengine.config.get",
+ "earthengine.config.update",
+ "earthengine.exports.create",
+ "earthengine.filmstripthumbnails.create",
+ "earthengine.filmstripthumbnails.get",
+ "earthengine.imports.create",
+ "earthengine.maps.create",
+ "earthengine.maps.get",
+ "earthengine.operations.delete",
+ "earthengine.operations.get",
+ "earthengine.operations.list",
+ "earthengine.operations.update",
+ "earthengine.tables.create",
+ "earthengine.tables.get",
+ "earthengine.thumbnails.create",
+ "earthengine.thumbnails.get",
+ "earthengine.videothumbnails.create",
+ "earthengine.videothumbnails.get",
+ "edgecontainer.clusters.create",
+ "edgecontainer.clusters.delete",
+ "edgecontainer.clusters.generateAccessToken",
+ "edgecontainer.clusters.get",
+ "edgecontainer.clusters.getIamPolicy",
+ "edgecontainer.clusters.list",
+ "edgecontainer.clusters.setIamPolicy",
+ "edgecontainer.clusters.update",
+ "edgecontainer.locations.get",
+ "edgecontainer.locations.list",
+ "edgecontainer.machines.create",
+ "edgecontainer.machines.delete",
+ "edgecontainer.machines.get",
+ "edgecontainer.machines.getIamPolicy",
+ "edgecontainer.machines.list",
+ "edgecontainer.machines.setIamPolicy",
+ "edgecontainer.machines.update",
+ "edgecontainer.machines.use",
+ "edgecontainer.nodePools.create",
+ "edgecontainer.nodePools.delete",
+ "edgecontainer.nodePools.get",
+ "edgecontainer.nodePools.getIamPolicy",
+ "edgecontainer.nodePools.list",
+ "edgecontainer.nodePools.setIamPolicy",
+ "edgecontainer.nodePools.update",
+ "edgecontainer.operations.cancel",
+ "edgecontainer.operations.delete",
+ "edgecontainer.operations.get",
+ "edgecontainer.operations.list",
+ "edgecontainer.vpnConnections.create",
+ "edgecontainer.vpnConnections.delete",
+ "edgecontainer.vpnConnections.get",
+ "edgecontainer.vpnConnections.getIamPolicy",
+ "edgecontainer.vpnConnections.list",
+ "edgecontainer.vpnConnections.setIamPolicy",
+ "edgecontainer.vpnConnections.update",
+ "endpoints.portals.attachCustomDomain",
+ "endpoints.portals.detachCustomDomain",
+ "endpoints.portals.listCustomDomains",
+ "endpoints.portals.update",
+ "enterpriseknowledgegraph.cloudKnowledgeGraphEntities.lookup",
+ "enterpriseknowledgegraph.cloudKnowledgeGraphEntities.search",
+ "enterpriseknowledgegraph.entityReconciliationJobs.cancel",
+ "enterpriseknowledgegraph.entityReconciliationJobs.create",
+ "enterpriseknowledgegraph.entityReconciliationJobs.delete",
+ "enterpriseknowledgegraph.entityReconciliationJobs.get",
+ "enterpriseknowledgegraph.entityReconciliationJobs.list",
+ "enterpriseknowledgegraph.publicKnowledgeGraphEntities.lookup",
+ "enterpriseknowledgegraph.publicKnowledgeGraphEntities.search",
+ "errorreporting.applications.list",
+ "errorreporting.errorEvents.create",
+ "errorreporting.errorEvents.delete",
+ "errorreporting.errorEvents.list",
+ "errorreporting.groupMetadata.get",
+ "errorreporting.groupMetadata.update",
+ "errorreporting.groups.list",
+ "essentialcontacts.contacts.create",
+ "essentialcontacts.contacts.delete",
+ "essentialcontacts.contacts.get",
+ "essentialcontacts.contacts.list",
+ "essentialcontacts.contacts.send",
+ "essentialcontacts.contacts.update",
+ "eventarc.channelConnections.create",
+ "eventarc.channelConnections.delete",
+ "eventarc.channelConnections.get",
+ "eventarc.channelConnections.getIamPolicy",
+ "eventarc.channelConnections.list",
+ "eventarc.channelConnections.publish",
+ "eventarc.channelConnections.setIamPolicy",
+ "eventarc.channels.attach",
+ "eventarc.channels.create",
+ "eventarc.channels.delete",
+ "eventarc.channels.get",
+ "eventarc.channels.getIamPolicy",
+ "eventarc.channels.list",
+ "eventarc.channels.publish",
+ "eventarc.channels.setIamPolicy",
+ "eventarc.channels.undelete",
+ "eventarc.channels.update",
+ "eventarc.events.receiveAuditLogWritten",
+ "eventarc.events.receiveEvent",
+ "eventarc.googleChannelConfigs.get",
+ "eventarc.googleChannelConfigs.update",
+ "eventarc.locations.get",
+ "eventarc.locations.list",
+ "eventarc.operations.cancel",
+ "eventarc.operations.delete",
+ "eventarc.operations.get",
+ "eventarc.operations.list",
+ "eventarc.providers.get",
+ "eventarc.providers.list",
+ "eventarc.triggers.create",
+ "eventarc.triggers.delete",
+ "eventarc.triggers.get",
+ "eventarc.triggers.getIamPolicy",
+ "eventarc.triggers.list",
+ "eventarc.triggers.setIamPolicy",
+ "eventarc.triggers.undelete",
+ "eventarc.triggers.update",
+ "fcmdata.deliverydata.list",
+ "file.backups.create",
+ "file.backups.createTagBinding",
+ "file.backups.delete",
+ "file.backups.deleteTagBinding",
+ "file.backups.get",
+ "file.backups.list",
+ "file.backups.listEffectiveTags",
+ "file.backups.listTagBindings",
+ "file.backups.update",
+ "file.instances.create",
+ "file.instances.createTagBinding",
+ "file.instances.delete",
+ "file.instances.deleteTagBinding",
+ "file.instances.get",
+ "file.instances.list",
+ "file.instances.listEffectiveTags",
+ "file.instances.listTagBindings",
+ "file.instances.restore",
+ "file.instances.revert",
+ "file.instances.update",
+ "file.locations.get",
+ "file.locations.list",
+ "file.operations.cancel",
+ "file.operations.delete",
+ "file.operations.get",
+ "file.operations.list",
+ "file.snapshots.createTagBinding",
+ "file.snapshots.deleteTagBinding",
+ "file.snapshots.listEffectiveTags",
+ "file.snapshots.listTagBindings",
+ "firebase.billingPlans.get",
+ "firebase.billingPlans.update",
+ "firebase.clients.create",
+ "firebase.clients.delete",
+ "firebase.clients.get",
+ "firebase.clients.list",
+ "firebase.clients.undelete",
+ "firebase.clients.update",
+ "firebase.links.create",
+ "firebase.links.delete",
+ "firebase.links.list",
+ "firebase.links.update",
+ "firebase.playLinks.get",
+ "firebase.playLinks.list",
+ "firebase.playLinks.update",
+ "firebase.projects.delete",
+ "firebase.projects.get",
+ "firebase.projects.update",
+ "firebaseabt.experimentresults.get",
+ "firebaseabt.experiments.create",
+ "firebaseabt.experiments.delete",
+ "firebaseabt.experiments.get",
+ "firebaseabt.experiments.list",
+ "firebaseabt.experiments.update",
+ "firebaseabt.projectmetadata.get",
+ "firebaseanalytics.resources.googleAnalyticsEdit",
+ "firebaseanalytics.resources.googleAnalyticsReadAndAnalyze",
+ "firebaseappcheck.appAttestConfig.get",
+ "firebaseappcheck.appAttestConfig.update",
+ "firebaseappcheck.debugTokens.get",
+ "firebaseappcheck.debugTokens.update",
+ "firebaseappcheck.deviceCheckConfig.get",
+ "firebaseappcheck.deviceCheckConfig.update",
+ "firebaseappcheck.playIntegrityConfig.get",
+ "firebaseappcheck.playIntegrityConfig.update",
+ "firebaseappcheck.recaptchaEnterpriseConfig.get",
+ "firebaseappcheck.recaptchaEnterpriseConfig.update",
+ "firebaseappcheck.recaptchaV3Config.get",
+ "firebaseappcheck.recaptchaV3Config.update",
+ "firebaseappcheck.safetyNetConfig.get",
+ "firebaseappcheck.safetyNetConfig.update",
+ "firebaseappcheck.services.get",
+ "firebaseappcheck.services.update",
+ "firebaseappdistro.groups.list",
+ "firebaseappdistro.groups.update",
+ "firebaseappdistro.releases.list",
+ "firebaseappdistro.releases.update",
+ "firebaseappdistro.testers.list",
+ "firebaseappdistro.testers.update",
+ "firebaseauth.configs.create",
+ "firebaseauth.configs.get",
+ "firebaseauth.configs.getHashConfig",
+ "firebaseauth.configs.update",
+ "firebaseauth.users.create",
+ "firebaseauth.users.createSession",
+ "firebaseauth.users.delete",
+ "firebaseauth.users.get",
+ "firebaseauth.users.sendEmail",
+ "firebaseauth.users.update",
+ "firebasecrash.issues.update",
+ "firebasecrash.reports.get",
+ "firebasecrashlytics.config.get",
+ "firebasecrashlytics.config.update",
+ "firebasecrashlytics.data.get",
+ "firebasecrashlytics.issues.get",
+ "firebasecrashlytics.issues.list",
+ "firebasecrashlytics.issues.update",
+ "firebasecrashlytics.sessions.get",
+ "firebasedatabase.instances.create",
+ "firebasedatabase.instances.delete",
+ "firebasedatabase.instances.disable",
+ "firebasedatabase.instances.get",
+ "firebasedatabase.instances.list",
+ "firebasedatabase.instances.reenable",
+ "firebasedatabase.instances.undelete",
+ "firebasedatabase.instances.update",
+ "firebasedynamiclinks.destinations.list",
+ "firebasedynamiclinks.destinations.update",
+ "firebasedynamiclinks.domains.create",
+ "firebasedynamiclinks.domains.delete",
+ "firebasedynamiclinks.domains.get",
+ "firebasedynamiclinks.domains.list",
+ "firebasedynamiclinks.domains.update",
+ "firebasedynamiclinks.links.create",
+ "firebasedynamiclinks.links.get",
+ "firebasedynamiclinks.links.list",
+ "firebasedynamiclinks.links.update",
+ "firebasedynamiclinks.stats.get",
+ "firebaseextensions.configs.create",
+ "firebaseextensions.configs.delete",
+ "firebaseextensions.configs.list",
+ "firebaseextensions.configs.update",
+ "firebasehosting.sites.create",
+ "firebasehosting.sites.delete",
+ "firebasehosting.sites.get",
+ "firebasehosting.sites.list",
+ "firebasehosting.sites.update",
+ "firebaseinappmessaging.campaigns.create",
+ "firebaseinappmessaging.campaigns.delete",
+ "firebaseinappmessaging.campaigns.get",
+ "firebaseinappmessaging.campaigns.list",
+ "firebaseinappmessaging.campaigns.update",
+ "firebasemessagingcampaigns.campaigns.create",
+ "firebasemessagingcampaigns.campaigns.delete",
+ "firebasemessagingcampaigns.campaigns.get",
+ "firebasemessagingcampaigns.campaigns.list",
+ "firebasemessagingcampaigns.campaigns.start",
+ "firebasemessagingcampaigns.campaigns.stop",
+ "firebasemessagingcampaigns.campaigns.update",
+ "firebaseml.compressionjobs.create",
+ "firebaseml.compressionjobs.delete",
+ "firebaseml.compressionjobs.get",
+ "firebaseml.compressionjobs.list",
+ "firebaseml.compressionjobs.start",
+ "firebaseml.compressionjobs.update",
+ "firebaseml.models.create",
+ "firebaseml.models.delete",
+ "firebaseml.models.get",
+ "firebaseml.models.list",
+ "firebaseml.modelversions.create",
+ "firebaseml.modelversions.get",
+ "firebaseml.modelversions.list",
+ "firebaseml.modelversions.update",
+ "firebasenotifications.messages.create",
+ "firebasenotifications.messages.delete",
+ "firebasenotifications.messages.get",
+ "firebasenotifications.messages.list",
+ "firebasenotifications.messages.update",
+ "firebaseperformance.config.update",
+ "firebaseperformance.data.get",
+ "firebaserules.releases.create",
+ "firebaserules.releases.delete",
+ "firebaserules.releases.get",
+ "firebaserules.releases.getExecutable",
+ "firebaserules.releases.list",
+ "firebaserules.releases.update",
+ "firebaserules.rulesets.create",
+ "firebaserules.rulesets.delete",
+ "firebaserules.rulesets.get",
+ "firebaserules.rulesets.list",
+ "firebaserules.rulesets.test",
+ "firebasestorage.buckets.addFirebase",
+ "firebasestorage.buckets.get",
+ "firebasestorage.buckets.list",
+ "firebasestorage.buckets.removeFirebase",
+ "fleetengine.deliveryvehicles.create",
+ "fleetengine.deliveryvehicles.get",
+ "fleetengine.deliveryvehicles.list",
+ "fleetengine.deliveryvehicles.update",
+ "fleetengine.deliveryvehicles.updateLocation",
+ "fleetengine.deliveryvehicles.updateVehicleStops",
+ "fleetengine.tasks.create",
+ "fleetengine.tasks.get",
+ "fleetengine.tasks.list",
+ "fleetengine.tasks.searchWithTrackingId",
+ "fleetengine.tasks.update",
+ "fleetengine.trips.create",
+ "fleetengine.trips.get",
+ "fleetengine.trips.search",
+ "fleetengine.trips.update",
+ "fleetengine.trips.updateState",
+ "fleetengine.vehicles.create",
+ "fleetengine.vehicles.get",
+ "fleetengine.vehicles.list",
+ "fleetengine.vehicles.search",
+ "fleetengine.vehicles.searchFuzzed",
+ "fleetengine.vehicles.update",
+ "fleetengine.vehicles.updateLocation",
+ "gameservices.gameServerClusters.create",
+ "gameservices.gameServerClusters.delete",
+ "gameservices.gameServerClusters.get",
+ "gameservices.gameServerClusters.list",
+ "gameservices.gameServerClusters.update",
+ "gameservices.gameServerConfigs.create",
+ "gameservices.gameServerConfigs.delete",
+ "gameservices.gameServerConfigs.get",
+ "gameservices.gameServerConfigs.list",
+ "gameservices.gameServerDeployments.create",
+ "gameservices.gameServerDeployments.delete",
+ "gameservices.gameServerDeployments.get",
+ "gameservices.gameServerDeployments.list",
+ "gameservices.gameServerDeployments.rollout",
+ "gameservices.gameServerDeployments.update",
+ "gameservices.locations.get",
+ "gameservices.locations.list",
+ "gameservices.operations.cancel",
+ "gameservices.operations.delete",
+ "gameservices.operations.get",
+ "gameservices.operations.list",
+ "gameservices.realms.create",
+ "gameservices.realms.delete",
+ "gameservices.realms.get",
+ "gameservices.realms.list",
+ "gameservices.realms.update",
+ "genomics.datasets.create",
+ "genomics.datasets.delete",
+ "genomics.datasets.get",
+ "genomics.datasets.getIamPolicy",
+ "genomics.datasets.list",
+ "genomics.datasets.setIamPolicy",
+ "genomics.datasets.update",
+ "genomics.operations.cancel",
+ "genomics.operations.create",
+ "genomics.operations.get",
+ "genomics.operations.list",
+ "gkebackup.backupPlans.create",
+ "gkebackup.backupPlans.delete",
+ "gkebackup.backupPlans.get",
+ "gkebackup.backupPlans.getIamPolicy",
+ "gkebackup.backupPlans.list",
+ "gkebackup.backupPlans.setIamPolicy",
+ "gkebackup.backupPlans.update",
+ "gkebackup.backups.create",
+ "gkebackup.backups.delete",
+ "gkebackup.backups.get",
+ "gkebackup.backups.list",
+ "gkebackup.backups.update",
+ "gkebackup.locations.get",
+ "gkebackup.locations.list",
+ "gkebackup.operations.cancel",
+ "gkebackup.operations.delete",
+ "gkebackup.operations.get",
+ "gkebackup.operations.list",
+ "gkebackup.restorePlans.create",
+ "gkebackup.restorePlans.delete",
+ "gkebackup.restorePlans.get",
+ "gkebackup.restorePlans.getIamPolicy",
+ "gkebackup.restorePlans.list",
+ "gkebackup.restorePlans.setIamPolicy",
+ "gkebackup.restorePlans.update",
+ "gkebackup.restores.create",
+ "gkebackup.restores.delete",
+ "gkebackup.restores.get",
+ "gkebackup.restores.list",
+ "gkebackup.restores.update",
+ "gkebackup.volumeBackups.get",
+ "gkebackup.volumeBackups.list",
+ "gkebackup.volumeRestores.get",
+ "gkebackup.volumeRestores.list",
+ "gkehub.endpoints.connect",
+ "gkehub.features.create",
+ "gkehub.features.delete",
+ "gkehub.features.get",
+ "gkehub.features.getIamPolicy",
+ "gkehub.features.list",
+ "gkehub.features.setIamPolicy",
+ "gkehub.features.update",
+ "gkehub.fleet.create",
+ "gkehub.fleet.delete",
+ "gkehub.fleet.get",
+ "gkehub.fleet.update",
+ "gkehub.gateway.delete",
+ "gkehub.gateway.get",
+ "gkehub.gateway.getIamPolicy",
+ "gkehub.gateway.patch",
+ "gkehub.gateway.post",
+ "gkehub.gateway.put",
+ "gkehub.gateway.setIamPolicy",
+ "gkehub.locations.get",
+ "gkehub.locations.list",
+ "gkehub.memberships.create",
+ "gkehub.memberships.delete",
+ "gkehub.memberships.generateConnectManifest",
+ "gkehub.memberships.get",
+ "gkehub.memberships.getIamPolicy",
+ "gkehub.memberships.list",
+ "gkehub.memberships.setIamPolicy",
+ "gkehub.memberships.update",
+ "gkehub.operations.cancel",
+ "gkehub.operations.delete",
+ "gkehub.operations.get",
+ "gkehub.operations.list",
+ "gkemulticloud.awsClusters.create",
+ "gkemulticloud.awsClusters.delete",
+ "gkemulticloud.awsClusters.generateAccessToken",
+ "gkemulticloud.awsClusters.get",
+ "gkemulticloud.awsClusters.getAdminKubeconfig",
+ "gkemulticloud.awsClusters.list",
+ "gkemulticloud.awsClusters.update",
+ "gkemulticloud.awsNodePools.create",
+ "gkemulticloud.awsNodePools.delete",
+ "gkemulticloud.awsNodePools.get",
+ "gkemulticloud.awsNodePools.list",
+ "gkemulticloud.awsNodePools.update",
+ "gkemulticloud.awsServerConfigs.get",
+ "gkemulticloud.azureClients.create",
+ "gkemulticloud.azureClients.delete",
+ "gkemulticloud.azureClients.get",
+ "gkemulticloud.azureClients.list",
+ "gkemulticloud.azureClusters.create",
+ "gkemulticloud.azureClusters.delete",
+ "gkemulticloud.azureClusters.generateAccessToken",
+ "gkemulticloud.azureClusters.get",
+ "gkemulticloud.azureClusters.getAdminKubeconfig",
+ "gkemulticloud.azureClusters.list",
+ "gkemulticloud.azureClusters.update",
+ "gkemulticloud.azureNodePools.create",
+ "gkemulticloud.azureNodePools.delete",
+ "gkemulticloud.azureNodePools.get",
+ "gkemulticloud.azureNodePools.list",
+ "gkemulticloud.azureNodePools.update",
+ "gkemulticloud.azureServerConfigs.get",
+ "gkemulticloud.operations.cancel",
+ "gkemulticloud.operations.delete",
+ "gkemulticloud.operations.get",
+ "gkemulticloud.operations.list",
+ "gkemulticloud.operations.wait",
+ "gkeonprem.bareMetalAdminClusters.create",
+ "gkeonprem.bareMetalAdminClusters.enroll",
+ "gkeonprem.bareMetalAdminClusters.get",
+ "gkeonprem.bareMetalAdminClusters.getIamPolicy",
+ "gkeonprem.bareMetalAdminClusters.list",
+ "gkeonprem.bareMetalAdminClusters.queryVersionConfig",
+ "gkeonprem.bareMetalAdminClusters.setIamPolicy",
+ "gkeonprem.bareMetalAdminClusters.unenroll",
+ "gkeonprem.bareMetalAdminClusters.update",
+ "gkeonprem.bareMetalClusters.create",
+ "gkeonprem.bareMetalClusters.delete",
+ "gkeonprem.bareMetalClusters.enroll",
+ "gkeonprem.bareMetalClusters.get",
+ "gkeonprem.bareMetalClusters.getIamPolicy",
+ "gkeonprem.bareMetalClusters.list",
+ "gkeonprem.bareMetalClusters.queryVersionConfig",
+ "gkeonprem.bareMetalClusters.setIamPolicy",
+ "gkeonprem.bareMetalClusters.unenroll",
+ "gkeonprem.bareMetalClusters.update",
+ "gkeonprem.bareMetalNodePools.create",
+ "gkeonprem.bareMetalNodePools.delete",
+ "gkeonprem.bareMetalNodePools.get",
+ "gkeonprem.bareMetalNodePools.getIamPolicy",
+ "gkeonprem.bareMetalNodePools.list",
+ "gkeonprem.bareMetalNodePools.setIamPolicy",
+ "gkeonprem.bareMetalNodePools.update",
+ "gkeonprem.locations.get",
+ "gkeonprem.locations.list",
+ "gkeonprem.operations.cancel",
+ "gkeonprem.operations.delete",
+ "gkeonprem.operations.get",
+ "gkeonprem.operations.list",
+ "gkeonprem.vmwareAdminClusters.enroll",
+ "gkeonprem.vmwareAdminClusters.get",
+ "gkeonprem.vmwareAdminClusters.getIamPolicy",
+ "gkeonprem.vmwareAdminClusters.list",
+ "gkeonprem.vmwareAdminClusters.setIamPolicy",
+ "gkeonprem.vmwareAdminClusters.unenroll",
+ "gkeonprem.vmwareAdminClusters.update",
+ "gkeonprem.vmwareClusters.create",
+ "gkeonprem.vmwareClusters.delete",
+ "gkeonprem.vmwareClusters.enroll",
+ "gkeonprem.vmwareClusters.get",
+ "gkeonprem.vmwareClusters.getIamPolicy",
+ "gkeonprem.vmwareClusters.list",
+ "gkeonprem.vmwareClusters.queryVersionConfig",
+ "gkeonprem.vmwareClusters.setIamPolicy",
+ "gkeonprem.vmwareClusters.unenroll",
+ "gkeonprem.vmwareClusters.update",
+ "gkeonprem.vmwareNodePools.create",
+ "gkeonprem.vmwareNodePools.delete",
+ "gkeonprem.vmwareNodePools.get",
+ "gkeonprem.vmwareNodePools.getIamPolicy",
+ "gkeonprem.vmwareNodePools.list",
+ "gkeonprem.vmwareNodePools.setIamPolicy",
+ "gkeonprem.vmwareNodePools.update",
+ "gsuiteaddons.authorizations.get",
+ "gsuiteaddons.deployments.create",
+ "gsuiteaddons.deployments.delete",
+ "gsuiteaddons.deployments.execute",
+ "gsuiteaddons.deployments.get",
+ "gsuiteaddons.deployments.install",
+ "gsuiteaddons.deployments.installStatus",
+ "gsuiteaddons.deployments.list",
+ "gsuiteaddons.deployments.uninstall",
+ "gsuiteaddons.deployments.update",
+ "healthcare.annotationStores.create",
+ "healthcare.annotationStores.delete",
+ "healthcare.annotationStores.evaluate",
+ "healthcare.annotationStores.export",
+ "healthcare.annotationStores.get",
+ "healthcare.annotationStores.getIamPolicy",
+ "healthcare.annotationStores.import",
+ "healthcare.annotationStores.list",
+ "healthcare.annotationStores.setIamPolicy",
+ "healthcare.annotationStores.update",
+ "healthcare.annotations.create",
+ "healthcare.annotations.delete",
+ "healthcare.annotations.get",
+ "healthcare.annotations.list",
+ "healthcare.annotations.update",
+ "healthcare.attributeDefinitions.create",
+ "healthcare.attributeDefinitions.delete",
+ "healthcare.attributeDefinitions.get",
+ "healthcare.attributeDefinitions.list",
+ "healthcare.attributeDefinitions.update",
+ "healthcare.consentArtifacts.create",
+ "healthcare.consentArtifacts.delete",
+ "healthcare.consentArtifacts.get",
+ "healthcare.consentArtifacts.list",
+ "healthcare.consentStores.checkDataAccess",
+ "healthcare.consentStores.create",
+ "healthcare.consentStores.delete",
+ "healthcare.consentStores.evaluateUserConsents",
+ "healthcare.consentStores.get",
+ "healthcare.consentStores.getIamPolicy",
+ "healthcare.consentStores.list",
+ "healthcare.consentStores.queryAccessibleData",
+ "healthcare.consentStores.setIamPolicy",
+ "healthcare.consentStores.update",
+ "healthcare.consents.activate",
+ "healthcare.consents.create",
+ "healthcare.consents.delete",
+ "healthcare.consents.get",
+ "healthcare.consents.list",
+ "healthcare.consents.reject",
+ "healthcare.consents.revoke",
+ "healthcare.consents.update",
+ "healthcare.datasets.create",
+ "healthcare.datasets.deidentify",
+ "healthcare.datasets.delete",
+ "healthcare.datasets.get",
+ "healthcare.datasets.getIamPolicy",
+ "healthcare.datasets.list",
+ "healthcare.datasets.setIamPolicy",
+ "healthcare.datasets.update",
+ "healthcare.dicomStores.create",
+ "healthcare.dicomStores.deidentify",
+ "healthcare.dicomStores.delete",
+ "healthcare.dicomStores.dicomWebDelete",
+ "healthcare.dicomStores.dicomWebRead",
+ "healthcare.dicomStores.dicomWebWrite",
+ "healthcare.dicomStores.export",
+ "healthcare.dicomStores.get",
+ "healthcare.dicomStores.getIamPolicy",
+ "healthcare.dicomStores.import",
+ "healthcare.dicomStores.list",
+ "healthcare.dicomStores.setIamPolicy",
+ "healthcare.dicomStores.update",
+ "healthcare.fhirResources.create",
+ "healthcare.fhirResources.delete",
+ "healthcare.fhirResources.get",
+ "healthcare.fhirResources.patch",
+ "healthcare.fhirResources.purge",
+ "healthcare.fhirResources.translateConceptMap",
+ "healthcare.fhirResources.update",
+ "healthcare.fhirStores.configureSearch",
+ "healthcare.fhirStores.create",
+ "healthcare.fhirStores.deidentify",
+ "healthcare.fhirStores.delete",
+ "healthcare.fhirStores.executeBundle",
+ "healthcare.fhirStores.export",
+ "healthcare.fhirStores.get",
+ "healthcare.fhirStores.getIamPolicy",
+ "healthcare.fhirStores.import",
+ "healthcare.fhirStores.list",
+ "healthcare.fhirStores.searchResources",
+ "healthcare.fhirStores.setIamPolicy",
+ "healthcare.fhirStores.update",
+ "healthcare.hl7V2Messages.create",
+ "healthcare.hl7V2Messages.delete",
+ "healthcare.hl7V2Messages.get",
+ "healthcare.hl7V2Messages.ingest",
+ "healthcare.hl7V2Messages.list",
+ "healthcare.hl7V2Messages.update",
+ "healthcare.hl7V2Stores.create",
+ "healthcare.hl7V2Stores.delete",
+ "healthcare.hl7V2Stores.get",
+ "healthcare.hl7V2Stores.getIamPolicy",
+ "healthcare.hl7V2Stores.import",
+ "healthcare.hl7V2Stores.list",
+ "healthcare.hl7V2Stores.setIamPolicy",
+ "healthcare.hl7V2Stores.update",
+ "healthcare.locations.get",
+ "healthcare.locations.list",
+ "healthcare.nlpservice.analyzeEntities",
+ "healthcare.operations.cancel",
+ "healthcare.operations.get",
+ "healthcare.operations.list",
+ "healthcare.userDataMappings.archive",
+ "healthcare.userDataMappings.create",
+ "healthcare.userDataMappings.delete",
+ "healthcare.userDataMappings.get",
+ "healthcare.userDataMappings.list",
+ "healthcare.userDataMappings.update",
+ "iam.denypolicies.create",
+ "iam.denypolicies.delete",
+ "iam.denypolicies.get",
+ "iam.denypolicies.list",
+ "iam.denypolicies.update",
+ "iam.roles.create",
+ "iam.roles.delete",
+ "iam.roles.get",
+ "iam.roles.list",
+ "iam.roles.undelete",
+ "iam.roles.update",
+ "iam.serviceAccountKeys.create",
+ "iam.serviceAccountKeys.delete",
+ "iam.serviceAccountKeys.disable",
+ "iam.serviceAccountKeys.enable",
+ "iam.serviceAccountKeys.get",
+ "iam.serviceAccountKeys.list",
+ "iam.serviceAccounts.actAs",
+ "iam.serviceAccounts.create",
+ "iam.serviceAccounts.delete",
+ "iam.serviceAccounts.disable",
+ "iam.serviceAccounts.enable",
+ "iam.serviceAccounts.get",
+ "iam.serviceAccounts.getAccessToken",
+ "iam.serviceAccounts.getIamPolicy",
+ "iam.serviceAccounts.getOpenIdToken",
+ "iam.serviceAccounts.implicitDelegation",
+ "iam.serviceAccounts.list",
+ "iam.serviceAccounts.setIamPolicy",
+ "iam.serviceAccounts.signBlob",
+ "iam.serviceAccounts.signJwt",
+ "iam.serviceAccounts.undelete",
+ "iam.serviceAccounts.update",
+ "iap.projects.getSettings",
+ "iap.projects.updateSettings",
+ "iap.tunnel.getIamPolicy",
+ "iap.tunnel.setIamPolicy",
+ "iap.tunnelDestGroups.accessViaIAP",
+ "iap.tunnelDestGroups.create",
+ "iap.tunnelDestGroups.delete",
+ "iap.tunnelDestGroups.get",
+ "iap.tunnelDestGroups.getIamPolicy",
+ "iap.tunnelDestGroups.list",
+ "iap.tunnelDestGroups.setIamPolicy",
+ "iap.tunnelDestGroups.update",
+ "iap.tunnelInstances.accessViaIAP",
+ "iap.tunnelInstances.getIamPolicy",
+ "iap.tunnelInstances.setIamPolicy",
+ "iap.tunnelLocations.getIamPolicy",
+ "iap.tunnelLocations.setIamPolicy",
+ "iap.tunnelZones.getIamPolicy",
+ "iap.tunnelZones.setIamPolicy",
+ "iap.web.getIamPolicy",
+ "iap.web.getSettings",
+ "iap.web.setIamPolicy",
+ "iap.web.updateSettings",
+ "iap.webServiceVersions.accessViaIAP",
+ "iap.webServiceVersions.getIamPolicy",
+ "iap.webServiceVersions.getSettings",
+ "iap.webServiceVersions.setIamPolicy",
+ "iap.webServiceVersions.updateSettings",
+ "iap.webServices.getIamPolicy",
+ "iap.webServices.getSettings",
+ "iap.webServices.setIamPolicy",
+ "iap.webServices.updateSettings",
+ "iap.webTypes.getIamPolicy",
+ "iap.webTypes.getSettings",
+ "iap.webTypes.setIamPolicy",
+ "iap.webTypes.updateSettings",
+ "identitytoolkit.tenants.create",
+ "identitytoolkit.tenants.delete",
+ "identitytoolkit.tenants.get",
+ "identitytoolkit.tenants.getIamPolicy",
+ "identitytoolkit.tenants.list",
+ "identitytoolkit.tenants.setIamPolicy",
+ "identitytoolkit.tenants.update",
+ "ids.endpoints.create",
+ "ids.endpoints.delete",
+ "ids.endpoints.get",
+ "ids.endpoints.getIamPolicy",
+ "ids.endpoints.list",
+ "ids.endpoints.setIamPolicy",
+ "ids.endpoints.update",
+ "ids.locations.get",
+ "ids.locations.list",
+ "ids.operations.cancel",
+ "ids.operations.delete",
+ "ids.operations.get",
+ "ids.operations.list",
+ "integrations.apigeeAuthConfigs.create",
+ "integrations.apigeeAuthConfigs.delete",
+ "integrations.apigeeAuthConfigs.get",
+ "integrations.apigeeAuthConfigs.list",
+ "integrations.apigeeAuthConfigs.update",
+ "integrations.apigeeCertificates.create",
+ "integrations.apigeeCertificates.delete",
+ "integrations.apigeeCertificates.get",
+ "integrations.apigeeCertificates.list",
+ "integrations.apigeeCertificates.update",
+ "integrations.apigeeExecutions.list",
+ "integrations.apigeeIntegrationVers.create",
+ "integrations.apigeeIntegrationVers.delete",
+ "integrations.apigeeIntegrationVers.deploy",
+ "integrations.apigeeIntegrationVers.get",
+ "integrations.apigeeIntegrationVers.list",
+ "integrations.apigeeIntegrationVers.update",
+ "integrations.apigeeIntegrations.invoke",
+ "integrations.apigeeIntegrations.list",
+ "integrations.apigeeSfdcChannels.create",
+ "integrations.apigeeSfdcChannels.delete",
+ "integrations.apigeeSfdcChannels.get",
+ "integrations.apigeeSfdcChannels.list",
+ "integrations.apigeeSfdcChannels.update",
+ "integrations.apigeeSfdcInstances.create",
+ "integrations.apigeeSfdcInstances.delete",
+ "integrations.apigeeSfdcInstances.get",
+ "integrations.apigeeSfdcInstances.list",
+ "integrations.apigeeSfdcInstances.update",
+ "integrations.apigeeSuspensions.lift",
+ "integrations.apigeeSuspensions.list",
+ "integrations.apigeeSuspensions.resolve",
+ "integrations.authConfigs.create",
+ "integrations.authConfigs.delete",
+ "integrations.authConfigs.get",
+ "integrations.authConfigs.list",
+ "integrations.authConfigs.update",
+ "integrations.certificates.create",
+ "integrations.certificates.delete",
+ "integrations.certificates.get",
+ "integrations.certificates.list",
+ "integrations.certificates.update",
+ "integrations.executions.get",
+ "integrations.executions.list",
+ "integrations.integrationVersions.create",
+ "integrations.integrationVersions.delete",
+ "integrations.integrationVersions.deploy",
+ "integrations.integrationVersions.get",
+ "integrations.integrationVersions.invoke",
+ "integrations.integrationVersions.list",
+ "integrations.integrationVersions.update",
+ "integrations.integrations.create",
+ "integrations.integrations.delete",
+ "integrations.integrations.deploy",
+ "integrations.integrations.get",
+ "integrations.integrations.invoke",
+ "integrations.integrations.list",
+ "integrations.integrations.update",
+ "integrations.securityAuthConfigs.create",
+ "integrations.securityAuthConfigs.delete",
+ "integrations.securityAuthConfigs.get",
+ "integrations.securityAuthConfigs.list",
+ "integrations.securityAuthConfigs.update",
+ "integrations.securityExecutions.cancel",
+ "integrations.securityExecutions.get",
+ "integrations.securityExecutions.list",
+ "integrations.securityIntegTempVers.create",
+ "integrations.securityIntegTempVers.get",
+ "integrations.securityIntegTempVers.list",
+ "integrations.securityIntegrationVers.create",
+ "integrations.securityIntegrationVers.deploy",
+ "integrations.securityIntegrationVers.get",
+ "integrations.securityIntegrationVers.list",
+ "integrations.securityIntegrationVers.update",
+ "integrations.securityIntegrations.invoke",
+ "integrations.securityIntegrations.list",
+ "integrations.sfdcChannels.create",
+ "integrations.sfdcChannels.delete",
+ "integrations.sfdcChannels.get",
+ "integrations.sfdcChannels.list",
+ "integrations.sfdcChannels.update",
+ "integrations.sfdcInstances.create",
+ "integrations.sfdcInstances.delete",
+ "integrations.sfdcInstances.get",
+ "integrations.sfdcInstances.list",
+ "integrations.sfdcInstances.update",
+ "integrations.suspensions.lift",
+ "integrations.suspensions.list",
+ "integrations.suspensions.resolve",
+ "issuerswitch.complaintTransactions.list",
+ "issuerswitch.complaints.create",
+ "issuerswitch.complaints.resolve",
+ "issuerswitch.disputes.create",
+ "issuerswitch.disputes.resolve",
+ "issuerswitch.financialTransactions.list",
+ "issuerswitch.mandateTransactions.list",
+ "issuerswitch.metadataTransactions.list",
+ "issuerswitch.operations.cancel",
+ "issuerswitch.operations.delete",
+ "issuerswitch.operations.get",
+ "issuerswitch.operations.list",
+ "issuerswitch.operations.wait",
+ "issuerswitch.ruleMetadata.list",
+ "issuerswitch.ruleMetadataValues.create",
+ "issuerswitch.ruleMetadataValues.delete",
+ "issuerswitch.ruleMetadataValues.list",
+ "issuerswitch.rules.list",
+ "krmapihosting.krmApiHosts.create",
+ "krmapihosting.krmApiHosts.delete",
+ "krmapihosting.krmApiHosts.get",
+ "krmapihosting.krmApiHosts.getIamPolicy",
+ "krmapihosting.krmApiHosts.list",
+ "krmapihosting.krmApiHosts.setIamPolicy",
+ "krmapihosting.krmApiHosts.update",
+ "krmapihosting.locations.get",
+ "krmapihosting.locations.list",
+ "krmapihosting.operations.cancel",
+ "krmapihosting.operations.delete",
+ "krmapihosting.operations.get",
+ "krmapihosting.operations.list",
+ "lifesciences.operations.cancel",
+ "lifesciences.operations.get",
+ "lifesciences.operations.list",
+ "lifesciences.workflows.run",
+ "livestream.channels.create",
+ "livestream.channels.delete",
+ "livestream.channels.get",
+ "livestream.channels.list",
+ "livestream.channels.start",
+ "livestream.channels.stop",
+ "livestream.channels.update",
+ "livestream.events.create",
+ "livestream.events.delete",
+ "livestream.events.get",
+ "livestream.events.list",
+ "livestream.inputs.create",
+ "livestream.inputs.delete",
+ "livestream.inputs.get",
+ "livestream.inputs.list",
+ "livestream.inputs.update",
+ "livestream.locations.get",
+ "livestream.locations.list",
+ "livestream.operations.cancel",
+ "livestream.operations.delete",
+ "livestream.operations.get",
+ "livestream.operations.list",
+ "logging.buckets.copyLogEntries",
+ "logging.buckets.create",
+ "logging.buckets.delete",
+ "logging.buckets.get",
+ "logging.buckets.list",
+ "logging.buckets.undelete",
+ "logging.buckets.update",
+ "logging.buckets.write",
+ "logging.exclusions.create",
+ "logging.exclusions.delete",
+ "logging.exclusions.get",
+ "logging.exclusions.list",
+ "logging.exclusions.update",
+ "logging.fields.access",
+ "logging.links.create",
+ "logging.links.delete",
+ "logging.links.get",
+ "logging.links.list",
+ "logging.locations.get",
+ "logging.locations.list",
+ "logging.logEntries.create",
+ "logging.logEntries.download",
+ "logging.logEntries.list",
+ "logging.logMetrics.create",
+ "logging.logMetrics.delete",
+ "logging.logMetrics.get",
+ "logging.logMetrics.list",
+ "logging.logMetrics.update",
+ "logging.logServiceIndexes.list",
+ "logging.logServices.list",
+ "logging.logs.delete",
+ "logging.logs.list",
+ "logging.notificationRules.create",
+ "logging.notificationRules.delete",
+ "logging.notificationRules.get",
+ "logging.notificationRules.list",
+ "logging.notificationRules.update",
+ "logging.operations.cancel",
+ "logging.operations.get",
+ "logging.operations.list",
+ "logging.privateLogEntries.list",
+ "logging.queries.create",
+ "logging.queries.delete",
+ "logging.queries.get",
+ "logging.queries.list",
+ "logging.queries.listShared",
+ "logging.queries.share",
+ "logging.queries.update",
+ "logging.queries.updateShared",
+ "logging.settings.get",
+ "logging.settings.update",
+ "logging.sinks.create",
+ "logging.sinks.delete",
+ "logging.sinks.get",
+ "logging.sinks.list",
+ "logging.sinks.update",
+ "logging.usage.get",
+ "logging.views.access",
+ "logging.views.create",
+ "logging.views.delete",
+ "logging.views.get",
+ "logging.views.list",
+ "logging.views.listLogs",
+ "logging.views.listResourceKeys",
+ "logging.views.listResourceValues",
+ "logging.views.update",
+ "managedidentities.backups.create",
+ "managedidentities.backups.delete",
+ "managedidentities.backups.get",
+ "managedidentities.backups.getIamPolicy",
+ "managedidentities.backups.list",
+ "managedidentities.backups.setIamPolicy",
+ "managedidentities.backups.update",
+ "managedidentities.domains.attachTrust",
+ "managedidentities.domains.checkMigrationPermission",
+ "managedidentities.domains.create",
+ "managedidentities.domains.createTagBinding",
+ "managedidentities.domains.delete",
+ "managedidentities.domains.deleteTagBinding",
+ "managedidentities.domains.detachTrust",
+ "managedidentities.domains.disableMigration",
+ "managedidentities.domains.domainJoinMachine",
+ "managedidentities.domains.enableMigration",
+ "managedidentities.domains.extendSchema",
+ "managedidentities.domains.get",
+ "managedidentities.domains.getIamPolicy",
+ "managedidentities.domains.list",
+ "managedidentities.domains.listEffectiveTags",
+ "managedidentities.domains.listTagBindings",
+ "managedidentities.domains.reconfigureTrust",
+ "managedidentities.domains.resetpassword",
+ "managedidentities.domains.restore",
+ "managedidentities.domains.setIamPolicy",
+ "managedidentities.domains.update",
+ "managedidentities.domains.updateLDAPSSettings",
+ "managedidentities.domains.validateTrust",
+ "managedidentities.locations.get",
+ "managedidentities.locations.list",
+ "managedidentities.operations.cancel",
+ "managedidentities.operations.delete",
+ "managedidentities.operations.get",
+ "managedidentities.operations.list",
+ "managedidentities.peerings.create",
+ "managedidentities.peerings.delete",
+ "managedidentities.peerings.get",
+ "managedidentities.peerings.getIamPolicy",
+ "managedidentities.peerings.list",
+ "managedidentities.peerings.setIamPolicy",
+ "managedidentities.peerings.update",
+ "managedidentities.sqlintegrations.get",
+ "managedidentities.sqlintegrations.list",
+ "mapsadmin.clientMaps.create",
+ "mapsadmin.clientMaps.delete",
+ "mapsadmin.clientMaps.get",
+ "mapsadmin.clientMaps.list",
+ "mapsadmin.clientMaps.update",
+ "mapsadmin.clientStyleActivationRules.update",
+ "mapsadmin.clientStyleSheetSnapshots.list",
+ "mapsadmin.clientStyleSheetSnapshots.update",
+ "mapsadmin.clientStyles.create",
+ "mapsadmin.clientStyles.delete",
+ "mapsadmin.clientStyles.get",
+ "mapsadmin.clientStyles.list",
+ "mapsadmin.clientStyles.update",
+ "mapsadmin.styleEditorConfigs.get",
+ "mapsadmin.styleSnapshots.list",
+ "mapsadmin.styleSnapshots.update",
+ "memcache.instances.applyParameters",
+ "memcache.instances.applySoftwareUpdate",
+ "memcache.instances.create",
+ "memcache.instances.delete",
+ "memcache.instances.get",
+ "memcache.instances.list",
+ "memcache.instances.rescheduleMaintenance",
+ "memcache.instances.update",
+ "memcache.instances.updateParameters",
+ "memcache.locations.get",
+ "memcache.locations.list",
+ "memcache.operations.cancel",
+ "memcache.operations.delete",
+ "memcache.operations.get",
+ "memcache.operations.list",
+ "meshconfig.projects.get",
+ "meshconfig.projects.init",
+ "metastore.backups.create",
+ "metastore.backups.delete",
+ "metastore.backups.get",
+ "metastore.backups.getIamPolicy",
+ "metastore.backups.list",
+ "metastore.backups.setIamPolicy",
+ "metastore.backups.use",
+ "metastore.databases.create",
+ "metastore.databases.delete",
+ "metastore.databases.get",
+ "metastore.databases.getIamPolicy",
+ "metastore.databases.list",
+ "metastore.databases.setIamPolicy",
+ "metastore.databases.update",
+ "metastore.federations.create",
+ "metastore.federations.delete",
+ "metastore.federations.get",
+ "metastore.federations.getIamPolicy",
+ "metastore.federations.list",
+ "metastore.federations.setIamPolicy",
+ "metastore.federations.update",
+ "metastore.federations.use",
+ "metastore.imports.create",
+ "metastore.imports.get",
+ "metastore.imports.list",
+ "metastore.imports.update",
+ "metastore.locations.get",
+ "metastore.locations.list",
+ "metastore.operations.cancel",
+ "metastore.operations.delete",
+ "metastore.operations.get",
+ "metastore.operations.list",
+ "metastore.services.create",
+ "metastore.services.delete",
+ "metastore.services.export",
+ "metastore.services.get",
+ "metastore.services.getIamPolicy",
+ "metastore.services.list",
+ "metastore.services.mutateMetadata",
+ "metastore.services.queryMetadata",
+ "metastore.services.restore",
+ "metastore.services.setIamPolicy",
+ "metastore.services.update",
+ "metastore.services.use",
+ "metastore.tables.create",
+ "metastore.tables.delete",
+ "metastore.tables.get",
+ "metastore.tables.getIamPolicy",
+ "metastore.tables.list",
+ "metastore.tables.setIamPolicy",
+ "metastore.tables.update",
+ "migrationcenter.assets.create",
+ "migrationcenter.assets.delete",
+ "migrationcenter.assets.get",
+ "migrationcenter.assets.list",
+ "migrationcenter.assets.reportFrames",
+ "migrationcenter.assets.update",
+ "migrationcenter.groups.create",
+ "migrationcenter.groups.delete",
+ "migrationcenter.groups.get",
+ "migrationcenter.groups.list",
+ "migrationcenter.groups.update",
+ "migrationcenter.importJobs.create",
+ "migrationcenter.importJobs.delete",
+ "migrationcenter.importJobs.get",
+ "migrationcenter.importJobs.list",
+ "migrationcenter.importJobs.update",
+ "migrationcenter.locations.get",
+ "migrationcenter.locations.list",
+ "migrationcenter.operations.cancel",
+ "migrationcenter.operations.delete",
+ "migrationcenter.operations.get",
+ "migrationcenter.operations.list",
+ "migrationcenter.sources.create",
+ "migrationcenter.sources.delete",
+ "migrationcenter.sources.get",
+ "migrationcenter.sources.list",
+ "migrationcenter.sources.update",
+ "ml.jobs.cancel",
+ "ml.jobs.create",
+ "ml.jobs.get",
+ "ml.jobs.getIamPolicy",
+ "ml.jobs.list",
+ "ml.jobs.setIamPolicy",
+ "ml.jobs.update",
+ "ml.locations.get",
+ "ml.locations.list",
+ "ml.models.create",
+ "ml.models.delete",
+ "ml.models.get",
+ "ml.models.getIamPolicy",
+ "ml.models.list",
+ "ml.models.predict",
+ "ml.models.setIamPolicy",
+ "ml.models.update",
+ "ml.operations.cancel",
+ "ml.operations.get",
+ "ml.operations.list",
+ "ml.projects.getConfig",
+ "ml.studies.create",
+ "ml.studies.delete",
+ "ml.studies.get",
+ "ml.studies.getIamPolicy",
+ "ml.studies.list",
+ "ml.studies.setIamPolicy",
+ "ml.trials.create",
+ "ml.trials.delete",
+ "ml.trials.get",
+ "ml.trials.list",
+ "ml.trials.update",
+ "ml.versions.create",
+ "ml.versions.delete",
+ "ml.versions.get",
+ "ml.versions.list",
+ "ml.versions.predict",
+ "ml.versions.update",
+ "monitoring.alertPolicies.create",
+ "monitoring.alertPolicies.delete",
+ "monitoring.alertPolicies.get",
+ "monitoring.alertPolicies.list",
+ "monitoring.alertPolicies.update",
+ "monitoring.dashboards.create",
+ "monitoring.dashboards.delete",
+ "monitoring.dashboards.get",
+ "monitoring.dashboards.list",
+ "monitoring.dashboards.update",
+ "monitoring.groups.create",
+ "monitoring.groups.delete",
+ "monitoring.groups.get",
+ "monitoring.groups.list",
+ "monitoring.groups.update",
+ "monitoring.metricDescriptors.create",
+ "monitoring.metricDescriptors.delete",
+ "monitoring.metricDescriptors.get",
+ "monitoring.metricDescriptors.list",
+ "monitoring.metricsScopes.link",
+ "monitoring.monitoredResourceDescriptors.get",
+ "monitoring.monitoredResourceDescriptors.list",
+ "monitoring.notificationChannelDescriptors.get",
+ "monitoring.notificationChannelDescriptors.list",
+ "monitoring.notificationChannels.create",
+ "monitoring.notificationChannels.delete",
+ "monitoring.notificationChannels.get",
+ "monitoring.notificationChannels.getVerificationCode",
+ "monitoring.notificationChannels.list",
+ "monitoring.notificationChannels.sendVerificationCode",
+ "monitoring.notificationChannels.update",
+ "monitoring.notificationChannels.verify",
+ "monitoring.publicWidgets.create",
+ "monitoring.publicWidgets.delete",
+ "monitoring.publicWidgets.get",
+ "monitoring.publicWidgets.list",
+ "monitoring.publicWidgets.update",
+ "monitoring.services.create",
+ "monitoring.services.delete",
+ "monitoring.services.get",
+ "monitoring.services.list",
+ "monitoring.services.update",
+ "monitoring.slos.create",
+ "monitoring.slos.delete",
+ "monitoring.slos.get",
+ "monitoring.slos.list",
+ "monitoring.slos.update",
+ "monitoring.timeSeries.create",
+ "monitoring.timeSeries.list",
+ "monitoring.uptimeCheckConfigs.create",
+ "monitoring.uptimeCheckConfigs.delete",
+ "monitoring.uptimeCheckConfigs.get",
+ "monitoring.uptimeCheckConfigs.list",
+ "monitoring.uptimeCheckConfigs.update",
+ "nestconsole.smarthomePreviews.update",
+ "nestconsole.smarthomeProjects.create",
+ "nestconsole.smarthomeProjects.delete",
+ "nestconsole.smarthomeProjects.get",
+ "nestconsole.smarthomeProjects.update",
+ "nestconsole.smarthomeVersions.create",
+ "nestconsole.smarthomeVersions.get",
+ "nestconsole.smarthomeVersions.submit",
+ "networkconnectivity.hubs.create",
+ "networkconnectivity.hubs.delete",
+ "networkconnectivity.hubs.get",
+ "networkconnectivity.hubs.getIamPolicy",
+ "networkconnectivity.hubs.list",
+ "networkconnectivity.hubs.setIamPolicy",
+ "networkconnectivity.hubs.update",
+ "networkconnectivity.internalRanges.create",
+ "networkconnectivity.internalRanges.delete",
+ "networkconnectivity.internalRanges.get",
+ "networkconnectivity.internalRanges.getIamPolicy",
+ "networkconnectivity.internalRanges.list",
+ "networkconnectivity.internalRanges.setIamPolicy",
+ "networkconnectivity.internalRanges.update",
+ "networkconnectivity.locations.get",
+ "networkconnectivity.locations.list",
+ "networkconnectivity.operations.cancel",
+ "networkconnectivity.operations.delete",
+ "networkconnectivity.operations.get",
+ "networkconnectivity.operations.list",
+ "networkconnectivity.policyBasedRoutes.create",
+ "networkconnectivity.policyBasedRoutes.delete",
+ "networkconnectivity.policyBasedRoutes.get",
+ "networkconnectivity.policyBasedRoutes.getIamPolicy",
+ "networkconnectivity.policyBasedRoutes.list",
+ "networkconnectivity.policyBasedRoutes.setIamPolicy",
+ "networkconnectivity.spokes.create",
+ "networkconnectivity.spokes.delete",
+ "networkconnectivity.spokes.get",
+ "networkconnectivity.spokes.getIamPolicy",
+ "networkconnectivity.spokes.list",
+ "networkconnectivity.spokes.setIamPolicy",
+ "networkconnectivity.spokes.update",
+ "networkmanagement.config.get",
+ "networkmanagement.config.startFreeTrial",
+ "networkmanagement.config.update",
+ "networkmanagement.connectivitytests.create",
+ "networkmanagement.connectivitytests.delete",
+ "networkmanagement.connectivitytests.get",
+ "networkmanagement.connectivitytests.getIamPolicy",
+ "networkmanagement.connectivitytests.list",
+ "networkmanagement.connectivitytests.rerun",
+ "networkmanagement.connectivitytests.setIamPolicy",
+ "networkmanagement.connectivitytests.update",
+ "networkmanagement.locations.get",
+ "networkmanagement.locations.list",
+ "networkmanagement.operations.get",
+ "networkmanagement.operations.list",
+ "networksecurity.authorizationPolicies.create",
+ "networksecurity.authorizationPolicies.delete",
+ "networksecurity.authorizationPolicies.get",
+ "networksecurity.authorizationPolicies.getIamPolicy",
+ "networksecurity.authorizationPolicies.list",
+ "networksecurity.authorizationPolicies.setIamPolicy",
+ "networksecurity.authorizationPolicies.update",
+ "networksecurity.authorizationPolicies.use",
+ "networksecurity.clientTlsPolicies.create",
+ "networksecurity.clientTlsPolicies.delete",
+ "networksecurity.clientTlsPolicies.get",
+ "networksecurity.clientTlsPolicies.getIamPolicy",
+ "networksecurity.clientTlsPolicies.list",
+ "networksecurity.clientTlsPolicies.setIamPolicy",
+ "networksecurity.clientTlsPolicies.update",
+ "networksecurity.clientTlsPolicies.use",
+ "networksecurity.locations.get",
+ "networksecurity.locations.list",
+ "networksecurity.operations.cancel",
+ "networksecurity.operations.delete",
+ "networksecurity.operations.get",
+ "networksecurity.operations.list",
+ "networksecurity.serverTlsPolicies.create",
+ "networksecurity.serverTlsPolicies.delete",
+ "networksecurity.serverTlsPolicies.get",
+ "networksecurity.serverTlsPolicies.getIamPolicy",
+ "networksecurity.serverTlsPolicies.list",
+ "networksecurity.serverTlsPolicies.setIamPolicy",
+ "networksecurity.serverTlsPolicies.update",
+ "networksecurity.serverTlsPolicies.use",
+ "networkservices.endpointConfigSelectors.create",
+ "networkservices.endpointConfigSelectors.delete",
+ "networkservices.endpointConfigSelectors.get",
+ "networkservices.endpointConfigSelectors.getIamPolicy",
+ "networkservices.endpointConfigSelectors.list",
+ "networkservices.endpointConfigSelectors.setIamPolicy",
+ "networkservices.endpointConfigSelectors.update",
+ "networkservices.endpointConfigSelectors.use",
+ "networkservices.endpointPolicies.create",
+ "networkservices.endpointPolicies.delete",
+ "networkservices.endpointPolicies.get",
+ "networkservices.endpointPolicies.getIamPolicy",
+ "networkservices.endpointPolicies.list",
+ "networkservices.endpointPolicies.setIamPolicy",
+ "networkservices.endpointPolicies.update",
+ "networkservices.endpointPolicies.use",
+ "networkservices.gateways.create",
+ "networkservices.gateways.delete",
+ "networkservices.gateways.get",
+ "networkservices.gateways.list",
+ "networkservices.gateways.update",
+ "networkservices.gateways.use",
+ "networkservices.grpcRoutes.create",
+ "networkservices.grpcRoutes.delete",
+ "networkservices.grpcRoutes.get",
+ "networkservices.grpcRoutes.getIamPolicy",
+ "networkservices.grpcRoutes.list",
+ "networkservices.grpcRoutes.setIamPolicy",
+ "networkservices.grpcRoutes.update",
+ "networkservices.grpcRoutes.use",
+ "networkservices.httpFilters.create",
+ "networkservices.httpFilters.delete",
+ "networkservices.httpFilters.get",
+ "networkservices.httpFilters.getIamPolicy",
+ "networkservices.httpFilters.list",
+ "networkservices.httpFilters.setIamPolicy",
+ "networkservices.httpFilters.update",
+ "networkservices.httpFilters.use",
+ "networkservices.httpRoutes.create",
+ "networkservices.httpRoutes.delete",
+ "networkservices.httpRoutes.get",
+ "networkservices.httpRoutes.getIamPolicy",
+ "networkservices.httpRoutes.list",
+ "networkservices.httpRoutes.setIamPolicy",
+ "networkservices.httpRoutes.update",
+ "networkservices.httpRoutes.use",
+ "networkservices.httpfilters.create",
+ "networkservices.httpfilters.delete",
+ "networkservices.httpfilters.get",
+ "networkservices.httpfilters.getIamPolicy",
+ "networkservices.httpfilters.list",
+ "networkservices.httpfilters.setIamPolicy",
+ "networkservices.httpfilters.update",
+ "networkservices.httpfilters.use",
+ "networkservices.locations.get",
+ "networkservices.locations.list",
+ "networkservices.meshes.create",
+ "networkservices.meshes.delete",
+ "networkservices.meshes.get",
+ "networkservices.meshes.getIamPolicy",
+ "networkservices.meshes.list",
+ "networkservices.meshes.setIamPolicy",
+ "networkservices.meshes.update",
+ "networkservices.meshes.use",
+ "networkservices.operations.cancel",
+ "networkservices.operations.delete",
+ "networkservices.operations.get",
+ "networkservices.operations.list",
+ "networkservices.serviceBindings.create",
+ "networkservices.serviceBindings.delete",
+ "networkservices.serviceBindings.get",
+ "networkservices.serviceBindings.list",
+ "networkservices.serviceBindings.update",
+ "networkservices.tcpRoutes.create",
+ "networkservices.tcpRoutes.delete",
+ "networkservices.tcpRoutes.get",
+ "networkservices.tcpRoutes.getIamPolicy",
+ "networkservices.tcpRoutes.list",
+ "networkservices.tcpRoutes.setIamPolicy",
+ "networkservices.tcpRoutes.update",
+ "networkservices.tcpRoutes.use",
+ "networkservices.tlsRoutes.create",
+ "networkservices.tlsRoutes.delete",
+ "networkservices.tlsRoutes.get",
+ "networkservices.tlsRoutes.list",
+ "networkservices.tlsRoutes.update",
+ "networkservices.tlsRoutes.use",
+ "notebooks.environments.create",
+ "notebooks.environments.delete",
+ "notebooks.environments.get",
+ "notebooks.environments.getIamPolicy",
+ "notebooks.environments.list",
+ "notebooks.environments.setIamPolicy",
+ "notebooks.executions.create",
+ "notebooks.executions.delete",
+ "notebooks.executions.get",
+ "notebooks.executions.getIamPolicy",
+ "notebooks.executions.list",
+ "notebooks.executions.setIamPolicy",
+ "notebooks.instances.checkUpgradability",
+ "notebooks.instances.create",
+ "notebooks.instances.delete",
+ "notebooks.instances.diagnose",
+ "notebooks.instances.get",
+ "notebooks.instances.getHealth",
+ "notebooks.instances.getIamPolicy",
+ "notebooks.instances.list",
+ "notebooks.instances.reset",
+ "notebooks.instances.setAccelerator",
+ "notebooks.instances.setIamPolicy",
+ "notebooks.instances.setLabels",
+ "notebooks.instances.setMachineType",
+ "notebooks.instances.start",
+ "notebooks.instances.stop",
+ "notebooks.instances.update",
+ "notebooks.instances.updateConfig",
+ "notebooks.instances.updateShieldInstanceConfig",
+ "notebooks.instances.upgrade",
+ "notebooks.instances.use",
+ "notebooks.locations.get",
+ "notebooks.locations.list",
+ "notebooks.operations.cancel",
+ "notebooks.operations.delete",
+ "notebooks.operations.get",
+ "notebooks.operations.list",
+ "notebooks.runtimes.create",
+ "notebooks.runtimes.delete",
+ "notebooks.runtimes.diagnose",
+ "notebooks.runtimes.get",
+ "notebooks.runtimes.getIamPolicy",
+ "notebooks.runtimes.list",
+ "notebooks.runtimes.reset",
+ "notebooks.runtimes.setIamPolicy",
+ "notebooks.runtimes.start",
+ "notebooks.runtimes.stop",
+ "notebooks.runtimes.switch",
+ "notebooks.runtimes.update",
+ "notebooks.schedules.create",
+ "notebooks.schedules.delete",
+ "notebooks.schedules.get",
+ "notebooks.schedules.getIamPolicy",
+ "notebooks.schedules.list",
+ "notebooks.schedules.setIamPolicy",
+ "oauthconfig.clientpolicy.get",
+ "oauthconfig.testusers.get",
+ "oauthconfig.testusers.update",
+ "oauthconfig.verification.get",
+ "oauthconfig.verification.submit",
+ "oauthconfig.verification.update",
+ "ondemandscanning.operations.cancel",
+ "ondemandscanning.operations.delete",
+ "ondemandscanning.operations.get",
+ "ondemandscanning.operations.list",
+ "ondemandscanning.operations.wait",
+ "ondemandscanning.scans.analyzePackages",
+ "ondemandscanning.scans.listVulnerabilities",
+ "ondemandscanning.scans.scan",
+ "opsconfigmonitoring.resourceMetadata.list",
+ "opsconfigmonitoring.resourceMetadata.write",
+ "orgpolicy.constraints.list",
+ "orgpolicy.policies.create",
+ "orgpolicy.policies.delete",
+ "orgpolicy.policies.list",
+ "orgpolicy.policies.update",
+ "orgpolicy.policy.get",
+ "orgpolicy.policy.set",
+ "osconfig.guestPolicies.create",
+ "osconfig.guestPolicies.delete",
+ "osconfig.guestPolicies.get",
+ "osconfig.guestPolicies.list",
+ "osconfig.guestPolicies.update",
+ "osconfig.instanceOSPoliciesCompliances.get",
+ "osconfig.instanceOSPoliciesCompliances.list",
+ "osconfig.inventories.get",
+ "osconfig.inventories.list",
+ "osconfig.osPolicyAssignmentReports.get",
+ "osconfig.osPolicyAssignmentReports.list",
+ "osconfig.osPolicyAssignments.create",
+ "osconfig.osPolicyAssignments.delete",
+ "osconfig.osPolicyAssignments.get",
+ "osconfig.osPolicyAssignments.list",
+ "osconfig.osPolicyAssignments.update",
+ "osconfig.patchDeployments.create",
+ "osconfig.patchDeployments.delete",
+ "osconfig.patchDeployments.execute",
+ "osconfig.patchDeployments.get",
+ "osconfig.patchDeployments.list",
+ "osconfig.patchDeployments.pause",
+ "osconfig.patchDeployments.resume",
+ "osconfig.patchDeployments.update",
+ "osconfig.patchJobs.exec",
+ "osconfig.patchJobs.get",
+ "osconfig.patchJobs.list",
+ "osconfig.vulnerabilityReports.get",
+ "osconfig.vulnerabilityReports.list",
+ "paymentsresellersubscription.products.list",
+ "paymentsresellersubscription.promotions.list",
+ "paymentsresellersubscription.subscriptions.cancel",
+ "paymentsresellersubscription.subscriptions.extend",
+ "paymentsresellersubscription.subscriptions.get",
+ "paymentsresellersubscription.subscriptions.provision",
+ "paymentsresellersubscription.subscriptions.undoCancel",
+ "policyanalyzer.serviceAccountKeyLastAuthenticationActivities.query",
+ "policyanalyzer.serviceAccountLastAuthenticationActivities.query",
+ "policysimulator.replayResults.list",
+ "policysimulator.replays.create",
+ "policysimulator.replays.get",
+ "policysimulator.replays.list",
+ "policysimulator.replays.run",
+ "privateca.caPools.create",
+ "privateca.caPools.delete",
+ "privateca.caPools.get",
+ "privateca.caPools.getIamPolicy",
+ "privateca.caPools.list",
+ "privateca.caPools.setIamPolicy",
+ "privateca.caPools.update",
+ "privateca.caPools.use",
+ "privateca.certificateAuthorities.create",
+ "privateca.certificateAuthorities.delete",
+ "privateca.certificateAuthorities.get",
+ "privateca.certificateAuthorities.getIamPolicy",
+ "privateca.certificateAuthorities.list",
+ "privateca.certificateAuthorities.setIamPolicy",
+ "privateca.certificateAuthorities.update",
+ "privateca.certificateRevocationLists.create",
+ "privateca.certificateRevocationLists.get",
+ "privateca.certificateRevocationLists.getIamPolicy",
+ "privateca.certificateRevocationLists.list",
+ "privateca.certificateRevocationLists.setIamPolicy",
+ "privateca.certificateRevocationLists.update",
+ "privateca.certificateTemplates.create",
+ "privateca.certificateTemplates.delete",
+ "privateca.certificateTemplates.get",
+ "privateca.certificateTemplates.getIamPolicy",
+ "privateca.certificateTemplates.list",
+ "privateca.certificateTemplates.setIamPolicy",
+ "privateca.certificateTemplates.update",
+ "privateca.certificateTemplates.use",
+ "privateca.certificates.create",
+ "privateca.certificates.createForSelf",
+ "privateca.certificates.get",
+ "privateca.certificates.getIamPolicy",
+ "privateca.certificates.list",
+ "privateca.certificates.setIamPolicy",
+ "privateca.certificates.update",
+ "privateca.locations.get",
+ "privateca.locations.list",
+ "privateca.operations.cancel",
+ "privateca.operations.delete",
+ "privateca.operations.get",
+ "privateca.operations.list",
+ "privateca.reusableConfigs.create",
+ "privateca.reusableConfigs.delete",
+ "privateca.reusableConfigs.get",
+ "privateca.reusableConfigs.getIamPolicy",
+ "privateca.reusableConfigs.list",
+ "privateca.reusableConfigs.setIamPolicy",
+ "privateca.reusableConfigs.update",
+ "proximitybeacon.attachments.create",
+ "proximitybeacon.attachments.delete",
+ "proximitybeacon.attachments.get",
+ "proximitybeacon.attachments.list",
+ "proximitybeacon.beacons.attach",
+ "proximitybeacon.beacons.create",
+ "proximitybeacon.beacons.get",
+ "proximitybeacon.beacons.getIamPolicy",
+ "proximitybeacon.beacons.list",
+ "proximitybeacon.beacons.setIamPolicy",
+ "proximitybeacon.beacons.update",
+ "proximitybeacon.namespaces.create",
+ "proximitybeacon.namespaces.delete",
+ "proximitybeacon.namespaces.get",
+ "proximitybeacon.namespaces.getIamPolicy",
+ "proximitybeacon.namespaces.list",
+ "proximitybeacon.namespaces.setIamPolicy",
+ "proximitybeacon.namespaces.update",
+ "publicca.externalAccountKeys.create",
+ "pubsub.schemas.attach",
+ "pubsub.schemas.create",
+ "pubsub.schemas.delete",
+ "pubsub.schemas.get",
+ "pubsub.schemas.getIamPolicy",
+ "pubsub.schemas.list",
+ "pubsub.schemas.setIamPolicy",
+ "pubsub.schemas.validate",
+ "pubsub.snapshots.create",
+ "pubsub.snapshots.delete",
+ "pubsub.snapshots.get",
+ "pubsub.snapshots.getIamPolicy",
+ "pubsub.snapshots.list",
+ "pubsub.snapshots.seek",
+ "pubsub.snapshots.setIamPolicy",
+ "pubsub.snapshots.update",
+ "pubsub.subscriptions.consume",
+ "pubsub.subscriptions.create",
+ "pubsub.subscriptions.delete",
+ "pubsub.subscriptions.get",
+ "pubsub.subscriptions.getIamPolicy",
+ "pubsub.subscriptions.list",
+ "pubsub.subscriptions.setIamPolicy",
+ "pubsub.subscriptions.update",
+ "pubsub.topics.attachSubscription",
+ "pubsub.topics.create",
+ "pubsub.topics.delete",
+ "pubsub.topics.detachSubscription",
+ "pubsub.topics.get",
+ "pubsub.topics.getIamPolicy",
+ "pubsub.topics.list",
+ "pubsub.topics.publish",
+ "pubsub.topics.setIamPolicy",
+ "pubsub.topics.update",
+ "pubsub.topics.updateTag",
+ "pubsublite.operations.get",
+ "pubsublite.operations.list",
+ "pubsublite.reservations.attachTopic",
+ "pubsublite.reservations.create",
+ "pubsublite.reservations.delete",
+ "pubsublite.reservations.get",
+ "pubsublite.reservations.list",
+ "pubsublite.reservations.listTopics",
+ "pubsublite.reservations.update",
+ "pubsublite.subscriptions.create",
+ "pubsublite.subscriptions.delete",
+ "pubsublite.subscriptions.get",
+ "pubsublite.subscriptions.getCursor",
+ "pubsublite.subscriptions.list",
+ "pubsublite.subscriptions.seek",
+ "pubsublite.subscriptions.setCursor",
+ "pubsublite.subscriptions.subscribe",
+ "pubsublite.subscriptions.update",
+ "pubsublite.topics.computeHeadCursor",
+ "pubsublite.topics.computeMessageStats",
+ "pubsublite.topics.computeTimeCursor",
+ "pubsublite.topics.create",
+ "pubsublite.topics.delete",
+ "pubsublite.topics.get",
+ "pubsublite.topics.getPartitions",
+ "pubsublite.topics.list",
+ "pubsublite.topics.listSubscriptions",
+ "pubsublite.topics.publish",
+ "pubsublite.topics.subscribe",
+ "pubsublite.topics.update",
+ "recaptchaenterprise.assessments.annotate",
+ "recaptchaenterprise.assessments.create",
+ "recaptchaenterprise.keys.create",
+ "recaptchaenterprise.keys.delete",
+ "recaptchaenterprise.keys.get",
+ "recaptchaenterprise.keys.list",
+ "recaptchaenterprise.keys.retrievelegacysecretkey",
+ "recaptchaenterprise.keys.update",
+ "recaptchaenterprise.metrics.get",
+ "recaptchaenterprise.projectmetadata.get",
+ "recaptchaenterprise.projectmetadata.update",
+ "recaptchaenterprise.relatedaccountgroupmemberships.list",
+ "recaptchaenterprise.relatedaccountgroups.list",
+ "recommender.bigqueryCapacityCommitmentsInsights.get",
+ "recommender.bigqueryCapacityCommitmentsInsights.list",
+ "recommender.bigqueryCapacityCommitmentsInsights.update",
+ "recommender.bigqueryCapacityCommitmentsRecommendations.get",
+ "recommender.bigqueryCapacityCommitmentsRecommendations.list",
+ "recommender.bigqueryCapacityCommitmentsRecommendations.update",
+ "recommender.cloudAssetInsights.get",
+ "recommender.cloudAssetInsights.list",
+ "recommender.cloudAssetInsights.update",
+ "recommender.cloudsqlIdleInstanceRecommendations.get",
+ "recommender.cloudsqlIdleInstanceRecommendations.list",
+ "recommender.cloudsqlIdleInstanceRecommendations.update",
+ "recommender.cloudsqlInstanceActivityInsights.get",
+ "recommender.cloudsqlInstanceActivityInsights.list",
+ "recommender.cloudsqlInstanceActivityInsights.update",
+ "recommender.cloudsqlInstanceCpuUsageInsights.get",
+ "recommender.cloudsqlInstanceCpuUsageInsights.list",
+ "recommender.cloudsqlInstanceCpuUsageInsights.update",
+ "recommender.cloudsqlInstanceDiskUsageTrendInsights.get",
+ "recommender.cloudsqlInstanceDiskUsageTrendInsights.list",
+ "recommender.cloudsqlInstanceDiskUsageTrendInsights.update",
+ "recommender.cloudsqlInstanceMemoryUsageInsights.get",
+ "recommender.cloudsqlInstanceMemoryUsageInsights.list",
+ "recommender.cloudsqlInstanceMemoryUsageInsights.update",
+ "recommender.cloudsqlInstanceOutOfDiskRecommendations.get",
+ "recommender.cloudsqlInstanceOutOfDiskRecommendations.list",
+ "recommender.cloudsqlInstanceOutOfDiskRecommendations.update",
+ "recommender.cloudsqlInstancePerformanceInsights.get",
+ "recommender.cloudsqlInstancePerformanceInsights.list",
+ "recommender.cloudsqlInstancePerformanceInsights.update",
+ "recommender.cloudsqlInstancePerformanceRecommendations.get",
+ "recommender.cloudsqlInstancePerformanceRecommendations.list",
+ "recommender.cloudsqlInstancePerformanceRecommendations.update",
+ "recommender.cloudsqlInstanceSecurityInsights.get",
+ "recommender.cloudsqlInstanceSecurityInsights.list",
+ "recommender.cloudsqlInstanceSecurityInsights.update",
+ "recommender.cloudsqlInstanceSecurityRecommendations.get",
+ "recommender.cloudsqlInstanceSecurityRecommendations.list",
+ "recommender.cloudsqlInstanceSecurityRecommendations.update",
+ "recommender.cloudsqlOverprovisionedInstanceRecommendations.get",
+ "recommender.cloudsqlOverprovisionedInstanceRecommendations.list",
+ "recommender.cloudsqlOverprovisionedInstanceRecommendations.update",
+ "recommender.commitmentUtilizationInsights.get",
+ "recommender.commitmentUtilizationInsights.list",
+ "recommender.commitmentUtilizationInsights.update",
+ "recommender.computeAddressIdleResourceInsights.get",
+ "recommender.computeAddressIdleResourceInsights.list",
+ "recommender.computeAddressIdleResourceInsights.update",
+ "recommender.computeAddressIdleResourceRecommendations.get",
+ "recommender.computeAddressIdleResourceRecommendations.list",
+ "recommender.computeAddressIdleResourceRecommendations.update",
+ "recommender.computeDiskIdleResourceInsights.get",
+ "recommender.computeDiskIdleResourceInsights.list",
+ "recommender.computeDiskIdleResourceInsights.update",
+ "recommender.computeDiskIdleResourceRecommendations.get",
+ "recommender.computeDiskIdleResourceRecommendations.list",
+ "recommender.computeDiskIdleResourceRecommendations.update",
+ "recommender.computeFirewallInsightTypeConfigs.get",
+ "recommender.computeFirewallInsightTypeConfigs.update",
+ "recommender.computeFirewallInsights.get",
+ "recommender.computeFirewallInsights.list",
+ "recommender.computeFirewallInsights.update",
+ "recommender.computeImageIdleResourceInsights.get",
+ "recommender.computeImageIdleResourceInsights.list",
+ "recommender.computeImageIdleResourceInsights.update",
+ "recommender.computeImageIdleResourceRecommendations.get",
+ "recommender.computeImageIdleResourceRecommendations.list",
+ "recommender.computeImageIdleResourceRecommendations.update",
+ "recommender.computeInstanceCpuUsageInsights.get",
+ "recommender.computeInstanceCpuUsageInsights.list",
+ "recommender.computeInstanceCpuUsageInsights.update",
+ "recommender.computeInstanceCpuUsagePredictionInsights.get",
+ "recommender.computeInstanceCpuUsagePredictionInsights.list",
+ "recommender.computeInstanceCpuUsagePredictionInsights.update",
+ "recommender.computeInstanceCpuUsageTrendInsights.get",
+ "recommender.computeInstanceCpuUsageTrendInsights.list",
+ "recommender.computeInstanceCpuUsageTrendInsights.update",
+ "recommender.computeInstanceGroupManagerCpuUsageInsights.get",
+ "recommender.computeInstanceGroupManagerCpuUsageInsights.list",
+ "recommender.computeInstanceGroupManagerCpuUsageInsights.update",
+ "recommender.computeInstanceGroupManagerCpuUsagePredictionInsights.get",
+ "recommender.computeInstanceGroupManagerCpuUsagePredictionInsights.list",
+ "recommender.computeInstanceGroupManagerCpuUsagePredictionInsights.update",
+ "recommender.computeInstanceGroupManagerCpuUsageTrendInsights.get",
+ "recommender.computeInstanceGroupManagerCpuUsageTrendInsights.list",
+ "recommender.computeInstanceGroupManagerCpuUsageTrendInsights.update",
+ "recommender.computeInstanceGroupManagerMachineTypeRecommendations.get",
+ "recommender.computeInstanceGroupManagerMachineTypeRecommendations.list",
+ "recommender.computeInstanceGroupManagerMachineTypeRecommendations.update",
+ "recommender.computeInstanceGroupManagerMemoryUsageInsights.get",
+ "recommender.computeInstanceGroupManagerMemoryUsageInsights.list",
+ "recommender.computeInstanceGroupManagerMemoryUsageInsights.update",
+ "recommender.computeInstanceGroupManagerMemoryUsagePredictionInsights.get",
+ "recommender.computeInstanceGroupManagerMemoryUsagePredictionInsights.list",
+ "recommender.computeInstanceGroupManagerMemoryUsagePredictionInsights.update",
+ "recommender.computeInstanceIdleResourceRecommendations.get",
+ "recommender.computeInstanceIdleResourceRecommendations.list",
+ "recommender.computeInstanceIdleResourceRecommendations.update",
+ "recommender.computeInstanceMachineTypeRecommendations.get",
+ "recommender.computeInstanceMachineTypeRecommendations.list",
+ "recommender.computeInstanceMachineTypeRecommendations.update",
+ "recommender.computeInstanceMemoryUsageInsights.get",
+ "recommender.computeInstanceMemoryUsageInsights.list",
+ "recommender.computeInstanceMemoryUsageInsights.update",
+ "recommender.computeInstanceMemoryUsagePredictionInsights.get",
+ "recommender.computeInstanceMemoryUsagePredictionInsights.list",
+ "recommender.computeInstanceMemoryUsagePredictionInsights.update",
+ "recommender.computeInstanceNetworkThroughputInsights.get",
+ "recommender.computeInstanceNetworkThroughputInsights.list",
+ "recommender.computeInstanceNetworkThroughputInsights.update",
+ "recommender.containerDiagnosisInsights.get",
+ "recommender.containerDiagnosisInsights.list",
+ "recommender.containerDiagnosisInsights.update",
+ "recommender.containerDiagnosisRecommendations.get",
+ "recommender.containerDiagnosisRecommendations.list",
+ "recommender.containerDiagnosisRecommendations.update",
+ "recommender.costInsights.get",
+ "recommender.costInsights.list",
+ "recommender.costInsights.update",
+ "recommender.dataflowDiagnosticsInsights.get",
+ "recommender.dataflowDiagnosticsInsights.list",
+ "recommender.dataflowDiagnosticsInsights.update",
+ "recommender.errorReportingInsights.get",
+ "recommender.errorReportingInsights.list",
+ "recommender.errorReportingInsights.update",
+ "recommender.errorReportingRecommendations.get",
+ "recommender.errorReportingRecommendations.list",
+ "recommender.errorReportingRecommendations.update",
+ "recommender.gmpGuidedExperienceInsights.get",
+ "recommender.gmpGuidedExperienceInsights.list",
+ "recommender.gmpGuidedExperienceInsights.update",
+ "recommender.gmpGuidedExperienceRecommendations.get",
+ "recommender.gmpGuidedExperienceRecommendations.list",
+ "recommender.gmpGuidedExperienceRecommendations.update",
+ "recommender.gmpProjectManagementInsights.get",
+ "recommender.gmpProjectManagementInsights.list",
+ "recommender.gmpProjectManagementInsights.update",
+ "recommender.gmpProjectManagementRecommendations.get",
+ "recommender.gmpProjectManagementRecommendations.list",
+ "recommender.gmpProjectManagementRecommendations.update",
+ "recommender.gmpProjectProductSuggestionsInsights.get",
+ "recommender.gmpProjectProductSuggestionsInsights.list",
+ "recommender.gmpProjectProductSuggestionsInsights.update",
+ "recommender.gmpProjectProductSuggestionsRecommendations.get",
+ "recommender.gmpProjectProductSuggestionsRecommendations.list",
+ "recommender.gmpProjectProductSuggestionsRecommendations.update",
+ "recommender.gmpProjectQuotaInsights.get",
+ "recommender.gmpProjectQuotaInsights.list",
+ "recommender.gmpProjectQuotaInsights.update",
+ "recommender.gmpProjectQuotaRecommendations.get",
+ "recommender.gmpProjectQuotaRecommendations.list",
+ "recommender.gmpProjectQuotaRecommendations.update",
+ "recommender.iamPolicyInsights.get",
+ "recommender.iamPolicyInsights.list",
+ "recommender.iamPolicyInsights.update",
+ "recommender.iamPolicyLateralMovementInsights.get",
+ "recommender.iamPolicyLateralMovementInsights.list",
+ "recommender.iamPolicyLateralMovementInsights.update",
+ "recommender.iamPolicyRecommendations.get",
+ "recommender.iamPolicyRecommendations.list",
+ "recommender.iamPolicyRecommendations.update",
+ "recommender.iamServiceAccountInsights.get",
+ "recommender.iamServiceAccountInsights.list",
+ "recommender.iamServiceAccountInsights.update",
+ "recommender.locations.get",
+ "recommender.locations.list",
+ "recommender.loggingProductSuggestionContainerInsights.get",
+ "recommender.loggingProductSuggestionContainerInsights.list",
+ "recommender.loggingProductSuggestionContainerInsights.update",
+ "recommender.loggingProductSuggestionContainerRecommendations.get",
+ "recommender.loggingProductSuggestionContainerRecommendations.list",
+ "recommender.loggingProductSuggestionContainerRecommendations.update",
+ "recommender.monitoringProductSuggestionComputeInsights.get",
+ "recommender.monitoringProductSuggestionComputeInsights.list",
+ "recommender.monitoringProductSuggestionComputeInsights.update",
+ "recommender.monitoringProductSuggestionComputeRecommendations.get",
+ "recommender.monitoringProductSuggestionComputeRecommendations.list",
+ "recommender.monitoringProductSuggestionComputeRecommendations.update",
+ "recommender.networkAnalyzerCloudSqlInsights.get",
+ "recommender.networkAnalyzerCloudSqlInsights.list",
+ "recommender.networkAnalyzerCloudSqlInsights.update",
+ "recommender.networkAnalyzerDynamicRouteInsights.get",
+ "recommender.networkAnalyzerDynamicRouteInsights.list",
+ "recommender.networkAnalyzerDynamicRouteInsights.update",
+ "recommender.networkAnalyzerGkeConnectivityInsights.get",
+ "recommender.networkAnalyzerGkeConnectivityInsights.list",
+ "recommender.networkAnalyzerGkeConnectivityInsights.update",
+ "recommender.networkAnalyzerGkeIpAddressInsights.get",
+ "recommender.networkAnalyzerGkeIpAddressInsights.list",
+ "recommender.networkAnalyzerGkeIpAddressInsights.update",
+ "recommender.networkAnalyzerIpAddressInsights.get",
+ "recommender.networkAnalyzerIpAddressInsights.list",
+ "recommender.networkAnalyzerIpAddressInsights.update",
+ "recommender.networkAnalyzerLoadBalancerInsights.get",
+ "recommender.networkAnalyzerLoadBalancerInsights.list",
+ "recommender.networkAnalyzerLoadBalancerInsights.update",
+ "recommender.networkAnalyzerVpcConnectivityInsights.get",
+ "recommender.networkAnalyzerVpcConnectivityInsights.list",
+ "recommender.networkAnalyzerVpcConnectivityInsights.update",
+ "recommender.resourcemanagerProjectUtilizationInsightTypeConfigs.get",
+ "recommender.resourcemanagerProjectUtilizationInsightTypeConfigs.update",
+ "recommender.resourcemanagerProjectUtilizationInsights.get",
+ "recommender.resourcemanagerProjectUtilizationInsights.list",
+ "recommender.resourcemanagerProjectUtilizationInsights.update",
+ "recommender.resourcemanagerProjectUtilizationRecommendations.get",
+ "recommender.resourcemanagerProjectUtilizationRecommendations.list",
+ "recommender.resourcemanagerProjectUtilizationRecommendations.update",
+ "recommender.resourcemanagerProjectUtilizationRecommenderConfigs.get",
+ "recommender.resourcemanagerProjectUtilizationRecommenderConfigs.update",
+ "recommender.runServiceIdentityInsights.get",
+ "recommender.runServiceIdentityInsights.list",
+ "recommender.runServiceIdentityInsights.update",
+ "recommender.runServiceIdentityRecommendations.get",
+ "recommender.runServiceIdentityRecommendations.list",
+ "recommender.runServiceIdentityRecommendations.update",
+ "recommender.runServiceSecurityInsights.get",
+ "recommender.runServiceSecurityInsights.list",
+ "recommender.runServiceSecurityInsights.update",
+ "recommender.runServiceSecurityRecommendations.get",
+ "recommender.runServiceSecurityRecommendations.list",
+ "recommender.runServiceSecurityRecommendations.update",
+ "recommender.spendBasedCommitmentInsights.get",
+ "recommender.spendBasedCommitmentInsights.list",
+ "recommender.spendBasedCommitmentInsights.update",
+ "recommender.spendBasedCommitmentRecommendations.get",
+ "recommender.spendBasedCommitmentRecommendations.list",
+ "recommender.spendBasedCommitmentRecommendations.update",
+ "recommender.usageCommitmentRecommendations.get",
+ "recommender.usageCommitmentRecommendations.list",
+ "recommender.usageCommitmentRecommendations.update",
+ "redis.instances.create",
+ "redis.instances.delete",
+ "redis.instances.export",
+ "redis.instances.failover",
+ "redis.instances.get",
+ "redis.instances.getAuthString",
+ "redis.instances.import",
+ "redis.instances.list",
+ "redis.instances.rescheduleMaintenance",
+ "redis.instances.update",
+ "redis.instances.updateAuth",
+ "redis.instances.upgrade",
+ "redis.locations.get",
+ "redis.locations.list",
+ "redis.operations.cancel",
+ "redis.operations.delete",
+ "redis.operations.get",
+ "redis.operations.list",
+ "remotebuildexecution.actions.create",
+ "remotebuildexecution.actions.delete",
+ "remotebuildexecution.actions.get",
+ "remotebuildexecution.actions.set",
+ "remotebuildexecution.actions.update",
+ "remotebuildexecution.blobs.create",
+ "remotebuildexecution.blobs.get",
+ "remotebuildexecution.botsessions.create",
+ "remotebuildexecution.botsessions.update",
+ "remotebuildexecution.instances.create",
+ "remotebuildexecution.instances.delete",
+ "remotebuildexecution.instances.get",
+ "remotebuildexecution.instances.list",
+ "remotebuildexecution.instances.update",
+ "remotebuildexecution.logstreams.create",
+ "remotebuildexecution.logstreams.get",
+ "remotebuildexecution.logstreams.update",
+ "remotebuildexecution.workerpools.create",
+ "remotebuildexecution.workerpools.delete",
+ "remotebuildexecution.workerpools.get",
+ "remotebuildexecution.workerpools.list",
+ "remotebuildexecution.workerpools.update",
+ "resourcemanager.hierarchyNodes.createTagBinding",
+ "resourcemanager.hierarchyNodes.deleteTagBinding",
+ "resourcemanager.hierarchyNodes.listEffectiveTags",
+ "resourcemanager.hierarchyNodes.listTagBindings",
+ "resourcemanager.projects.createBillingAssignment",
+ "resourcemanager.projects.delete",
+ "resourcemanager.projects.deleteBillingAssignment",
+ "resourcemanager.projects.get",
+ "resourcemanager.projects.getIamPolicy",
+ "resourcemanager.projects.move",
+ "resourcemanager.projects.setIamPolicy",
+ "resourcemanager.projects.undelete",
+ "resourcemanager.projects.update",
+ "resourcemanager.projects.updateLiens",
+ "resourcesettings.settings.get",
+ "resourcesettings.settings.list",
+ "resourcesettings.settings.update",
+ "retail.attributesConfigs.addCatalogAttribute",
+ "retail.attributesConfigs.batchRemoveCatalogAttributes",
+ "retail.attributesConfigs.exportCatalogAttributes",
+ "retail.attributesConfigs.get",
+ "retail.attributesConfigs.importCatalogAttributes",
+ "retail.attributesConfigs.removeCatalogAttribute",
+ "retail.attributesConfigs.replaceCatalogAttribute",
+ "retail.attributesConfigs.update",
+ "retail.catalogs.completeQuery",
+ "retail.catalogs.import",
+ "retail.catalogs.list",
+ "retail.catalogs.update",
+ "retail.controls.create",
+ "retail.controls.delete",
+ "retail.controls.export",
+ "retail.controls.get",
+ "retail.controls.import",
+ "retail.controls.list",
+ "retail.controls.update",
+ "retail.models.create",
+ "retail.models.delete",
+ "retail.models.list",
+ "retail.models.pause",
+ "retail.models.resume",
+ "retail.models.tune",
+ "retail.models.update",
+ "retail.operations.get",
+ "retail.operations.list",
+ "retail.placements.predict",
+ "retail.placements.search",
+ "retail.products.create",
+ "retail.products.delete",
+ "retail.products.export",
+ "retail.products.get",
+ "retail.products.import",
+ "retail.products.list",
+ "retail.products.purge",
+ "retail.products.setSponsorship",
+ "retail.products.update",
+ "retail.retailProjects.get",
+ "retail.servingConfigs.create",
+ "retail.servingConfigs.delete",
+ "retail.servingConfigs.get",
+ "retail.servingConfigs.list",
+ "retail.servingConfigs.predict",
+ "retail.servingConfigs.search",
+ "retail.servingConfigs.update",
+ "retail.userEvents.create",
+ "retail.userEvents.import",
+ "retail.userEvents.purge",
+ "retail.userEvents.rejoin",
+ "riscconfigurationservice.riscconfigs.createOrUpdate",
+ "riscconfigurationservice.riscconfigs.delete",
+ "riscconfigurationservice.riscconfigs.get",
+ "rma.annotations.create",
+ "rma.annotations.get",
+ "rma.collectors.create",
+ "rma.collectors.delete",
+ "rma.collectors.get",
+ "rma.collectors.list",
+ "rma.collectors.update",
+ "rma.locations.get",
+ "rma.locations.list",
+ "rma.operations.cancel",
+ "rma.operations.delete",
+ "rma.operations.get",
+ "rma.operations.list",
+ "run.configurations.get",
+ "run.configurations.list",
+ "run.executions.delete",
+ "run.executions.get",
+ "run.executions.list",
+ "run.jobs.create",
+ "run.jobs.delete",
+ "run.jobs.get",
+ "run.jobs.getIamPolicy",
+ "run.jobs.list",
+ "run.jobs.run",
+ "run.jobs.setIamPolicy",
+ "run.jobs.update",
+ "run.locations.list",
+ "run.operations.delete",
+ "run.operations.get",
+ "run.operations.list",
+ "run.revisions.delete",
+ "run.revisions.get",
+ "run.revisions.list",
+ "run.routes.get",
+ "run.routes.invoke",
+ "run.routes.list",
+ "run.services.create",
+ "run.services.createTagBinding",
+ "run.services.delete",
+ "run.services.deleteTagBinding",
+ "run.services.get",
+ "run.services.getIamPolicy",
+ "run.services.list",
+ "run.services.listEffectiveTags",
+ "run.services.listTagBindings",
+ "run.services.setIamPolicy",
+ "run.services.update",
+ "run.tasks.get",
+ "run.tasks.list",
+ "runapps.applications.create",
+ "runapps.applications.delete",
+ "runapps.applications.get",
+ "runapps.applications.getStatus",
+ "runapps.applications.list",
+ "runapps.applications.update",
+ "runapps.deployments.create",
+ "runapps.deployments.get",
+ "runapps.deployments.list",
+ "runapps.locations.get",
+ "runapps.locations.list",
+ "runapps.operations.cancel",
+ "runapps.operations.delete",
+ "runapps.operations.get",
+ "runapps.operations.list",
+ "runtimeconfig.configs.create",
+ "runtimeconfig.configs.delete",
+ "runtimeconfig.configs.get",
+ "runtimeconfig.configs.getIamPolicy",
+ "runtimeconfig.configs.list",
+ "runtimeconfig.configs.setIamPolicy",
+ "runtimeconfig.configs.update",
+ "runtimeconfig.operations.get",
+ "runtimeconfig.operations.list",
+ "runtimeconfig.variables.create",
+ "runtimeconfig.variables.delete",
+ "runtimeconfig.variables.get",
+ "runtimeconfig.variables.getIamPolicy",
+ "runtimeconfig.variables.list",
+ "runtimeconfig.variables.setIamPolicy",
+ "runtimeconfig.variables.update",
+ "runtimeconfig.variables.watch",
+ "runtimeconfig.waiters.create",
+ "runtimeconfig.waiters.delete",
+ "runtimeconfig.waiters.get",
+ "runtimeconfig.waiters.getIamPolicy",
+ "runtimeconfig.waiters.list",
+ "runtimeconfig.waiters.setIamPolicy",
+ "runtimeconfig.waiters.update",
+ "secretmanager.locations.get",
+ "secretmanager.locations.list",
+ "secretmanager.secrets.create",
+ "secretmanager.secrets.delete",
+ "secretmanager.secrets.get",
+ "secretmanager.secrets.getIamPolicy",
+ "secretmanager.secrets.list",
+ "secretmanager.secrets.setIamPolicy",
+ "secretmanager.secrets.update",
+ "secretmanager.versions.access",
+ "secretmanager.versions.add",
+ "secretmanager.versions.destroy",
+ "secretmanager.versions.disable",
+ "secretmanager.versions.enable",
+ "secretmanager.versions.get",
+ "secretmanager.versions.list",
+ "securedlandingzone.overwatches.activate",
+ "securedlandingzone.overwatches.create",
+ "securedlandingzone.overwatches.delete",
+ "securedlandingzone.overwatches.get",
+ "securedlandingzone.overwatches.list",
+ "securedlandingzone.overwatches.suspend",
+ "securedlandingzone.overwatches.update",
+ "securitycenter.assets.group",
+ "securitycenter.assets.list",
+ "securitycenter.assets.listAssetPropertyNames",
+ "securitycenter.assets.runDiscovery",
+ "securitycenter.assetsecuritymarks.update",
+ "securitycenter.bigQueryExports.create",
+ "securitycenter.bigQueryExports.delete",
+ "securitycenter.bigQueryExports.get",
+ "securitycenter.bigQueryExports.list",
+ "securitycenter.bigQueryExports.update",
+ "securitycenter.containerthreatdetectionsettings.calculate",
+ "securitycenter.containerthreatdetectionsettings.get",
+ "securitycenter.containerthreatdetectionsettings.update",
+ "securitycenter.eventthreatdetectionsettings.calculate",
+ "securitycenter.eventthreatdetectionsettings.get",
+ "securitycenter.eventthreatdetectionsettings.update",
+ "securitycenter.findingexternalsystems.update",
+ "securitycenter.findings.bulkMuteUpdate",
+ "securitycenter.findings.group",
+ "securitycenter.findings.list",
+ "securitycenter.findings.listFindingPropertyNames",
+ "securitycenter.findings.setMute",
+ "securitycenter.findings.setState",
+ "securitycenter.findings.setWorkflowState",
+ "securitycenter.findings.update",
+ "securitycenter.findingsecuritymarks.update",
+ "securitycenter.muteconfigs.create",
+ "securitycenter.muteconfigs.delete",
+ "securitycenter.muteconfigs.get",
+ "securitycenter.muteconfigs.list",
+ "securitycenter.muteconfigs.update",
+ "securitycenter.notificationconfig.create",
+ "securitycenter.notificationconfig.delete",
+ "securitycenter.notificationconfig.get",
+ "securitycenter.notificationconfig.list",
+ "securitycenter.notificationconfig.update",
+ "securitycenter.rapidvulnerabilitydetectionsettings.calculate",
+ "securitycenter.rapidvulnerabilitydetectionsettings.get",
+ "securitycenter.rapidvulnerabilitydetectionsettings.update",
+ "securitycenter.securitycentersettings.get",
+ "securitycenter.securitycentersettings.update",
+ "securitycenter.securityhealthanalyticssettings.calculate",
+ "securitycenter.securityhealthanalyticssettings.get",
+ "securitycenter.securityhealthanalyticssettings.update",
+ "securitycenter.sources.get",
+ "securitycenter.sources.getIamPolicy",
+ "securitycenter.sources.list",
+ "securitycenter.sources.setIamPolicy",
+ "securitycenter.sources.update",
+ "securitycenter.userinterfacemetadata.get",
+ "securitycenter.virtualmachinethreatdetectionsettings.calculate",
+ "securitycenter.virtualmachinethreatdetectionsettings.get",
+ "securitycenter.virtualmachinethreatdetectionsettings.update",
+ "securitycenter.websecurityscannersettings.calculate",
+ "securitycenter.websecurityscannersettings.get",
+ "securitycenter.websecurityscannersettings.update",
+ "servicebroker.bindingoperations.get",
+ "servicebroker.bindingoperations.list",
+ "servicebroker.bindings.create",
+ "servicebroker.bindings.delete",
+ "servicebroker.bindings.get",
+ "servicebroker.bindings.getIamPolicy",
+ "servicebroker.bindings.list",
+ "servicebroker.bindings.setIamPolicy",
+ "servicebroker.catalogs.create",
+ "servicebroker.catalogs.delete",
+ "servicebroker.catalogs.get",
+ "servicebroker.catalogs.getIamPolicy",
+ "servicebroker.catalogs.list",
+ "servicebroker.catalogs.setIamPolicy",
+ "servicebroker.catalogs.validate",
+ "servicebroker.instanceoperations.get",
+ "servicebroker.instanceoperations.list",
+ "servicebroker.instances.create",
+ "servicebroker.instances.delete",
+ "servicebroker.instances.get",
+ "servicebroker.instances.getIamPolicy",
+ "servicebroker.instances.list",
+ "servicebroker.instances.setIamPolicy",
+ "servicebroker.instances.update",
+ "serviceconsumermanagement.consumers.get",
+ "serviceconsumermanagement.quota.get",
+ "serviceconsumermanagement.quota.update",
+ "serviceconsumermanagement.tenancyu.addResource",
+ "serviceconsumermanagement.tenancyu.create",
+ "serviceconsumermanagement.tenancyu.delete",
+ "serviceconsumermanagement.tenancyu.list",
+ "serviceconsumermanagement.tenancyu.removeResource",
+ "servicedirectory.endpoints.create",
+ "servicedirectory.endpoints.delete",
+ "servicedirectory.endpoints.get",
+ "servicedirectory.endpoints.getIamPolicy",
+ "servicedirectory.endpoints.list",
+ "servicedirectory.endpoints.setIamPolicy",
+ "servicedirectory.endpoints.update",
+ "servicedirectory.locations.get",
+ "servicedirectory.locations.list",
+ "servicedirectory.namespaces.associatePrivateZone",
+ "servicedirectory.namespaces.create",
+ "servicedirectory.namespaces.delete",
+ "servicedirectory.namespaces.get",
+ "servicedirectory.namespaces.getIamPolicy",
+ "servicedirectory.namespaces.list",
+ "servicedirectory.namespaces.setIamPolicy",
+ "servicedirectory.namespaces.update",
+ "servicedirectory.networks.access",
+ "servicedirectory.networks.attach",
+ "servicedirectory.services.bind",
+ "servicedirectory.services.create",
+ "servicedirectory.services.delete",
+ "servicedirectory.services.get",
+ "servicedirectory.services.getIamPolicy",
+ "servicedirectory.services.list",
+ "servicedirectory.services.resolve",
+ "servicedirectory.services.setIamPolicy",
+ "servicedirectory.services.update",
+ "servicemanagement.services.bind",
+ "servicemanagement.services.check",
+ "servicemanagement.services.create",
+ "servicemanagement.services.delete",
+ "servicemanagement.services.get",
+ "servicemanagement.services.getIamPolicy",
+ "servicemanagement.services.list",
+ "servicemanagement.services.quota",
+ "servicemanagement.services.report",
+ "servicemanagement.services.setIamPolicy",
+ "servicemanagement.services.update",
+ "servicenetworking.operations.cancel",
+ "servicenetworking.operations.delete",
+ "servicenetworking.operations.get",
+ "servicenetworking.operations.list",
+ "servicenetworking.services.addDnsRecordSet",
+ "servicenetworking.services.addDnsZone",
+ "servicenetworking.services.addPeering",
+ "servicenetworking.services.addSubnetwork",
+ "servicenetworking.services.createPeeredDnsDomain",
+ "servicenetworking.services.deleteConnection",
+ "servicenetworking.services.deletePeeredDnsDomain",
+ "servicenetworking.services.disableVpcServiceControls",
+ "servicenetworking.services.enableVpcServiceControls",
+ "servicenetworking.services.get",
+ "servicenetworking.services.getConsumerConfig",
+ "servicenetworking.services.listPeeredDnsDomains",
+ "servicenetworking.services.removeDnsRecordSet",
+ "servicenetworking.services.removeDnsZone",
+ "servicenetworking.services.updateConsumerConfig",
+ "servicenetworking.services.updateDnsRecordSet",
+ "servicenetworking.services.use",
+ "servicesecurityinsights.clusterSecurityInfo.get",
+ "servicesecurityinsights.clusterSecurityInfo.list",
+ "servicesecurityinsights.policies.get",
+ "servicesecurityinsights.projectStates.get",
+ "servicesecurityinsights.securityInfo.list",
+ "servicesecurityinsights.securityViews.get",
+ "servicesecurityinsights.workloadPolicies.list",
+ "servicesecurityinsights.workloadSecurityInfo.get",
+ "serviceusage.apiKeys.regenerate",
+ "serviceusage.apiKeys.revert",
+ "serviceusage.operations.cancel",
+ "serviceusage.operations.delete",
+ "serviceusage.operations.get",
+ "serviceusage.operations.list",
+ "serviceusage.quotas.get",
+ "serviceusage.quotas.update",
+ "serviceusage.services.disable",
+ "serviceusage.services.enable",
+ "serviceusage.services.get",
+ "serviceusage.services.list",
+ "serviceusage.services.use",
+ "source.repos.create",
+ "source.repos.delete",
+ "source.repos.get",
+ "source.repos.getIamPolicy",
+ "source.repos.getProjectConfig",
+ "source.repos.list",
+ "source.repos.setIamPolicy",
+ "source.repos.update",
+ "source.repos.updateProjectConfig",
+ "source.repos.updateRepoConfig",
+ "spanner.backupOperations.cancel",
+ "spanner.backupOperations.get",
+ "spanner.backupOperations.list",
+ "spanner.backups.copy",
+ "spanner.backups.create",
+ "spanner.backups.delete",
+ "spanner.backups.get",
+ "spanner.backups.getIamPolicy",
+ "spanner.backups.list",
+ "spanner.backups.restoreDatabase",
+ "spanner.backups.setIamPolicy",
+ "spanner.backups.update",
+ "spanner.databaseOperations.cancel",
+ "spanner.databaseOperations.delete",
+ "spanner.databaseOperations.get",
+ "spanner.databaseOperations.list",
+ "spanner.databaseRoles.list",
+ "spanner.databaseRoles.use",
+ "spanner.databases.beginOrRollbackReadWriteTransaction",
+ "spanner.databases.beginPartitionedDmlTransaction",
+ "spanner.databases.beginReadOnlyTransaction",
+ "spanner.databases.create",
+ "spanner.databases.createBackup",
+ "spanner.databases.drop",
+ "spanner.databases.get",
+ "spanner.databases.getDdl",
+ "spanner.databases.getIamPolicy",
+ "spanner.databases.list",
+ "spanner.databases.partitionQuery",
+ "spanner.databases.partitionRead",
+ "spanner.databases.read",
+ "spanner.databases.select",
+ "spanner.databases.setIamPolicy",
+ "spanner.databases.update",
+ "spanner.databases.updateDdl",
+ "spanner.databases.useRoleBasedAccess",
+ "spanner.databases.write",
+ "spanner.instanceConfigOperations.cancel",
+ "spanner.instanceConfigOperations.delete",
+ "spanner.instanceConfigOperations.get",
+ "spanner.instanceConfigOperations.list",
+ "spanner.instanceConfigs.create",
+ "spanner.instanceConfigs.delete",
+ "spanner.instanceConfigs.get",
+ "spanner.instanceConfigs.list",
+ "spanner.instanceConfigs.update",
+ "spanner.instanceOperations.cancel",
+ "spanner.instanceOperations.delete",
+ "spanner.instanceOperations.get",
+ "spanner.instanceOperations.list",
+ "spanner.instances.create",
+ "spanner.instances.delete",
+ "spanner.instances.get",
+ "spanner.instances.getIamPolicy",
+ "spanner.instances.list",
+ "spanner.instances.setIamPolicy",
+ "spanner.instances.update",
+ "spanner.sessions.create",
+ "spanner.sessions.delete",
+ "spanner.sessions.get",
+ "spanner.sessions.list",
+ "speech.adaptations.execute",
+ "speech.config.get",
+ "speech.config.update",
+ "speech.customClasses.create",
+ "speech.customClasses.delete",
+ "speech.customClasses.get",
+ "speech.customClasses.list",
+ "speech.customClasses.undelete",
+ "speech.customClasses.update",
+ "speech.operations.cancel",
+ "speech.operations.delete",
+ "speech.operations.get",
+ "speech.operations.list",
+ "speech.operations.wait",
+ "speech.phraseSets.create",
+ "speech.phraseSets.delete",
+ "speech.phraseSets.get",
+ "speech.phraseSets.list",
+ "speech.phraseSets.undelete",
+ "speech.phraseSets.update",
+ "speech.recognizers.create",
+ "speech.recognizers.delete",
+ "speech.recognizers.get",
+ "speech.recognizers.list",
+ "speech.recognizers.recognize",
+ "speech.recognizers.undelete",
+ "speech.recognizers.update",
+ "stackdriver.projects.edit",
+ "stackdriver.projects.get",
+ "stackdriver.resourceMetadata.list",
+ "stackdriver.resourceMetadata.write",
+ "storage.buckets.create",
+ "storage.buckets.createTagBinding",
+ "storage.buckets.delete",
+ "storage.buckets.deleteTagBinding",
+ "storage.buckets.get",
+ "storage.buckets.getIamPolicy",
+ "storage.buckets.list",
+ "storage.buckets.listEffectiveTags",
+ "storage.buckets.listTagBindings",
+ "storage.buckets.setIamPolicy",
+ "storage.buckets.update",
+ "storage.hmacKeys.create",
+ "storage.hmacKeys.delete",
+ "storage.hmacKeys.get",
+ "storage.hmacKeys.list",
+ "storage.hmacKeys.update",
+ "storage.multipartUploads.abort",
+ "storage.multipartUploads.create",
+ "storage.multipartUploads.list",
+ "storage.multipartUploads.listParts",
+ "storage.objects.create",
+ "storage.objects.delete",
+ "storage.objects.get",
+ "storage.objects.getIamPolicy",
+ "storage.objects.list",
+ "storage.objects.setIamPolicy",
+ "storage.objects.update",
+ "storagetransfer.agentpools.create",
+ "storagetransfer.agentpools.delete",
+ "storagetransfer.agentpools.get",
+ "storagetransfer.agentpools.list",
+ "storagetransfer.agentpools.report",
+ "storagetransfer.agentpools.update",
+ "storagetransfer.jobs.create",
+ "storagetransfer.jobs.delete",
+ "storagetransfer.jobs.get",
+ "storagetransfer.jobs.list",
+ "storagetransfer.jobs.run",
+ "storagetransfer.jobs.update",
+ "storagetransfer.operations.assign",
+ "storagetransfer.operations.cancel",
+ "storagetransfer.operations.get",
+ "storagetransfer.operations.list",
+ "storagetransfer.operations.pause",
+ "storagetransfer.operations.report",
+ "storagetransfer.operations.resume",
+ "storagetransfer.projects.getServiceAccount",
+ "stream.locations.get",
+ "stream.locations.list",
+ "stream.operations.cancel",
+ "stream.operations.delete",
+ "stream.operations.get",
+ "stream.operations.list",
+ "stream.streamContents.build",
+ "stream.streamContents.create",
+ "stream.streamContents.delete",
+ "stream.streamContents.get",
+ "stream.streamContents.list",
+ "stream.streamContents.update",
+ "stream.streamInstances.create",
+ "stream.streamInstances.delete",
+ "stream.streamInstances.get",
+ "stream.streamInstances.list",
+ "stream.streamInstances.rollout",
+ "stream.streamInstances.update",
+ "subscribewithgoogledeveloper.tools.get",
+ "timeseriesinsights.datasets.create",
+ "timeseriesinsights.datasets.delete",
+ "timeseriesinsights.datasets.evaluate",
+ "timeseriesinsights.datasets.list",
+ "timeseriesinsights.datasets.query",
+ "timeseriesinsights.datasets.update",
+ "timeseriesinsights.locations.get",
+ "timeseriesinsights.locations.list",
+ "tpu.acceleratortypes.get",
+ "tpu.acceleratortypes.list",
+ "tpu.locations.get",
+ "tpu.locations.list",
+ "tpu.nodes.create",
+ "tpu.nodes.delete",
+ "tpu.nodes.get",
+ "tpu.nodes.list",
+ "tpu.nodes.reimage",
+ "tpu.nodes.reset",
+ "tpu.nodes.simulateMaintenanceEvent",
+ "tpu.nodes.start",
+ "tpu.nodes.stop",
+ "tpu.nodes.update",
+ "tpu.operations.get",
+ "tpu.operations.list",
+ "tpu.runtimeversions.get",
+ "tpu.runtimeversions.list",
+ "tpu.tensorflowversions.get",
+ "tpu.tensorflowversions.list",
+ "trafficdirector.networks.getConfigs",
+ "trafficdirector.networks.reportMetrics",
+ "transcoder.jobTemplates.create",
+ "transcoder.jobTemplates.delete",
+ "transcoder.jobTemplates.get",
+ "transcoder.jobTemplates.list",
+ "transcoder.jobs.create",
+ "transcoder.jobs.delete",
+ "transcoder.jobs.get",
+ "transcoder.jobs.list",
+ "transferappliance.appliances.create",
+ "transferappliance.appliances.delete",
+ "transferappliance.appliances.get",
+ "transferappliance.appliances.list",
+ "transferappliance.appliances.update",
+ "transferappliance.locations.get",
+ "transferappliance.locations.list",
+ "transferappliance.operations.cancel",
+ "transferappliance.operations.delete",
+ "transferappliance.operations.get",
+ "transferappliance.operations.list",
+ "transferappliance.orders.create",
+ "transferappliance.orders.delete",
+ "transferappliance.orders.get",
+ "transferappliance.orders.list",
+ "transferappliance.orders.update",
+ "translationhub.portals.create",
+ "translationhub.portals.delete",
+ "translationhub.portals.get",
+ "translationhub.portals.list",
+ "translationhub.portals.update",
+ "videostitcher.cdnKeys.create",
+ "videostitcher.cdnKeys.delete",
+ "videostitcher.cdnKeys.get",
+ "videostitcher.cdnKeys.list",
+ "videostitcher.cdnKeys.update",
+ "videostitcher.liveAdTagDetails.get",
+ "videostitcher.liveAdTagDetails.list",
+ "videostitcher.liveSessions.create",
+ "videostitcher.liveSessions.get",
+ "videostitcher.slates.create",
+ "videostitcher.slates.delete",
+ "videostitcher.slates.get",
+ "videostitcher.slates.list",
+ "videostitcher.slates.update",
+ "videostitcher.vodAdTagDetails.get",
+ "videostitcher.vodAdTagDetails.list",
+ "videostitcher.vodSessions.create",
+ "videostitcher.vodSessions.get",
+ "videostitcher.vodStitchDetails.get",
+ "videostitcher.vodStitchDetails.list",
+ "visionai.analyses.create",
+ "visionai.analyses.delete",
+ "visionai.analyses.get",
+ "visionai.analyses.getIamPolicy",
+ "visionai.analyses.list",
+ "visionai.analyses.setIamPolicy",
+ "visionai.analyses.update",
+ "visionai.annotations.create",
+ "visionai.annotations.delete",
+ "visionai.annotations.get",
+ "visionai.annotations.list",
+ "visionai.annotations.update",
+ "visionai.applications.create",
+ "visionai.applications.delete",
+ "visionai.applications.deploy",
+ "visionai.applications.get",
+ "visionai.applications.list",
+ "visionai.applications.undeploy",
+ "visionai.applications.update",
+ "visionai.assets.clip",
+ "visionai.assets.create",
+ "visionai.assets.delete",
+ "visionai.assets.generateHlsUri",
+ "visionai.assets.get",
+ "visionai.assets.ingest",
+ "visionai.assets.list",
+ "visionai.assets.search",
+ "visionai.assets.update",
+ "visionai.clusters.create",
+ "visionai.clusters.delete",
+ "visionai.clusters.get",
+ "visionai.clusters.getIamPolicy",
+ "visionai.clusters.list",
+ "visionai.clusters.setIamPolicy",
+ "visionai.clusters.update",
+ "visionai.clusters.watch",
+ "visionai.corpora.create",
+ "visionai.corpora.delete",
+ "visionai.corpora.get",
+ "visionai.corpora.list",
+ "visionai.corpora.suggest",
+ "visionai.corpora.update",
+ "visionai.dataSchemas.create",
+ "visionai.dataSchemas.delete",
+ "visionai.dataSchemas.get",
+ "visionai.dataSchemas.list",
+ "visionai.dataSchemas.update",
+ "visionai.dataSchemas.validate",
+ "visionai.drafts.create",
+ "visionai.drafts.delete",
+ "visionai.drafts.get",
+ "visionai.drafts.list",
+ "visionai.drafts.update",
+ "visionai.events.create",
+ "visionai.events.delete",
+ "visionai.events.get",
+ "visionai.events.getIamPolicy",
+ "visionai.events.list",
+ "visionai.events.setIamPolicy",
+ "visionai.events.update",
+ "visionai.instances.get",
+ "visionai.instances.list",
+ "visionai.locations.get",
+ "visionai.locations.list",
+ "visionai.operations.cancel",
+ "visionai.operations.delete",
+ "visionai.operations.get",
+ "visionai.operations.list",
+ "visionai.operations.wait",
+ "visionai.operators.create",
+ "visionai.operators.delete",
+ "visionai.operators.get",
+ "visionai.operators.getIamPolicy",
+ "visionai.operators.list",
+ "visionai.operators.setIamPolicy",
+ "visionai.operators.update",
+ "visionai.processors.create",
+ "visionai.processors.delete",
+ "visionai.processors.get",
+ "visionai.processors.list",
+ "visionai.processors.listPrebuilt",
+ "visionai.processors.update",
+ "visionai.searchConfigs.create",
+ "visionai.searchConfigs.delete",
+ "visionai.searchConfigs.get",
+ "visionai.searchConfigs.list",
+ "visionai.searchConfigs.update",
+ "visionai.series.acquireLease",
+ "visionai.series.create",
+ "visionai.series.delete",
+ "visionai.series.get",
+ "visionai.series.getIamPolicy",
+ "visionai.series.list",
+ "visionai.series.receive",
+ "visionai.series.releaseLease",
+ "visionai.series.renewLease",
+ "visionai.series.send",
+ "visionai.series.setIamPolicy",
+ "visionai.series.update",
+ "visionai.streams.create",
+ "visionai.streams.delete",
+ "visionai.streams.get",
+ "visionai.streams.getIamPolicy",
+ "visionai.streams.list",
+ "visionai.streams.receive",
+ "visionai.streams.send",
+ "visionai.streams.setIamPolicy",
+ "visionai.streams.update",
+ "visionai.uistreams.create",
+ "visionai.uistreams.delete",
+ "visionai.uistreams.generateStreamThumbnails",
+ "visionai.uistreams.get",
+ "visionai.uistreams.list",
+ "visualinspection.annotationSets.create",
+ "visualinspection.annotationSets.delete",
+ "visualinspection.annotationSets.get",
+ "visualinspection.annotationSets.list",
+ "visualinspection.annotationSets.update",
+ "visualinspection.annotationSpecs.create",
+ "visualinspection.annotationSpecs.delete",
+ "visualinspection.annotationSpecs.get",
+ "visualinspection.annotationSpecs.list",
+ "visualinspection.annotations.create",
+ "visualinspection.annotations.delete",
+ "visualinspection.annotations.get",
+ "visualinspection.annotations.list",
+ "visualinspection.annotations.update",
+ "visualinspection.datasets.create",
+ "visualinspection.datasets.delete",
+ "visualinspection.datasets.export",
+ "visualinspection.datasets.get",
+ "visualinspection.datasets.import",
+ "visualinspection.datasets.list",
+ "visualinspection.datasets.update",
+ "visualinspection.images.delete",
+ "visualinspection.images.get",
+ "visualinspection.images.list",
+ "visualinspection.images.update",
+ "visualinspection.locations.get",
+ "visualinspection.locations.list",
+ "visualinspection.locations.reportUsageMetrics",
+ "visualinspection.modelEvaluations.get",
+ "visualinspection.modelEvaluations.list",
+ "visualinspection.models.create",
+ "visualinspection.models.delete",
+ "visualinspection.models.get",
+ "visualinspection.models.list",
+ "visualinspection.models.update",
+ "visualinspection.models.writePrediction",
+ "visualinspection.modules.create",
+ "visualinspection.modules.delete",
+ "visualinspection.modules.get",
+ "visualinspection.modules.list",
+ "visualinspection.modules.update",
+ "visualinspection.operations.get",
+ "visualinspection.operations.list",
+ "visualinspection.solutionArtifacts.create",
+ "visualinspection.solutionArtifacts.delete",
+ "visualinspection.solutionArtifacts.get",
+ "visualinspection.solutionArtifacts.list",
+ "visualinspection.solutionArtifacts.predict",
+ "visualinspection.solutionArtifacts.update",
+ "visualinspection.solutions.create",
+ "visualinspection.solutions.delete",
+ "visualinspection.solutions.get",
+ "visualinspection.solutions.list",
+ "vmmigration.cloneJobs.create",
+ "vmmigration.cloneJobs.get",
+ "vmmigration.cloneJobs.list",
+ "vmmigration.cloneJobs.update",
+ "vmmigration.cutoverJobs.create",
+ "vmmigration.cutoverJobs.get",
+ "vmmigration.cutoverJobs.list",
+ "vmmigration.cutoverJobs.update",
+ "vmmigration.datacenterConnectors.create",
+ "vmmigration.datacenterConnectors.delete",
+ "vmmigration.datacenterConnectors.get",
+ "vmmigration.datacenterConnectors.list",
+ "vmmigration.datacenterConnectors.update",
+ "vmmigration.deployments.create",
+ "vmmigration.deployments.get",
+ "vmmigration.deployments.list",
+ "vmmigration.groups.create",
+ "vmmigration.groups.delete",
+ "vmmigration.groups.get",
+ "vmmigration.groups.list",
+ "vmmigration.groups.update",
+ "vmmigration.locations.get",
+ "vmmigration.locations.list",
+ "vmmigration.migratingVms.create",
+ "vmmigration.migratingVms.delete",
+ "vmmigration.migratingVms.get",
+ "vmmigration.migratingVms.list",
+ "vmmigration.migratingVms.update",
+ "vmmigration.operations.cancel",
+ "vmmigration.operations.delete",
+ "vmmigration.operations.get",
+ "vmmigration.operations.list",
+ "vmmigration.sources.create",
+ "vmmigration.sources.delete",
+ "vmmigration.sources.get",
+ "vmmigration.sources.list",
+ "vmmigration.sources.update",
+ "vmmigration.targets.create",
+ "vmmigration.targets.delete",
+ "vmmigration.targets.get",
+ "vmmigration.targets.list",
+ "vmmigration.targets.update",
+ "vmmigration.utilizationReports.create",
+ "vmmigration.utilizationReports.delete",
+ "vmmigration.utilizationReports.get",
+ "vmmigration.utilizationReports.list",
+ "vmwareengine.clusters.create",
+ "vmwareengine.clusters.delete",
+ "vmwareengine.clusters.get",
+ "vmwareengine.clusters.getIamPolicy",
+ "vmwareengine.clusters.list",
+ "vmwareengine.clusters.setIamPolicy",
+ "vmwareengine.clusters.update",
+ "vmwareengine.hcxActivationKeys.create",
+ "vmwareengine.hcxActivationKeys.get",
+ "vmwareengine.hcxActivationKeys.getIamPolicy",
+ "vmwareengine.hcxActivationKeys.list",
+ "vmwareengine.hcxActivationKeys.setIamPolicy",
+ "vmwareengine.locations.get",
+ "vmwareengine.locations.list",
+ "vmwareengine.networkPolicies.create",
+ "vmwareengine.networkPolicies.delete",
+ "vmwareengine.networkPolicies.get",
+ "vmwareengine.networkPolicies.list",
+ "vmwareengine.networkPolicies.update",
+ "vmwareengine.nodeTypes.get",
+ "vmwareengine.nodeTypes.list",
+ "vmwareengine.operations.delete",
+ "vmwareengine.operations.get",
+ "vmwareengine.operations.list",
+ "vmwareengine.privateClouds.create",
+ "vmwareengine.privateClouds.delete",
+ "vmwareengine.privateClouds.get",
+ "vmwareengine.privateClouds.getIamPolicy",
+ "vmwareengine.privateClouds.list",
+ "vmwareengine.privateClouds.resetNsxCredentials",
+ "vmwareengine.privateClouds.resetVcenterCredentials",
+ "vmwareengine.privateClouds.setIamPolicy",
+ "vmwareengine.privateClouds.showNsxCredentials",
+ "vmwareengine.privateClouds.showVcenterCredentials",
+ "vmwareengine.privateClouds.undelete",
+ "vmwareengine.privateClouds.update",
+ "vmwareengine.services.use",
+ "vmwareengine.services.view",
+ "vmwareengine.subnets.list",
+ "vmwareengine.vmwareEngineNetworks.create",
+ "vmwareengine.vmwareEngineNetworks.delete",
+ "vmwareengine.vmwareEngineNetworks.get",
+ "vmwareengine.vmwareEngineNetworks.list",
+ "vmwareengine.vmwareEngineNetworks.update",
+ "vpcaccess.connectors.create",
+ "vpcaccess.connectors.delete",
+ "vpcaccess.connectors.get",
+ "vpcaccess.connectors.list",
+ "vpcaccess.connectors.use",
+ "vpcaccess.locations.list",
+ "vpcaccess.operations.get",
+ "vpcaccess.operations.list",
+ "workflows.callbacks.send",
+ "workflows.executions.cancel",
+ "workflows.executions.create",
+ "workflows.executions.get",
+ "workflows.executions.list",
+ "workflows.locations.get",
+ "workflows.locations.list",
+ "workflows.operations.cancel",
+ "workflows.operations.get",
+ "workflows.operations.list",
+ "workflows.workflows.create",
+ "workflows.workflows.delete",
+ "workflows.workflows.get",
+ "workflows.workflows.list",
+ "workflows.workflows.update",
+ "workloadmanager.evaluations.create",
+ "workloadmanager.evaluations.delete",
+ "workloadmanager.evaluations.get",
+ "workloadmanager.evaluations.list",
+ "workloadmanager.evaluations.run",
+ "workloadmanager.evaluations.update",
+ "workloadmanager.executions.delete",
+ "workloadmanager.executions.get",
+ "workloadmanager.executions.list",
+ "workloadmanager.locations.get",
+ "workloadmanager.locations.list",
+ "workloadmanager.operations.cancel",
+ "workloadmanager.operations.delete",
+ "workloadmanager.operations.get",
+ "workloadmanager.operations.list",
+ "workloadmanager.results.list",
+ "workloadmanager.rules.list",
+ "workstations.operations.get",
+ "workstations.workstationClusters.create",
+ "workstations.workstationClusters.delete",
+ "workstations.workstationClusters.get",
+ "workstations.workstationClusters.list",
+ "workstations.workstationClusters.update",
+ "workstations.workstationConfigs.create",
+ "workstations.workstationConfigs.delete",
+ "workstations.workstationConfigs.get",
+ "workstations.workstationConfigs.getIamPolicy",
+ "workstations.workstationConfigs.list",
+ "workstations.workstationConfigs.setIamPolicy",
+ "workstations.workstationConfigs.update",
+ "workstations.workstations.create",
+ "workstations.workstations.delete",
+ "workstations.workstations.get",
+ "workstations.workstations.getIamPolicy",
+ "workstations.workstations.list",
+ "workstations.workstations.setIamPolicy",
+ "workstations.workstations.start",
+ "workstations.workstations.stop",
+ "workstations.workstations.update",
+ "workstations.workstations.use"
+]
\ No newline at end of file
diff --git a/ghunt/knowledge/sig.py b/ghunt/knowledge/sig.py
index 8ddfb8d..c730c58 100644
--- a/ghunt/knowledge/sig.py
+++ b/ghunt/knowledge/sig.py
@@ -1,6 +1,9 @@
sigs = {
"com.google.android.play.games": "38918a453d07199354f8b19af05ec6562ced5788",
"com.google.android.apps.docs": "38918a453d07199354f8b19af05ec6562ced5788",
+ "com.android.vending": "38918a453d07199354f8b19af05ec6562ced5788",
"com.google.android.youtube": "24bb24c05e47e0aefa68a58a766179d9b613a600",
- "com.android.chrome": "38918a453d07199354f8b19af05ec6562ced5788"
+ "com.google.android.apps.photos": "38918a453d07199354f8b19af05ec6562ced5788",
+ "com.google.android.gms": "38918a453d07199354f8b19af05ec6562ced5788",
+ "com.android.chrome": "38918a453d07199354f8b19af05ec6562ced5788",
}
\ No newline at end of file
diff --git a/ghunt/modules/spiderdal.py b/ghunt/modules/spiderdal.py
new file mode 100644
index 0000000..22999a1
--- /dev/null
+++ b/ghunt/modules/spiderdal.py
@@ -0,0 +1,195 @@
+import asyncio
+from dataclasses import dataclass
+from pathlib import Path
+
+from ghunt import globals as gb
+from ghunt.objects.base import GHuntCreds
+from ghunt.objects.utils import TMPrinter
+from ghunt.helpers.utils import get_httpx_client
+from ghunt.apis.digitalassetslinks import DigitalAssetsLinksHttp
+from ghunt.helpers.playstore import app_exists
+
+import httpx
+
+
+@dataclass
+class Asset:
+ site: str
+ package_name: str
+ certificate: str
+
+async def identify_public_pkgs(as_client: httpx.AsyncClient, pkg_name: str, pkgs: dict[str, str], limiter: asyncio.Semaphore):
+ async with limiter:
+ if await app_exists(as_client, pkg_name):
+ pkgs[pkg_name] = "public"
+ else:
+ pkgs[pkg_name] = "private"
+
+async def analyze_single(as_client: httpx.AsyncClient, dal: DigitalAssetsLinksHttp, current_target: Asset, sites: dict[str, dict], pkgs: dict[str, dict], visited: set, limiter: asyncio.Semaphore):
+ short_pkg_name = f"{current_target.package_name}${current_target.certificate}"
+
+ async with limiter:
+ if current_target.site:
+ _, res = await dal.list_statements(as_client, website=current_target.site)
+ elif current_target.package_name:
+ _, res = await dal.list_statements(as_client, android_package_name=current_target.package_name, android_cert_fingerprint=current_target.certificate)
+
+ for item in res.statements:
+ if item.target.web.site:
+ clean_site = item.target.web.site.strip('.')
+ if clean_site not in sites:
+ sites[clean_site] = {
+ "asset": Asset(site=clean_site, package_name=None, certificate=None),
+ "first_origin": current_target,
+ "origins": set(),
+ }
+ sites[clean_site]["origins"].add(current_target.site if current_target.site else short_pkg_name)
+
+ if item.target.android_app.package_name:
+ temp_name = f"{item.target.android_app.package_name}${item.target.android_app.certificate.sha_fingerprint}"
+
+ if temp_name not in pkgs:
+ pkgs[temp_name] = {
+ "asset": Asset(site=None, package_name=item.target.android_app.package_name, certificate=item.target.android_app.certificate.sha_fingerprint),
+ "first_origin": current_target,
+ "origins": set(),
+ }
+ pkgs[temp_name]["origins"].add(current_target.site if current_target.site else short_pkg_name)
+
+ if current_target.site:
+ visited.add(current_target.site)
+ if res.statements and current_target.site not in sites:
+ sites[current_target.site] = {
+ "asset": current_target,
+ "first_origin": None,
+ "origins": set(),
+ }
+ if current_target.package_name:
+ visited.add(short_pkg_name)
+ if res.statements and short_pkg_name not in pkgs:
+ pkgs[short_pkg_name] = {
+ "asset": current_target,
+ "first_origin": None,
+ "origins": set(),
+ }
+
+async def main(url: str, package: str, fingerprint: str, strict: bool, json_file: Path):
+ ghunt_creds = GHuntCreds()
+ ghunt_creds.load_creds()
+
+ as_client = get_httpx_client()
+ digitalassetslink = DigitalAssetsLinksHttp(ghunt_creds)
+
+ tmprinter = TMPrinter()
+
+ sites: dict = {}
+ pkgs: dict = {}
+ visited = set()
+
+ limiter = asyncio.Semaphore(10)
+
+ current_targets: list[Asset] = []
+
+ if url:
+ http = False
+ if url.startswith("http"):
+ http = True
+
+ if url.startswith(("http://", "https://")):
+ domain = url.split("//")[1]
+ else:
+ domain = url
+
+ temp_targets = []
+ temp_targets.append(f"https://{domain}")
+ if http:
+ temp_targets.append(f"http://{domain}")
+ if not strict:
+ temp_targets.append(f"https://www.{domain}")
+ if http:
+ temp_targets.append(f"http://www.{domain}")
+
+ for target in temp_targets:
+ current_targets.append(Asset(site=target, package_name=None, certificate=None))
+
+ if package and fingerprint:
+ current_targets.append(Asset(site=None, package_name=package, certificate=fingerprint))
+
+ round = 0
+ total_scanned = 0
+ print()
+ while current_targets:
+ round += 1
+ total_scanned += len(current_targets)
+
+ tmprinter.out(f"š·ļø [R{round}]: Investigating {len(current_targets)} targets...", style="bold magenta")
+
+ await asyncio.gather(
+ *[
+ analyze_single(as_client, digitalassetslink, target, sites, pkgs, visited, limiter)
+ for target in current_targets
+ ]
+ )
+
+ # Next candidates
+ next_sites = [site["asset"] for name,site in sites.items() if not name in visited]
+ next_pkgs = [pkg["asset"] for name,pkg in pkgs.items() if not name in visited]
+ current_targets = next_sites + next_pkgs
+
+ tmprinter.clear()
+ gb.rc.print(f"š·ļø [R{round}]: Investigation done ! {total_scanned} assets scanned.", style="bold magenta")
+
+ # Sort
+ pkgs_names = {x:None for x in set([x["asset"].package_name for x in pkgs.values()])}
+ await asyncio.gather(
+ *[
+ identify_public_pkgs(as_client, pkg_name, pkgs_names, limiter)
+ for pkg_name in pkgs_names
+ ]
+ )
+
+ # Print results
+ if sites:
+ gb.rc.print(f"\nš {len(sites)} site{'s' if len(sites) > 1 else ''} found !", style="white")
+ for site_url, site in sites.items():
+ if site["first_origin"]:
+ if site["first_origin"].site:
+ gb.rc.print(f"- [deep_sky_blue1][link={site_url}]{site_url}[/link][/deep_sky_blue1] [steel_blue italic](leaked by : {site['first_origin'].site})[/steel_blue italic]")
+ else:
+ gb.rc.print(f"- [deep_sky_blue1][link={site_url}]{site_url}[/link][/deep_sky_blue1] [steel_blue italic](leaked by : {site['first_origin'].package_name})[/steel_blue italic]")
+ else:
+ gb.rc.print(f"- [deep_sky_blue1][link={site_url}]{site_url}[/link][/deep_sky_blue1]")
+ else:
+ gb.rc.print("\nNo sites found.", style="italic bright_black")
+
+ if pkgs:
+ gb.rc.print(f"\nš¦ {len(pkgs_names)} Android package{'s' if len(pkgs) > 1 else ''} found !", style="white")
+ for pkg_name, state in pkgs_names.items():
+ if state == "public":
+ gb.rc.print(f"- šŖ {pkg_name}", style="light_steel_blue")
+ else:
+ gb.rc.print(f"- š„· {pkg_name}", style="light_steel_blue")
+ gb.rc.print("\tFingerprints (SHA256) :", style="steel_blue")
+ for pkg in pkgs.values():
+ fingerprints_cache = set()
+ if pkg["asset"].package_name == pkg_name:
+ if pkg["asset"].certificate not in fingerprints_cache:
+ if pkg["first_origin"].site:
+ gb.rc.print(f"\t\t- {pkg['asset'].certificate} (leaked by : {pkg['first_origin'].site})", style="steel_blue italic", emoji=False)
+ else:
+ gb.rc.print(f"\t\t- {pkg['asset'].certificate} (leaked by : {pkg['first_origin'].package_name})", style="steel_blue italic", emoji=False)
+ fingerprints_cache.add(pkg["asset"].certificate)
+ else:
+ gb.rc.print("\nNo packages found.", style="bright_black italic")
+
+ if json_file:
+ import json
+ from ghunt.objects.encoders import GHuntEncoder;
+ with open(json_file, "w", encoding="utf-8") as f:
+ f.write(json.dumps({
+ "sites": sites,
+ "packages": pkgs
+ }, cls=GHuntEncoder, indent=4))
+ gb.rc.print(f"\n[+] JSON output wrote to {json_file} !\n", style="italic")
+ else:
+ print()
\ No newline at end of file
diff --git a/ghunt/objects/apis.py b/ghunt/objects/apis.py
index ccc94a4..3aaec5b 100644
--- a/ghunt/objects/apis.py
+++ b/ghunt/objects/apis.py
@@ -6,30 +6,55 @@ from ghunt.errors import *
from ghunt.helpers.auth import *
import httpx
+import asyncio
from datetime import datetime, timezone
from typing import *
-import asyncio
+from dataclasses import dataclass
# APIs objects
+@dataclass
class EndpointConfig(SmartObj):
- def __init__(self, headers: Dict[str, str], cookies: str):
+ def __init__(self,
+ name: str="",
+ headers: Dict[str, str] = {},
+ cookies: Dict[str, str] = {},
+ ext_metadata: Dict[str, Dict[str, str]] = {},
+ verb: str = "",
+ data_type: str|None = None,
+ authentication_mode: str|None = None,
+ require_key: str | None = None,
+ key_origin: str | None = None,
+ _computed_headers: Dict[str, str] = {},
+ _computed_cookies: Dict[str, str] = {}
+ ):
+ self.name = name
self.headers = headers
self.cookies = cookies
+ self.ext_metadata = ext_metadata
+ self.verb = verb
+ self.data_type = data_type
+ self.authentication_mode = authentication_mode
+ self.require_key = require_key
+ self.key_origin = key_origin
+ self._computed_headers = _computed_headers
+ self._computed_cookies = _computed_cookies
class GAPI(SmartObj):
def __init__(self):
+ self.api_name: str = ""
+ self.package_name: str = ""
+ self.scopes: List[str] = []
+
+ self.hostname: str = ""
+ self.scheme: str = ""
self.loaded_endpoints: Dict[str, EndpointConfig] = {}
self.creds: GHuntCreds = None
self.headers: Dict[str, str] = {}
self.cookies: Dict[str, str] = {}
- self.gen_token_lock: asyncio.Semaphore = None
-
- self.authentication_mode: str = ""
- self.require_key: str = ""
- self.key_origin: str = ""
+ self.gen_token_lock: asyncio.Lock = None
def _load_api(self, creds: GHuntCreds, headers: Dict[str, str]):
if not creds.are_creds_loaded():
@@ -38,47 +63,47 @@ class GAPI(SmartObj):
if not is_headers_syntax_good(headers):
raise GHuntCorruptedHeadersError(f"The provided headers when loading the endpoint seems corrupted, please check it : {headers}")
- if self.authentication_mode == "oauth":
- self.gen_token_lock = asyncio.Semaphore(1)
-
- cookies = {}
- if self.authentication_mode in ["sapisidhash", "cookies_only"]:
- if not (cookies := creds.cookies):
- raise GHuntInsufficientCreds(f"This endpoint requires the cookies in the GHuntCreds object, but they aren't loaded.")
-
- if (key_name := self.require_key):
- if not (api_key := get_api_key(key_name)):
- raise GHuntInsufficientCreds(f"This API requires the {key_name} API key in the GHuntCreds object, but it isn't loaded.")
- if not self.key_origin:
- self.key_origin = get_origin_of_key(key_name)
- headers = {**headers, "X-Goog-Api-Key": api_key, **headers, "Origin": self.key_origin, "Referer": self.key_origin}
-
- if self.authentication_mode == "sapisidhash":
- if not (sapisidhash := creds.cookies.get("SAPISID")):
- raise GHuntInsufficientCreds(f"This endpoint requires the SAPISID cookie in the GHuntCreds object, but it isn't loaded.")
-
- headers = {**headers, "Authorization": f"SAPISIDHASH {gen_sapisidhash(sapisidhash, self.key_origin)}"}
-
self.creds = creds
self.headers = headers
- self.cookies = cookies
- def _load_endpoint(self, endpoint_name: str,
- headers: Dict[str, str]={}, ext_metadata: Dict[str, str]={}):
- if endpoint_name in self.loaded_endpoints:
+ def _load_endpoint(self, endpoint: EndpointConfig):
+ if endpoint.name in self.loaded_endpoints:
return
- headers = {**headers, **self.headers}
+ headers = {**endpoint.headers, **self.headers}
+
+ if endpoint.authentication_mode == "oauth":
+ self.gen_token_lock = asyncio.Lock()
+
+ cookies = {}
+ if endpoint.authentication_mode in ["sapisidhash", "cookies_only"]:
+ if not (cookies := self.creds.cookies):
+ raise GHuntInsufficientCreds(f"This endpoint requires the cookies in the GHuntCreds object, but they aren't loaded.")
+
+ if (key_name := endpoint.require_key):
+ if not (api_key := get_api_key(key_name)):
+ raise GHuntInsufficientCreds(f"This endpoint requires the {key_name} API key in the GHuntCreds object, but it isn't loaded.")
+ if not endpoint.key_origin:
+ endpoint.key_origin = get_origin_of_key(key_name)
+ headers = {**headers, "X-Goog-Api-Key": api_key, **headers, "Origin": endpoint.key_origin, "Referer": endpoint.key_origin}
+
+ if endpoint.authentication_mode == "sapisidhash":
+ if not (sapisidhash := cookies.get("SAPISID")):
+ raise GHuntInsufficientCreds(f"This endpoint requires the SAPISID cookie in the GHuntCreds object, but it isn't loaded.")
+
+ headers = {**headers, "Authorization": f"SAPISIDHASH {gen_sapisidhash(sapisidhash, endpoint.key_origin)}"}
# https://github.com/googleapis/googleapis/blob/f8a290120b3a67e652742a221f73778626dc3081/google/api/context.proto#L43
- for ext_type,ext_value in ext_metadata.items():
+ for ext_type,ext_value in endpoint.ext_metadata.items():
ext_bin_headers = {f"X-Goog-Ext-{k}-{ext_type.title()}":v for k,v in ext_value.items()}
headers = {**headers, **ext_bin_headers}
if not is_headers_syntax_good(headers):
raise GHuntCorruptedHeadersError(f"The provided headers when loading the endpoint seems corrupted, please check it : {headers}")
- self.loaded_endpoints[endpoint_name] = EndpointConfig(headers, self.cookies)
+ endpoint._computed_headers = headers
+ endpoint._computed_cookies = cookies
+ self.loaded_endpoints[endpoint.name] = endpoint
async def _check_and_gen_authorization_token(self, as_client: httpx.AsyncClient, creds: GHuntCreds):
async with self.gen_token_lock:
@@ -99,54 +124,35 @@ class GAPI(SmartObj):
gb.rc.print(f"\n[+] New token for {self.api_name} has been generated", style="italic")
return token
- async def _query(self, as_client: httpx.AsyncClient, verb: str, endpoint_name: str, base_url: str, params: Dict[str, Any], data: Any, data_type: str) -> httpx.Response:
+ async def _query(self, endpoint_name: str, as_client: httpx.AsyncClient, base_url: str, params: Dict[str, Any]={}, data: Any=None) -> httpx.Response:
endpoint = self.loaded_endpoints[endpoint_name]
- headers = endpoint.headers
- if self.authentication_mode == "oauth":
+ headers = endpoint._computed_headers
+ if endpoint.authentication_mode == "oauth":
token = await self._check_and_gen_authorization_token(as_client, self.creds)
headers = {**headers, "Authorization": f"OAuth {token}"}
- if verb == "GET":
+ if endpoint.verb == "GET":
req = await as_client.get(f"{self.scheme}://{self.hostname}{base_url}",
- params=params, headers=headers, cookies=endpoint.cookies)
- elif verb == "POST":
- if data_type == "data":
+ params=params, headers=headers, cookies=endpoint._computed_cookies)
+ elif endpoint.verb == "POST":
+ if endpoint.data_type == "data":
req = await as_client.post(f"{self.scheme}://{self.hostname}{base_url}",
- params=params, data=data, headers=headers, cookies=endpoint.cookies)
- elif data_type == "json":
+ params=params, data=data, headers=headers, cookies=endpoint._computed_cookies)
+ elif endpoint.data_type == "json":
req = await as_client.post(f"{self.scheme}://{self.hostname}{base_url}",
- params=params, json=data, headers=headers, cookies=endpoint.cookies)
+ params=params, json=data, headers=headers, cookies=endpoint._computed_cookies)
else:
- raise GHuntUnknownRequestDataTypeError(f"The provided data type {data_type} wasn't recognized by GHunt.")
+ raise GHuntUnknownRequestDataTypeError(f"The provided data type {endpoint.data_type} wasn't recognized by GHunt.")
else:
- raise GHuntUnknownVerbError(f"The provided verb {verb} wasn't recognized by GHunt.")
+ raise GHuntUnknownVerbError(f"The provided verb {endpoint.verb} wasn't recognized by GHunt.")
return req
-
+
# Others
class Parser(SmartObj):
- def _merge(self, obj) -> any:
- """Merging two objects of the same class."""
-
- def recursive_merge(obj1, obj2, module_name: str) -> any:
- directions = [(obj1, obj2), (obj2, obj1)]
- for direction in directions:
- from_obj, target_obj = direction
- for attr_name, attr_value in from_obj.__dict__.items():
- class_name = get_class_name(attr_value)
- if class_name.startswith(module_name) and attr_name in target_obj.__dict__:
- merged_obj = recursive_merge(attr_value, target_obj.__dict__[attr_name], module_name)
- target_obj.__dict__[attr_name] = merged_obj
-
- elif not attr_name in target_obj.__dict__ or \
- (attr_value and not target_obj.__dict__.get(attr_name)):
- target_obj.__dict__[attr_name] = attr_value
- return obj1
-
- class_name = get_class_name(self)
- module_name = self.__module__
- if not get_class_name(obj).startswith(class_name):
- raise GHuntObjectsMergingError("The two objects being merged aren't from the same class.")
-
- self = recursive_merge(self, obj, module_name)
\ No newline at end of file
+ """
+ The class that is used to initialize every parser class.
+ It will automatically manage the __slots__ attribute.
+ """
+ pass
\ No newline at end of file
diff --git a/ghunt/objects/base.py b/ghunt/objects/base.py
index 1f4e0fe..e087304 100644
--- a/ghunt/objects/base.py
+++ b/ghunt/objects/base.py
@@ -6,11 +6,12 @@ from datetime import datetime
import base64
from autoslot import Slots
+import httpx
from ghunt.errors import GHuntInvalidSession
-# class SmartObj(Slots): # Not Python 3.13 compatible
+# class SmartObj(Slots): # Not Python 3.13 compatible so FUCK it fr fr
# pass
class SmartObj():
diff --git a/ghunt/objects/session.py b/ghunt/objects/session.py
new file mode 100644
index 0000000..7640820
--- /dev/null
+++ b/ghunt/objects/session.py
@@ -0,0 +1,20 @@
+from typing import *
+
+import httpx
+from ghunt.helpers.utils import get_httpx_client
+from ghunt.helpers import auth
+from ghunt.objects.base import GHuntCreds, SmartObj
+
+
+# class Session(SmartObj):
+# def __init__(self, client: httpx.AsyncClient = None) -> None:
+# self.creds: GHuntCreds = None
+# self.client: httpx.AsyncClient = client or get_httpx_client()
+
+# @staticmethod
+# async def new(client: httpx.AsyncClient = None, authentify=False) -> "Session":
+# cls = Session(client=client)
+
+# if authentify:
+# cls.creds = await auth.load_and_auth(client)
+# return cls
\ No newline at end of file
diff --git a/ghunt/objects/utils.py b/ghunt/objects/utils.py
index 02be587..ca21891 100644
--- a/ghunt/objects/utils.py
+++ b/ghunt/objects/utils.py
@@ -5,16 +5,21 @@ from ghunt.objects.base import SmartObj
from typing import *
-class TMPrinter(SmartObj):
- def __init__(self):
- self.max_len = 0
+from rich.console import Console
- def out(self, text: str):
+class TMPrinter():
+ """
+ Print temporary text, on the same line.
+ """
+ def __init__(self, rc: Console=Console(highlight=False)):
+ self.max_len = 0
+ self.rc = rc
+
+ def out(self, text: str, style: str=""):
if len(text) > self.max_len:
self.max_len = len(text)
else:
text += (" " * (self.max_len - len(text)))
- print(text, end='\r')
-
+ self.rc.print(text, end='\r', style=style)
def clear(self):
- print(" " * self.max_len, end="\r")
\ No newline at end of file
+ self.rc.print(" " * self.max_len, end="\r")
\ No newline at end of file
diff --git a/ghunt/parsers/digitalassetslinks.py b/ghunt/parsers/digitalassetslinks.py
new file mode 100644
index 0000000..09bdcc7
--- /dev/null
+++ b/ghunt/parsers/digitalassetslinks.py
@@ -0,0 +1,74 @@
+from typing import *
+from ghunt.objects.apis import Parser
+
+
+class DalStatements(Parser):
+ def __init__(self):
+ self.statements: List[DalStatement] = []
+ self.max_age: str = ""
+ self.debug_string: str = ""
+
+ def _scrape(self, digital_assets_links_base_model_data: Dict[str, any]):
+ if (statements_data := digital_assets_links_base_model_data.get('statements')):
+ for statements_data_item in statements_data:
+ statements_item = DalStatement()
+ statements_item._scrape(statements_data_item)
+ self.statements.append(statements_item)
+ self.max_age = digital_assets_links_base_model_data.get('maxAge')
+ self.debug_string = digital_assets_links_base_model_data.get('debugString')
+
+class DalStatement(Parser):
+ def __init__(self):
+ self.source: DalSource = DalSource()
+ self.relation: str = ""
+ self.target: DalTarget = DalTarget()
+
+ def _scrape(self, digital_assets_links_unknown_model1_data: Dict[str, any]):
+ if (source_data := digital_assets_links_unknown_model1_data.get('source')):
+ self.source._scrape(source_data)
+ self.relation = digital_assets_links_unknown_model1_data.get('relation')
+ if (target_data := digital_assets_links_unknown_model1_data.get('target')):
+ self.target._scrape(target_data)
+
+class DalSource(Parser):
+ def __init__(self):
+ self.web: DalWeb = DalWeb()
+
+ def _scrape(self, digital_assets_links_source_data: Dict[str, any]):
+ if (web_data := digital_assets_links_source_data.get('web')):
+ self.web._scrape(web_data)
+
+class DalWeb(Parser):
+ def __init__(self):
+ self.site: str = ""
+
+ def _scrape(self, digital_assets_links_web_data: Dict[str, str]):
+ self.site = digital_assets_links_web_data.get('site')
+
+class DalTarget(Parser):
+ def __init__(self):
+ self.android_app: DalAndroidApp = DalAndroidApp()
+ self.web: DalWeb = DalWeb()
+
+ def _scrape(self, digital_assets_links_target_data: Dict[str, any]):
+ if (android_app_data := digital_assets_links_target_data.get('androidApp')):
+ self.android_app._scrape(android_app_data)
+ if (web_data := digital_assets_links_target_data.get('web')):
+ self.web._scrape(web_data)
+
+class DalAndroidApp(Parser):
+ def __init__(self):
+ self.package_name: str = ""
+ self.certificate: DalCertificate = DalCertificate()
+
+ def _scrape(self, digital_assets_links_android_app_data: Dict[str, any]):
+ self.package_name = digital_assets_links_android_app_data.get('packageName')
+ if (certificate_data := digital_assets_links_android_app_data.get('certificate')):
+ self.certificate._scrape(certificate_data)
+
+class DalCertificate(Parser):
+ def __init__(self):
+ self.sha_fingerprint: str = ""
+
+ def _scrape(self, digital_assets_links_certificate_data: Dict[str, str]):
+ self.sha_fingerprint = digital_assets_links_certificate_data.get('sha256Fingerprint')
diff --git a/ghunt/parsers/identitytoolkit.py b/ghunt/parsers/identitytoolkit.py
new file mode 100644
index 0000000..04ceac8
--- /dev/null
+++ b/ghunt/parsers/identitytoolkit.py
@@ -0,0 +1,94 @@
+from typing import *
+from ghunt.objects.apis import Parser
+
+
+class ITKProjectConfig(Parser):
+ def __init__(self):
+ self.project_id: str = ""
+ self.authorized_domains: List[str] = []
+
+ def _scrape(self, itk_project_config_data: Dict[str, any]):
+ self.project_id = itk_project_config_data.get('projectId')
+ self.authorized_domains = itk_project_config_data.get('authorizedDomains')
+
+class ITKPublicKeys(Parser):
+ def __init__(self):
+ self.sk_ib_ng: str = ""
+ self.t_xew: str = ""
+ self.p_r_ww: str = ""
+ self.t_bma: str = ""
+ self.tl_gyha: str = ""
+
+ def _scrape(self, itk_public_keys_data: Dict[str, str]):
+ self.sk_ib_ng = itk_public_keys_data.get('skIBNg')
+ self.t_xew = itk_public_keys_data.get('7TX2ew')
+ self.p_r_ww = itk_public_keys_data.get('0pR3Ww')
+ self.t_bma = itk_public_keys_data.get('tB0M2A')
+ self.tl_gyha = itk_public_keys_data.get('tlGYHA')
+
+class ITKSessionCookiePublicKeys(Parser):
+ def __init__(self):
+ self.keys: List[ITKSessionCookiePublicKey] = []
+
+ def _scrape(self, itk_session_cookie_public_keys_data: Dict[str, list]):
+ if (keys_data := itk_session_cookie_public_keys_data.get('keys')):
+ for keys_data_item in keys_data:
+ keys_item = ITKSessionCookiePublicKey()
+ keys_item._scrape(keys_data_item)
+ self.keys.append(keys_item)
+
+class ITKSessionCookiePublicKey(Parser):
+ def __init__(self):
+ self.kty: str = ""
+ self.alg: str = ""
+ self.use: str = ""
+ self.kid: str = ""
+ self.n: str = ""
+ self.e: str = ""
+
+ def _scrape(self, itk_session_cookie_public_key_data: Dict[str, str]):
+ self.kty = itk_session_cookie_public_key_data.get('kty')
+ self.alg = itk_session_cookie_public_key_data.get('alg')
+ self.use = itk_session_cookie_public_key_data.get('use')
+ self.kid = itk_session_cookie_public_key_data.get('kid')
+ self.n = itk_session_cookie_public_key_data.get('n')
+ self.e = itk_session_cookie_public_key_data.get('e')
+
+class ITKSignupNewUser(Parser):
+ def __init__(self):
+ self.kind: str = ""
+ self.id_token: str = ""
+ self.email: str = ""
+ self.refresh_token: str = ""
+ self.expires_in: str = ""
+ self.local_id: str = ""
+
+ def _scrape(self, itk_signup_data: Dict[str, str]):
+ self.kind = itk_signup_data.get('kind')
+ self.id_token = itk_signup_data.get('idToken')
+ self.email = itk_signup_data.get('email')
+ self.refresh_token = itk_signup_data.get('refreshToken')
+ self.expires_in = itk_signup_data.get('expiresIn')
+ self.local_id = itk_signup_data.get('localId')
+
+class ITKVerifyPassword(Parser):
+ def __init__(self):
+ self.kind: str = ""
+ self.local_id: str = ""
+ self.email: str = ""
+ self.display_name: str = ""
+ self.id_token: str = ""
+ self.registered: bool = False
+ self.refresh_token: str = ""
+ self.expires_in: str = ""
+
+ def _scrape(self, itk_verify_password_data: Dict[str, any]):
+ self.kind = itk_verify_password_data.get('kind')
+ self.local_id = itk_verify_password_data.get('localId')
+ self.email = itk_verify_password_data.get('email')
+ self.display_name = itk_verify_password_data.get('displayName')
+ self.id_token = itk_verify_password_data.get('idToken')
+ self.registered = itk_verify_password_data.get('registered')
+ self.refresh_token = itk_verify_password_data.get('refreshToken')
+ self.expires_in = itk_verify_password_data.get('expiresIn')
+
diff --git a/ghunt/parsers/mobilesdk.py b/ghunt/parsers/mobilesdk.py
new file mode 100644
index 0000000..80be1a8
--- /dev/null
+++ b/ghunt/parsers/mobilesdk.py
@@ -0,0 +1,19 @@
+from typing import *
+from ghunt.objects.apis import Parser
+
+
+class MobileSDKDynamicConfig(Parser):
+ def __init__(self):
+ self.database_url: str = ""
+ self.storage_bucket: str = ""
+ self.auth_domain: str = ""
+ self.messaging_sender_id: str = ""
+ self.project_id: str = ""
+
+ def _scrape(self, dynamic_config_base_model_data: Dict[str, str]):
+ self.database_url = dynamic_config_base_model_data.get('databaseURL')
+ self.storage_bucket = dynamic_config_base_model_data.get('storageBucket')
+ self.auth_domain = dynamic_config_base_model_data.get('authDomain')
+ self.messaging_sender_id = dynamic_config_base_model_data.get('messagingSenderId')
+ self.project_id = dynamic_config_base_model_data.get('projectId')
+
diff --git a/ghunt/version.py b/ghunt/version.py
index 4449e3e..fa4dfe8 100644
--- a/ghunt/version.py
+++ b/ghunt/version.py
@@ -1,4 +1,4 @@
metadata = {
- "version": "2.2.1",
+ "version": "2.3.2",
"name": "Wardriving Edition"
}
\ No newline at end of file
diff --git a/poetry.lock b/poetry.lock
index 15e6bc4..7605489 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -110,6 +110,26 @@ files = [
{file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"},
]
+[[package]]
+name = "dnspython"
+version = "2.7.0"
+description = "DNS toolkit"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"},
+ {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"},
+]
+
+[package.extras]
+dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"]
+dnssec = ["cryptography (>=43)"]
+doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"]
+doq = ["aioquic (>=1.0.0)"]
+idna = ["idna (>=3.7)"]
+trio = ["trio (>=0.23)"]
+wmi = ["wmi (>=1.5.1)"]
+
[[package]]
name = "geographiclib"
version = "2.0"
@@ -757,4 +777,4 @@ files = [
[metadata]
lock-version = "2.0"
python-versions = "^3.11"
-content-hash = "26f590db442e3544788dd091345a919c04a85ddda542bbf1f8b18b5fb246cd4c"
+content-hash = "d3fb4f6ff1e00b0769adaf4de91bfd9e50e1d41104d601c44fb970f3a7736ef6"
diff --git a/pyproject.toml b/pyproject.toml
index 16f12ac..5e3754b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "ghunt"
-version = "2.2.1"
+version = "2.3.2"
authors = [
{name = "mxrch", email = "mxrch.dev@pm.me"},
]
@@ -31,7 +31,7 @@ include = ["ghunt", "ghunt.*"]
[tool.poetry]
name = "ghunt"
-version = "2.2.1"
+version = "2.3.2"
description = "An offensive Google framework."
authors = ["mxrch "]
license = "AGPL-3.0"
@@ -55,6 +55,7 @@ inflection = "^0.5.1"
jsonpickle = "^3.3.0"
packaging = "^24.1"
rich-argparse = "^1.5.2"
+dnspython = "^2.7.0"
[build-system]
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 9ecb66f..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-geopy==2.3.0
-httpx[http2]==0.23.1
-imagehash==4.3.1
-pillow==9.3.0
-python-dateutil==2.8.2
-rich==12.6.0
-beautifultable==1.1.0
-beautifulsoup4==4.11.1
-alive-progress==2.4.1
-protobuf==4.21.9
-autoslot==2021.10.1
-humanize==4.4.0
-inflection==0.5.1
-jsonpickle==2.2.0
-packaging==23.0
-jsonpickle==2.2.0
-rich_argparse==1.5.0
\ No newline at end of file