Как я могу безопасно получить свои кредиты пользователей gcloud в контейнере и использовать их для олицетворения учетной записи службы при локальном тестировании? - PullRequest
0 голосов
/ 21 апреля 2020

Начиная с этого:

  • пользователи имеют свои собственные учетные записи пользователей Google, которые настраиваются локально с помощью входа в систему gcloud
  • приложение использует API-интерфейсы gcp обычным способом - по умолчанию он будет искать GOOGLE_APPLICATION_CREDENTIALS, роли GCE, служебные учетные записи или использовать учетные данные, настроенные для локальных пользователей gcloud
  • , когда пользователи запускают его локально, он использует свою собственную учетную запись, при запуске в gcp он будет использовать служебную учетную запись
  • У учетной записи пользователя также есть доступ к олицетворению учетной записи службы. Поэтому, когда приложение запускается локально, пользователи сначала делают gcloud config set auth/impersonate_service_account [SA_FULL_EMAIL], и оно может запускаться с теми же кредитами, что и в среде dev - без необходимости загружать какие-либо ключи

Теперь это работает. НО я также хочу сделать возможным локально запускать приложения в контейнерах. Используя docker / docker -compose / minikube / et c, как я могу выдать себя за служебную учетную запись?

контейнеру потребуется доступ к кредитам gcloud , и ему потребуется также настроить олицетворение в сеансе, прежде чем приложение каким-либо образом запустится. Это не должно быть сделано в коде - приложение должно просто использовать API-интерфейсы как обычно без необходимости делать что-то иначе.

РЕДАКТИРОВАТЬ: когда приложения запускаются в учетных записях / проектах dev или prod GCP, которые они запускают в контексте служебная учетная запись с правильно заданными правами доступа для указанного приложения c. Собственные учетные записи разработчиков имеют широкие права доступа к среде разработки. При локальном запуске полезно запускать с той же учетной записью службы, с которой приложение запускается в среде разработчика, а не с собственной учетной записью разработчика

1 Ответ

1 голос
/ 22 апреля 2020

Правильный способ достижения этого - это Secret Manager, который поставляется Google Cloud.

  • Активируйте API Secret Manager в своей учетной записи Google Cloud.
  • Создайте секретные данные и соответствующую полезную нагрузку, используя G C UI или sdk.
  • Используйте следующее Функция в вашем settings.py с вашим идентификатором проекта.
  • Дайте разрешения вашей учетной записи службы для доступа к секретам (если она еще не имеет доступа)
  • Используйте Secret Manager для доступа к полезным нагрузкам в Ваш код без явного раскрытия полезной нагрузки.
def access_secret_version(secret_id):
    """
    Access the payload for the given secret version if one exists. The version
    can be a version number as a string (e.g. "5") or an alias (e.g. "latest").
    """
    project_id = PROJECT_ID
    version_id = 1
    # Import the Secret Manager client library.
    from google.cloud import secretmanager_v1beta1 as secretmanager

    # Create the Secret Manager client.
    client = secretmanager.SecretManagerServiceClient()

    # Build the resource name of the secret version.
    name = client.secret_version_path(project_id, secret_id, version_id)

    # Access the secret version.
    response = client.access_secret_version(name)

    # Print the secret payload.
    #
    # WARNING: Do not print the secret in a production environment - this
    # snippet is showing how to access the secret material.
    payload = response.payload.data.decode('UTF-8')
    # logging.info('Plaintext: {}'.format(payload))
    logging.info('Secret accessed for  :' + secret_id)
    return payload
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...