【发布时间】:2020-02-15 14:25:53
【问题描述】:
我有多个微服务在我们项目的 GCP(谷歌云平台)App Engine 上运行。在我们的例子中,最好在每个服务的基础上最小化权限。目前,我们将所有凭证文件保存在 Keybase 中,并按团队成员划分秘密。因此,如果我正在开发一个 App Engine 服务,我无法看到另一个团队的 App Engine 服务的秘密。 我们一直在为其他秘密做些什么,例如使用密码和秘密令牌配置文件,我们授予应用引擎服务帐户 kms 解密权限,并简单地从 firestore 拉取配置文件的加密副本并解密。但是我们不想到处使用默认的应用引擎服务帐户,因为使用相同服务帐户的不同团队可以访问每个人的秘密。因此,我们希望为每个正在开发的应用引擎服务在每个服务的基础上转移到一个服务帐户。
根据我在 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”放入程序中,而不会出现在代码中并被广泛的人访问?
【问题讨论】:
标签: python google-app-engine google-cloud-platform gcloud