Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何在不下载服务帐户凭据的情况下,从Google引擎和本地验证Google (Google )?

如何在不下载服务帐户凭据的情况下,从Google引擎和本地验证Google (Google )?
EN

Stack Overflow用户
提问于 2020-08-20 06:06:59
回答 1查看 1.4K关注 0票数 6

我们公司正在处理来自Google平台的Google ( Google )的数据,我们在认证方面遇到了一些问题。

我们需要在两个不同的地方运行对Google进行API调用的代码:在Google引擎的生产中,以及在开发环境中,即我们的开发人员的笔记本电脑上。

我们公司对凭证非常严格,不允许下载服务帐户凭据JSON密钥(这是更好的实践,并提供了更高的安全性)。看起来,GCP中的所有文档都简单地下载服务帐户的JSON密钥并使用它。或者Google /开发人员说,创建一个OAuth2客户端ID并下载它,就像这里一样。

他们经常使用这样的代码:

代码语言:javascript
代码运行次数:0
复制
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'

credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

但是我们不能(或者只是不想)下载我们的服务帐户JSON密钥,所以如果我们只遵循这些文档,我们就会陷入困境。

对于Google环境,我们已经能够通过使用GCP应用程序默认凭据(ADCs)进行身份验证--即不显式指定在代码中使用的凭据并让客户端库“只工作”--只要确保使用正确的作用域https://www.googleapis.com/auth/drive创建VM,并且将默认的计算服务帐户电子邮件授予需要访问的工作表的权限--这在docs 这里中得到了解释。你可以这样做;

代码语言:javascript
代码运行次数:0
复制
from googleapiclient.discovery import build
service = build('sheets', 'v4')
SPREADSHEET_ID="<sheet_id>"
RANGE_NAME="A1:A2"
s = service.spreadsheets().values().get(
    spreadsheetId=SPREADSHEET_ID,
    range=RANGE_NAME, majorDimension="COLUMNS"
).execute()

然而,我们如何在本地开发人员的笔记本电脑上进行开发呢?同样,没有下载任何JSON密钥,最好是使用最“只起作用”的方法?

通常,我们使用gcloud auth application-default login来创建默认的应用程序凭据,而Google库使用这些凭据“只起作用”,比如Google。但是,这并不适用于GCP之外的Google,比如Google service = build('sheets', 'v4'),它在出现此错误时失败了:“请求没有足够的身份验证作用域”。然后我们尝试了各种各样的解决方案,比如:

代码语言:javascript
代码运行次数:0
复制
credentials, project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/drive"])

代码语言:javascript
代码运行次数:0
复制
credentials, project_id = google.auth.default()
credentials = google_auth_oauthlib.get_user_credentials(
    ["https://www.googleapis.com/auth/drive"], credentials._client_id, credentials._client_secret)
)

还有更多。这都会给我们在尝试对Google进行身份验证时遇到无数的错误/问题:

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-20 06:27:17

使来自开发环境的身份验证变得简单的一种方法是使用Service模拟。

这里是一个关于使用服务帐户模拟的博客,包括这样做的好处。@johnhanley (他写了这篇博文)是个很棒的人,也有很多信息丰富的答案!

要使本地机器能够为Google进行身份验证,您需要在本地计算机上创建默认应用程序凭据,该应用程序凭据模拟服务帐户,并应用要访问的API所需的作用域。

要能够模拟服务帐户,用户必须具有角色roles/iam.serviceAccountTokenCreator。此角色可应用于整个项目或个人服务帐户。

您可以使用gcloud来完成以下操作:

代码语言:javascript
代码运行次数:0
复制
gcloud iam service-accounts add-iam-policy-binding [COMPUTE_SERVICE_ACCOUNT_FULL_EMAIL] \
--member user:[USER_EMAIL] \
--role roles/iam.serviceAccountTokenCreator

完成后,创建本地凭据:

代码语言:javascript
代码运行次数:0
复制
gcloud auth application-default login \
--scopes=openid,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/accounts.reauth \
--impersonate-service-account=[COMPUTE_SERVICE_ACCOUNT_FULL_EMAIL]

这将解决您得到的范围错误。在Drive范围之外添加的三个额外作用域是gcloud auth application-default login应用和需要的默认作用域。

如果在不使用模拟的情况下应用作用域,则在试图进行身份验证时会出现如下错误:

代码语言:javascript
代码运行次数:0
复制
HttpError: <HttpError 403 when requesting https://sheets.googleapis.com/v4/spreadsheets?fields=spreadsheetId&alt=json returned "Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the sheets.googleapis.com. We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.">

一旦设置了凭据,就可以使用本地计算机上运行在上的相同代码:)

注意:也可以为所有gcloud命令设置模拟:

代码语言:javascript
代码运行次数:0
复制
gcloud config set auth/impersonate_service_account [COMPUTE_SERVICE_ACCOUNT_FULL_EMAIL]

通过模拟服务帐户在本地计算机上创建默认应用程序凭据是验证开发代码的一种巧妙方法。这意味着代码将具有与它所模拟的服务帐户完全相同的权限。如果这个服务帐户将在生产中运行代码,则您知道开发中的代码运行与生产相同。这也意味着您永远不必创建或下载任何服务帐户密钥。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63506885

