我们正在使用GoogleCloudPlatform进行大数据分析。对于处理,我们目前正在使用谷歌云数据和&火花流。
我想使用REST API提交Spark作业,但是当我使用api-key调用URI时,我收到以下错误!
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
URI: - https://dataproc.googleapis.com/v1/projects/orion-0010/regions/us-central1-f/clusters/spark-recon-1?key=AIzaSyA8C2lF9kT ************* SGxAipL0
我是从谷歌控制台创建的API> API管理员
答案 0 :(得分:2)
虽然API密钥可用于将调用与开发人员项目相关联,但它实际上并未用于授权。 Dataproc的REST API与Google Cloud Platform中的大多数其他可计费REST API一样,使用oauth2进行身份验证和授权。如果您想以编程方式调用API,您可能希望使用其中一个客户端库,例如Java SDK for Dataproc,它提供围绕低级JSON协议的便利包装器,并为您提供{{3} }。
您还可以使用Google的handy thick libraries for using oauth2 credentials体验直接REST API,您需要点击右上角的“使用OAuth 2.0授权请求”按钮。
我还注意到你在Dataproc URI的regions/
路径下使用了us-central1-f;请注意,Dataproc的区域不会与计算引擎区域或区域一对一映射;相反,Dataproc的区域将包含多个计算引擎区域或区域。目前只有一个公开可用的Dataproc区域,称为global
,并且能够将集群部署到所有计算引擎区域。有关使用oauth2访问令牌的简单说明,如果安装了curl
CLI,则只需使用gcloud
和gcloud
:
PROJECT='<YOUR PROJECT HERE>'
ACCESS_TOKEN=$(gcloud beta auth application-default print-access-token)
curl \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
https://dataproc.googleapis.com/v1/projects/${PROJECT}/regions/global/clusters
请记住,gcloud在这里打印的ACCESS_TOKEN
本质上会过期(大约5分钟,如果我没记错的话);关键概念是,您在HTTP标头中为每个请求传递的令牌通常是“短期”令牌,并且根据设计,您将拥有在访问令牌使用“刷新令牌”到期时单独获取新令牌的代码“;这有助于防止意外泄露长期凭据。这个“刷新”流程是厚版本库在幕后处理的一部分。