【发布时间】:2021-12-16 10:04:29
【问题描述】:
我们目前使用服务帐号 json 密钥从 RStudio 以非交互方式访问 BigQuery。但是您可能知道,这种方法存在固有的安全问题,即任何机器上拥有密钥的任何人都可以使用这种方法访问 BigQuery。所以我想知道,有没有一种方法可以访问 RStudio 中的 BigQuery 数据,前提是它来自 GCP 中的特定计算引擎实例?谷歌是否提供了一种通过计算引擎进行身份验证的方法,无需任何密钥?如果是这样,我如何通过 RStudio 以非交互方式使用它?
【问题讨论】:
-
我不熟悉 RStudio。如果应用程序(在本例中为 RStudio)支持应用程序默认凭据,Google 会提供无密钥身份验证。在这种情况下,应用程序可以从元数据服务获取 VM 的凭据。另一个新的无密钥功能是 Workload Identity,适用于 RStudio 在 GKE 上运行的情况。可能还有其他方法。
-
@DazWilkin 嘿,感谢您的回复。我研究了如何获得 ADC,并能够使用我们从元数据服务获得的临时令牌通过 RStudio 对 BigQuery 进行身份验证。我现在唯一担心的是,令牌是临时的。我注意到他们的超时时间约为 1 小时。如果我们有一个应用程序运行超过一个小时怎么办?那样的话,一个小时后它会无法从 BQ 获取数据吗?
-
是的,过期后的任何请求都会失败。在此之前,您需要刷新令牌。 ADC 将提供此功能,但我认为您无法在 RStudio 中利用它。如果您能够这样做,您应该能够使用 Google 的令牌服务来交换令牌。谷歌似乎已经用身份工具包的东西隐藏了令牌服务的 URL。
-
@DazWilkin 我可以使用 ADC 服务,但是我们的脚本设置为在脚本开始时进行身份验证,然后运行 BQ 的其余操作。在这种情况下,如果脚本运行超过一个小时,我认为它会在那之后失败。有没有在这种情况下不使用令牌密钥的解决方案?
-
@DazWilkin 要更清楚,来自谷歌的文档 1)如果设置了环境变量 GOOGLE_APPLICATION_CREDENTIALS,ADC 使用变量指向的服务帐户密钥或配置文件。 2) 如果未设置环境变量 GOOGLE_APPLICATION_CREDENTIALS,ADC 将使用附加到运行代码的资源的服务帐户。我在这里使用第 2 点,因为第 1 点涉及使用密钥,这本质上是不安全的,因为任何人都可以在另一台机器上复制和使用它。
标签: r google-cloud-platform google-bigquery google-compute-engine rstudio-server