Как мне создать сервисные учетные записи для доступа к секретам между проектами GCP с помощью Google KMS? - PullRequest
0 голосов
/ 19 декабря 2018

Я следовал этому руководству: 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)
}
....

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

По первому вопросу: это может произойти из-за того, что эти приложения используют те же учетные записи служб, которые вы создали для соответствующих проектов.В этом случае вам необходимо убедиться, что эти приложения не используют вышеупомянутые учетные записи служб.

По второму вопросу: вы можете попытаться использовать одну учетную запись службы на уровне организации.Эти учетные записи служб будут унаследованы всеми проектами в организации.Вы можете предоставить учетной записи службы те роли или разрешения, которые соответствуют вашим требованиям

. Для вашего третьего вопроса: они являются «глобальными» для всех проектов, если вы используете учетные записи службы на уровне организации: вы можете посмотреть на этодокументация, в которой вы можете найти ценную информацию об учетных записях служб и организации [1] [2]

Пожалуйста, дайте мне знать ваши мысли и как это происходит.


Ссылки:

[1] https://cloud.google.com/resource-manager/docs/creating-managing-organization

[2] https://cloud.google.com/iam/docs/service-accounts

0 голосов
/ 20 декабря 2018

Это то, что я обнаружил, работает.Пока я не услышу, что это не правильно или не идеально, это то, как я двигаюсь вперед:

  1. Следуйте учебнику "Хранение секретов" (https://cloud.google.com/kms/docs/store-secrets).

Обратите внимание, что когдаПри создании двух учетных записей из учебника учетные записи служб не будут создаваться автоматически, поскольку по умолчанию нет экземпляров вычислений или ядра приложения.

Перейдите в IAM для проекта хранилища KMS и добавьте любые другие проекты с приложениями, к которым вы хотите иметь доступ для загрузки зашифрованных секретов.Добавьте их по электронной почте своей учетной записи службы с ролью просмотра сегментов.

Перейдите в IAM для проекта управления kms и сделайте то же самое для любых проектов с приложениями, которые вы хотите расшифровать.общие секреты через электронные адреса их учетных записей служб.

Для разработки Localhost используйте "gcloud auth application-default login" перед запуском ваших служб.

...