Я следовал этому руководству: 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.
Вот код из приложений в моих проектах, которые "просто работают", как описано выше:
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)
}
....