我有一个 GCP Cloud Run 服务,需要从存储桶中读取。该服务通过其专用服务帐户运行。
我看到服务可以读取存储桶,而无需任何明确指定的权限/角色来执行此操作,例如
storage.objects.list
/roles/storage.objectViewer
。
奇怪的是,如果我在本地计算机上运行该服务(使用我专门为此实验从该服务帐户生成的服务帐户密钥),该服务无法按应有的方式读取存储桶。如果在本地运行期间,我确实将
roles/storage.objectViewer
添加到该服务帐户,则该服务可以读取该存储桶(这显然是预期的)。
我很困惑,因为当服务在 Cloud Run 中运行时,它神奇地获得了读取该存储桶的权限,但我不知道如何实现。
有什么建议吗?
如前所述,默认情况下,Cloud Run 服务部署使用默认计算引擎服务帐户,该帐户使用基本角色编辑器,该帐户授予对项目内多个服务的读写权限。
您可以通过在控制台中编辑安全选项卡来为您的云运行服务使用特定的服务帐户,或者如果您使用的是 gcloud cli,则可以使用以下命令:
gcloud run services update SERVICE --service-account SERVICE_ACCOUNT
gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT
另外,请记下可在云运行中使用的服务帐户身份。