[英]How should I create service accounts for accessing secrets between GCP projects with Google KMS?
我已经按照本教程进行操作: https ://cloud.google.com/kms/docs/store-secrets
我的下一步是让我的应用程序从存储桶中读取我的机密文件并在运行时安全地解密。 这些应用程序在各种项目(暂存、开发、生产等)中运行。
我一遍又一遍地阅读服务帐户文档,但不太了解正确的前进方向。
我发现有用的是简单地将服务帐户添加到教程中的 MY_KMS_PROJECT 和 MY_STORAGE_PROJECT。 我将它们设置为有权读取存储桶和解密 KMS 密钥。 只需创建这些服务帐户,突然之间其他项目中的应用程序就可以读取和解密。 它应该如何工作?
我以为我必须为每个我想从教程中访问 KMS 项目的项目创建一个服务帐户? 或者以某种方式使用 IAM 来授予访问权限? 例如,我将如何授予对某些项目中的某些应用程序的访问权限,而不是其他项目?
我现在正尝试在我的本地开发环境中运行时授予对应用程序的访问权限,这通常需要下载服务帐户并将 GOOGLE_APPLICATION_CREDENTIALS 指向该文件。 但是从 MY_KMS_PROJECT 或 MY_STORAGE_PROJECT 下载服务帐户对我来说似乎很奇怪,特别是因为我已经有一个用于访问 firebase 的服务帐户。 服务帐户是否以某种方式对所有项目都是全局的? 它们可以结合吗? GOOGLE_APPLICATION_CREDENTIALS 似乎只适用于指向单个服务帐户。
注意:我的大部分应用程序都在 google app engine standard 或 flexible 上运行。
这是我的项目中应用程序的代码,如上所述“正常工作”:
client, err := google.DefaultClient(ctx, cloudkms.CloudPlatformScope)
if err != nil {
log.Fatal(err)
}
// Create the KMS client.
kmsService, err := cloudkms.New(client)
if err != nil {
log.Fatal(err)
}
....
访问存储桶:
// Create the storage clientstorage
Client, err := storage.NewClient(ctx)
if err != nil {
log.Fatal(err)
}
....
这就是我发现的作品。 直到我听说它不正确或不理想,这就是我前进的方式:
请注意,在创建教程中的两个帐户时,不会自动创建服务帐户,因为默认情况下没有计算或应用引擎实例。
转到 kms 存储项目的 IAM,并添加任何其他项目以及您希望有权访问以下载加密机密的应用程序。 通过他们的服务帐户电子邮件添加他们,具有查看存储桶的角色。
转到 IAM 的 kms 管理项目,并通过他们的服务帐户电子邮件对包含要解密共享机密的应用程序的任何项目执行相同的操作。
对于 Localhost 开发,在启动服务之前使用“gcloud auth application-default login”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.