复制
相关文章
lucene如何返回所有数据
我们在实际使用lucene的过程中,筛选多个条件时BooleanQuery这个类来实现,比如下面代码:
johnhuster的分享
2022/03/29
7110
如何利用CDO从数据集中提取数据
之前说了如何利用CDO查看数据集信息 使用CDO查看气象数据信息。这一次说一下利用CDO从数据集中提取数据。这部分是非常使用的,尤其是当涉及到大数据集的时候,其优势就变得非常明显了。
bugsuse
2020/04/21
8.8K0
如何利用CDO从数据集中提取数据
数据库的方向 - 行vs列
前言: 转载的好文不多,但此篇的确是难得一见的好文,如若不信,请仔细阅读。 此篇文章没有波涛汹涌的起伏,没有繁多的代码,只有悠然自得的文笔。 因此,分享此文给大家。 翻译原文链接:https://ww
谙忆
2021/01/21
1.1K0
数据库的方向 - 行vs列
从Bert预训练数据集中获取词向量
在一些操作过程中,经常要获取词向量,BERT做为一个在各项评测指标中都比较出色的,且提供了许多预训练模型的,从其中获取词向量是一些任务中必备的操作。
sparkexpert
2019/08/23
4.5K0
从Bert预训练数据集中获取词向量
Pandas DataFrame显示行和列的数据不全
pd.set_option('display.max_columns', None)
用户7886150
2020/12/26
6.7K0
FPGA计算3行同列数据之和
本文介绍了如何利用FPGA实现Sobel边缘检测算法,通过仿真实验证明该方法可以大幅提高边缘检测的实时性,从而在嵌入式系统中得到广泛应用。
NingHeChuan
2018/01/05
1.4K0
FPGA计算3行同列数据之和
从xlnet预训练数据集中获取词向量
利用pytorch-transformers中的方法进行预训练模型加载,然后进行词向量的获取和提取。
sparkexpert
2019/08/23
1.5K0
从xlnet预训练数据集中获取词向量
数据库行存储及列存储详解
本文参见:https://blog.csdn.net/Xingxinxinxin/article/details/80939277
全栈程序员站长
2022/09/06
2.7K0
数据库行存储及列存储详解
SAS数据集中一行与多行的比较
前几天看到一个群友提的一个问题:求上图中X小于等于所有Y值的个数。比如,第一个Y为0,则5个X中小于等于0的个数为0。实现这一目的的方法有多种,最易懂的方法应该是转置加数组,下面介绍其他两种方法:
专业余码农
2020/07/16
1.4K0
SAS数据集中一行与多行的比较
pandas数据清洗-删除没有序号的所有行的数据
pandas数据清洗-删除没有序号的所有行的数据 问题:我的数据如下,要求:我想要的是:有序号的行留下,没有序号的行都不要 图片 【代码及解析】 import pandas as pd filepath="E:/yhd_python/pandas.read_excel/student.xlsx" df=pd.read_excel(filepath,sheet_name='Sheet1',skiprows=1) df.tail() 先导入pands包,用read_excel读取文件,工作
哆哆Excel
2022/10/31
1.6K0
聊一聊数据库的行存与列存
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/26
1.7K0
聊一聊数据库的行存与列存
列存储、行存储
Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析、数据挖掘等查询密集型应用。列存储,缩写为DSM,相对于NSM(N-ary storage model),其主要区别在于:
全栈程序员站长
2022/09/14
7.9K0
列存储、行存储
ECharts数据集( dataset )的行或列映射为系列(series)
用户可以使用 seriesLayoutBy 配置项,改变图表对于行列的理解。seriesLayoutBy 可取值:
别团等shy哥发育
2023/02/25
1.1K0
ECharts数据集( dataset )的行或列映射为系列(series)
springmvc接收数据返回数据
1,当前端传递的参数名和方法形参名不一致时,通过@RequestParam指定转换关系
微醺
2019/01/17
1.5K0
Bootstrap行和列
在Bootstrap中,行(Row)和列(Column)是构建响应式网格布局的核心组件。它们允许我们创建灵活的网格系统,以便在不同的屏幕尺寸下进行布局。
堕落飞鸟
2023/05/17
2.1K0
从分散到集中,云南移动数据中心网络走上新征途
对于一家运营商来说,没什么比系统的高效稳定运行更重要了。对于云南移动信息技术部总经理于桃来说,自然同样如此。
IT创事记
2022/08/30
6540
从分散到集中,云南移动数据中心网络走上新征途
替换 VOC 数据集中图片路径
在一次做项目的时候,团队分配任务做数据集,用 labelimage 来打标,汇总数据时发现 xml 中的图片路径各不相同,于是就写了这个工具来修改 xml 中的图片路径。
HauHau
2022/01/12
1.6K0
用过Excel,就会获取pandas数据框架中的值、行和列
至此,我们已经学习了使用Python pandas来输入/输出(即读取和保存文件)数据,现在,我们转向更深入的部分。
fanjy
2021/11/29
19.2K0
用过Excel,就会获取pandas数据框架中的值、行和列
url从输入到页面返回数据经历了什么?
1>DNS解析可以理解为主寻找这个IP地址的过程,其中如果找到IP地址会进行本地缓存,以便下次继续使用
测试小兵
2019/07/22
8810
url从输入到页面返回数据经历了什么?
简单介绍数据采集中的数据埋点
每个人都会走路跑步,但是并不是人人都能成为专业的运动员那么出色。产品经理就是一种这样的职业,我们都可以站在产品的角度思考问题,但我们并不是都能够成为一名出色的产品经理。
木东居士
2019/02/28
2.6K0

相似问题

数据集中特定列的所有行

23

数据集中所有行的1列之和

33

从稀疏数据集中删除列和行

116

Excel,如何从数据集中返回特定行。

11

从数据集中复制符合条件的所有行

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档