应用程序引擎服务的自定义服务帐户

2024-06-06 20:55:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个微服务运行在我们的项目的GCP(谷歌云平台)应用程序引擎。在我们的例子中,最好是在每个服务的基础上最小化权限。目前,我们将所有凭证文件保存在Keybase中,保留按团队成员划分的机密。因此,如果我在一个应用引擎服务上工作,我就看不到另一个团队的应用引擎服务的秘密。 我们一直在做的其他秘密,例如配置文件的密码和秘密托克斯,我们给予应用程序引擎服务帐户kms解密特权,并简单地提取加密副本的配置文件从firestore和解密。但我们不希望在任何地方都使用默认的appengine服务帐户,因为使用相同服务帐户的不同团队都可以访问每个人的秘密。因此,我们希望为开发中的每个应用程序引擎服务在每个服务的基础上转移到一个服务帐户。你知道吗

从我在Google文档中看到的情况来看,当我们部署应用程序时,他们希望您上传凭证文件,但是,从云控制台,似乎很难锁定谁可以查看部署到服务的文件,任何有访问权限的人都可以简单地复制/粘贴所有凭证。你知道吗

如果字典中有配置,可以执行以下操作:


from google.oauth2 import service_account
from google.cloud import kms_v1
d = {'type': 'service_account',
     'project_id': 'my-awesome-project',
     'private_key_id': '074139282fe9834ac23401',
     'private_key': '-----BEGIN PRIVATE KEY----\n supersecretkeythatnobodyknows==\n-----END PRIVATE KEY-----\n',
     'client_email': 'my-cool-address@my-awesome-project.iam.gserviceaccount.com',
     'client_id': '1234567890',
     'auth_uri': 'https://accounts.google.com/o/oauth2/auth',
     'token_uri': 'https://oauth2.googleapis.com/token',
     'auth_provider_x509_cert_url': 
     'https://www.googleapis.com/oauth2/v1/certs',
     'client_x509_cert_url': 'https://www.googleapis.com/robot/v1/metadata/x509/my-cool-addres%40my-awesome-project.iam.gserviceaccount.com'}

credentials = service_account.Credentials.from_service_account_info(d)
kms_client = kms_v1.KeyManagementServiceClient(credentials=credentials)

这是可行的,但是我们如何让字典“d”进入程序,而不让它出现在代码中,也不让很多人可以访问它呢?你知道吗


Tags: https引擎projectcomclient应用程序myservice
2条回答

纪尧姆·布拉奎尔在他的回答中所说的是正确的,我也同意他关于每个团队都有一个项目的想法。您不能为每个应用程序引擎的服务创建不同的服务帐户。你知道吗

尽管你想在appengine中实现的可能是灵活的。好吧,所以你找不到一种方法,只允许某个团队为某个服务,而另一个团队为另一个服务。你能做的(但我不认为你想这样做,我也不建议这样做)是通过controlling your access with Firewalls阻止某些ip。您可以创建自己的防火墙规则,允许从一个地方请求,而不允许从另一个地方请求。你知道吗

这只是一个技巧,可能对你有用,也可能不管用。真正的建议是,如果您真的想用更多的服务帐户实现您所描述的系统,那么您应该考虑迁移到Cloud Run。你知道吗

如果AppEngine环境中的每个服务都必须有自己的标识,那么AppEngine就不可能做到这一点。更新的服务,如云功能或云运行可以做到这一点,但非常旧的服务(云时代)AppEngine(超过10年)不能

您拥有所有AppEngine服务的服务帐户。您可以使用它来解密每个服务的其他服务帐户密钥文件,并在相应的服务中使用它们,但根授权保留默认的应用程序引擎服务帐户,因此所有服务/所有团队都可以访问它(以及所有加密的服务帐户密钥文件)。你知道吗

也许解决方案是重新设计应用程序,每个团队有一个项目?你知道吗

相关问题 更多 >