未知API Keys与`anonymous`服务账户问题排查问询
神秘API密钥与
anonymous服务账户排查问题 在排查每小时约4000次compute.v1.BackendServicesService.Get请求仅返回404的问题过程中,发现了两个新问题:
- 存在未知API密钥被使用
- 出现唯一ID为
anonymous的服务账户
当前项目未配置任何API密钥。
核心疑问
- 这些API密钥是什么?为何被使用?
anonymous服务账户是什么?为何被使用?
以下是使用Google托管Prometheus的Prometheus API和PromQL(相比MQL更熟悉前者)进行的查询操作,所有查询基于serviceruntime.googleapis.com的consumed_api类型指标:
基础环境配置
PROJECT="..." MONITORING="https://monitoring.googleapis.com/v1" ENDPOINT="${MONITORING}/projects/${PROJECT}/location/global/prometheus" TOKEN=$(gcloud auth print-access-token) START=$(date +%s -d "3 hours ago") END=$(date +%s)
查询过去3小时使用过的API密钥
MATCH=" serviceruntime_googleapis_com:api_request_count{ monitored_resource=\"consumed_api\" }" START=$(date +%s -d "3 hours ago") END=$(date +%s) curl \ --silent \ --get \ --header "Authorization: Bearer ${TOKEN}" \ --data-urlencode "match[]=${MATCH}" \ --data-urlencode "start=${START}" \ --data-urlencode "end=${END}" \ ${ENDPOINT}/api/v1/label/credential_id/values \ | jq -r '.|select(.status=="success")|.data[]|match("apikey:(.+)")|.captures[0].string'
查询结果:
AIza..1g AIza...Nc
查询API密钥调用的具体方法
# 仅匹配以`apikey:`开头的凭证 MATCH=" serviceruntime_googleapis_com:api_request_count{ monitored_resource=\"consumed_api\", credential_id=~\"apikey:.+\" }" curl \ --silent \ --get \ --header "Authorization: Bearer ${TOKEN}" \ --data-urlencode "match[]=${MATCH}" \ --data-urlencode "start=${START}" \ --data-urlencode "end=${END}" \ ${ENDPOINT}/api/v1/label/method/values \ | jq -r '.|select(.status=="success")|.data[]'
查询结果:
google.cloud.functions.v2.FunctionService.ListFunctions google.cloud.functions.v2.FunctionService.ListRuntimes google.cloud.location.Locations.ListLocations google.cloud.run.v1.Services.ListServices google.cloud.scheduler.v1.CloudScheduler.ListJobs google.cloud.scheduler.v1beta1.CloudScheduler.ListJobs google.datastore.v1.Datastore.Lookup google.firestore.admin.v1.FirestoreAdmin.GetDatabase google.firestore.v1.Firestore.ListCollectionIds google.longrunning.Operations.ListOperations
注:Firestore/Datastore相关调用使用其中一个API密钥;Cloud Run/Scheduler/Functions/Location相关调用使用另一个API密钥。
anonymous服务账户调用情况
anonymous服务账户被用于约100次google.logging.v2.LoggingServiceV2.WriteLogEntries调用。
内容的提问来源于stack exchange,提问作者DazWilkin
相关产品推荐
相关产品推荐

