我正在Google Cloud Functions中运行简单功能以更新DNS记录(see code here)。当前,我创建具有roles/dns.admin
特权的服务帐户并将其分配给该功能。然后,我依靠Function的beta支持客户端身份验证和授权。
替代方法可能不是为功能提供服务帐户凭据(使用roles/dns.admin
),而是在每个请求中传递凭据。
如何在Go运行时中执行此操作-如何在Google API Go客户端中使用请求中的承载令牌?
这两种方法的优缺点?
答案 0 :(得分:1)
在GCF中,您可以请求获取令牌。
卷曲“ http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token” -H“元数据香料:谷歌”
答案 1 :(得分:0)
Cloud Function应该能够通过获取默认凭据并将其传递到DNS客户端中来使用其凭据来授权请求。
在此处查找更多信息:Setting Up Authentication for Server to Server Production Applications
答案 2 :(得分:0)
我找到了一种将来自请求的访问令牌馈送到Google API Go客户端的方法。这是我构造客户端的方式(r是传入的http.Request
):
ctx := context.Background()
auth := r.Header.Get("Authorization")
token := strings.TrimPrefix(auth, "Bearer ")
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: token},
)
c := oauth2.NewClient(ctx, ts)
dnsService, err := dns.New(c)
但是经过一番思考之后,我认为这并不是一个好方法:访问令牌不必要强大地赋予了请求者。所以我在最初的问题中选择了第一种方法。