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

我已经按照本教程进行操作: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)

}

....


largeQ
浏览 100回答 2
2回答

Qyouu

对于您的第一个问题:发生这种情况的原因可能是这些应用程序使用您为各自项目创建的相同服务帐户。在这种情况下,您需要确保这些应用程序不使用上述服务帐户。对于第二个问题:您可能会尝试在组织级别使用一个服务帐户。这些服务帐户将由组织中的所有项目继承。您可以授予服务帐户那些满足您要求的角色或权限对于您的第三个问题:如果您使用组织级服务帐户,它们对所有项目都是“全局的”

幕布斯7119047

这就是我发现的作品。直到我听说它不正确或不理想,这就是我前进的方式:遵循“存储机密”教程 ( https://cloud.google.com/kms/docs/store-secrets )。请注意,在创建教程中的两个帐户时,不会自动创建服务帐户,因为默认情况下没有计算或应用引擎实例。转到 kms 存储项目的 IAM,并添加任何其他项目以及您希望有权访问以下载加密机密的应用程序。通过他们的服务帐户电子邮件添加他们,并具有查看存储桶的角色。转到 IAM 的 kms 管理项目,并通过他们的服务帐户电子邮件对包含您想要解密共享机密的应用程序的任何项目执行相同的操作。对于 Localhost 开发,在启动服务之前使用“gcloud auth application-default login”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go