Google cloud platform 如何在没有任何Google API绑定的情况下从GCE容器访问应用程序默认凭据?
我正在编写一个应用程序,它运行在一个容器中,在Google容器引擎上,使用一种与Google API没有任何绑定的语言 我需要访问应用程序默认凭据。不幸的是,官方文档没有解释如何在不使用现有的GoogleAPI绑定的情况下在生产环境中执行此操作Google cloud platform 如何在没有任何Google API绑定的情况下从GCE容器访问应用程序默认凭据?,google-cloud-platform,google-kubernetes-engine,Google Cloud Platform,Google Kubernetes Engine,我正在编写一个应用程序,它运行在一个容器中,在Google容器引擎上,使用一种与Google API没有任何绑定的语言 我需要访问应用程序默认凭据。不幸的是,官方文档没有解释如何在不使用现有的GoogleAPI绑定的情况下在生产环境中执行此操作 在开发环境中(即在本地开发机器上),我导出了GOOGLE_APPLICATION_CREDENTIALS变量,但它在生产容器中不可用。这是否意味着我必须使用RESTAPI中的某个端点?Ruby的实现是开源的,可以访问 按优先级检查的不同位置 该方法清楚地
在开发环境中(即在本地开发机器上),我导出了GOOGLE_APPLICATION_CREDENTIALS变量,但它在生产容器中不可用。这是否意味着我必须使用RESTAPI中的某个端点?Ruby的实现是开源的,可以访问 按优先级检查的不同位置 该方法清楚地表明:
/etc/google/auth
def get_application_默认值(scope=nil,options={})
creds=DefaultCredentials.from_env(范围)||
DefaultCredentials.from_well_known_路径(范围)||
DefaultCredentials.from_system_default_路径(作用域)
退回信用卡,除非信用卡。零?
除非gce上的GCECredentials.(选项),否则未发现raise错误
GCECredentials.new
结束
这与上面所说的是一致的:
元数据风格:Google
头,那么它可能是GCE
def on_gce?(选项={})
c=选项[:连接]| |法拉第.default|u连接
resp=c.get(COMPUTE_CHECK_URI)do|req|
#注释来源:oauth2client/client.py
#
#注意:下面显式的'timeout'是一种解决方法。潜在的
#问题是,解决某些网络上的未知主机将需要
#20-30秒;缩短此超时可以解决此问题,但是
#如果我们参加GCE考试,可能会导致误报,但是
#元数据解析速度特别慢。后一种情况是
#“不太可能”。
req.options.timeout=0.1
结束
返回false,除非resp.status==200
返回false,除非响应头.key('Metadata-Flavor')
返回相应的标题['Metadata-FLANCE']=='Google'
救援法拉第::超时错误,法拉第::连接失败
返回错误
结束
直接从Google获取访问令牌
如果在文件系统上找不到默认凭据,并且应用程序正在GCE上运行,我们可以请求一个新的访问令牌,而无需事先进行任何身份验证。这是可能的,因为默认服务帐户是在项目中启用GCE时自动创建的
该方法展示了如何从GCE实例中,通过向http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
def fetch_access_令牌(选项={})
c=选项[:连接]| |法拉第.default|u连接
c、 headers={'Metadata Flavor'=>'Google'}
resp=c.get(COMPUTE\u AUTH\u TOKEN\u URI)
案例响应状态
当200
Signet::OAuth2.parse_凭证(分别为主体、,
响应头['content-type'])
当404
raise(Signet::AuthorizationError,无元数据\u服务器\u错误)
其他的
msg=“意外错误代码#{resp.status}”+意外错误后缀
raise(签名::AuthorizationError,msg)
结束
结束
下面是一个curl命令来说明:
curl \
http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token \
-H 'accept: application/json' \
-H 'Metadata-Flavor: Google'