0

我在 Google Cloud Functions 中运行简单的函数来更新 DNS 记录(请参见此处的代码)。目前我创建具有特权的服务帐户roles/dns.admin并将其分配给该功能。然后,我依靠 Functions 对客户端身份验证和授权的 beta 支持。

替代方法可能不是roles/dns.admin为函数提供服务帐户凭据(使用 ),而是在每个请求中传递凭据。

如何使用 Go 运行时执行此操作 - 如何将请求中的不记名令牌与 Google API Go 客户端一起使用?

这两种方法的优缺点?

4

3 回答 3

1

在 GCF 中,您可以请求它来获取令牌。

curl " http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token " -H "Metadata-Flavor: Google"

参考:https ://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#applications

于 2019-07-10T10:13:09.627 回答
0

Cloud Function 应该能够使用其凭据通过获取默认凭据并将其传递到 DNS 客户端来授权请求​​。

在此处查找更多信息:为服务器到服务器生产应用程序设置身份验证

于 2019-07-10T22:33:26.090 回答
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)

但是经过一番思考,我认为这对我来说不是一个好方法:访问令牌对于请求者来说是不必要的强大。所以我在最初的问题中选择了第一种方法。

于 2019-07-16T16:13:07.753 回答