使用GCP时,Service Account是肯定躲不开的,今天来聊一下Service Account是个什么东西。
在 GCP 上,Service Account是一种用于认证和授权 GCP 应用程序和服务的机制,就像您在日常生活中使用的用户名和密码一样。Service Account允许应用程序和服务使用它们的身份访问 GCP 资源,而不是使用个人 Google 帐号。这样,您就可以更好地控制应用程序和服务对 GCP 资源的访问,也更容易管理这些应用程序和服务的身份验证和授权。
虽然听起来像是账户,但是我觉得跟平常理解的账户的概念不一样,说白了就是权限的设置,或者说是权限的扩展好一些。
定义一些Service Account,可以给不同的User或者不同的服务提供不同的Service Account,进行一些权限方面的管理。
例如,可以将某个Service Account与拥有 BigQuery 数据阅读权限的 IAM 角色相关联,以允许该Service Account在 GCP 上读取 BigQuery 中的数据。
有些时候,我们需要在代码里指定Service Account,比如我们需要用Python开发一个小的API,要CICD到CloudRun上,CloudRun运行的时候会指定一个Service Account,叫做A;
但是我们在Python逻辑处理的时候,需要访问某个PJ的BigQuery的数据,但是A没有访问权限,管理员出于权限管理的考虑,给了你一个可以访问该BigQuery的Service Account,叫做B;
如何在A和B之间切换?
其实在这种情况下,A只是负责CloudRun运行的,可视为从始至终的Service Account,只不过在处理Bigquery的时候,是需要配置的。
首先需要B的json密钥文件,在IAM页面是可以下载的,可能需要管理员提供。
然后,在应用程序中使用 GCP 客户端库或 REST API 来创建一个新的服务账户对象,然后将其与需要访问的服务相关联。
creds = Credentials.from_service_account_file('serviceaccount.json')
client = bigquery.Client(credentials=creds)
在这个示例中,from_service_account_file()
方法使用密钥文件的路径来加载凭据,然后将它们传递给 bigquery.Client()
方法来创建一个新的 BigQuery 客户端对象。
接下来就可以对Bigquery进行处理了。
处理完成后,并不需要切换至A。