繁体   English   中英

我应该如何创建服务帐户以使用 Google KMS 在 GCP 项目之间访问机密?

[英]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)
}
....

对于您的第一个问题:发生这种情况的原因可能是这些应用程序使用您为各自项目创建的相同服务帐户。 在这种情况下,您需要确保这些应用程序不使用上述服务帐户。

对于第二个问题:您可能会尝试在组织级别使用一个服务帐户。 这些服务帐户将由组织中的所有项目继承。 您可以授予服务帐户那些满足您要求的角色或权限

对于您的第三个问题:如果您使用组织级服务帐户,它们对所有项目都是“全局的”:您可以查看此文档,您可能会在其中找到有关服务帐户组织的有价值信息

请让我知道您的想法以及进展情况。

这就是我发现的作品。 直到我听说它不正确或不理想,这就是我前进的方式:

  1. 遵循“存储秘密”教程 ( https://cloud.google.com/kms/docs/store-secrets )。

请注意,在创建教程中的两个帐户时,不会自动创建服务帐户,因为默认情况下没有计算或应用引擎实例。

  1. 转到 kms 存储项目的 IAM,并添加任何其他项目以及您希望有权访问以下载加密机密的应用程序。 通过他们的服务帐户电子邮件添加他们,具有查看存储桶的角色。

  2. 转到 IAM 的 kms 管理项目,并通过他们的服务帐户电子邮件对包含要解密共享机密的应用程序的任何项目执行相同的操作。

对于 Localhost 开发,在启动服务之前使用“gcloud auth application-default login”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM