Как прикрепить учетную запись службы к развертыванию / обслуживанию gke так же, как к службе ECS? - PullRequest
0 голосов
/ 03 декабря 2018

Я пришел из AWS, но не уверен, как это сделать с помощью gcp.Ранее я задавал более общий вопрос об учетных записях служб, это относится к gke.

В AWS я могу создать служебную роль ECS.Я присоединяю политики к этой роли, чтобы предоставить ей необходимый доступ.Затем я присоединяю эту роль к службе ECS.Таким образом, я могу развернуть несколько сервисов в одном кластере ECS и предоставить им различный доступ без использования статических ключей и передачи секретов.

Как мне это сделать с помощью gke?Как подключить учетную запись службы gcp iam к развертыванию / службе gke и т. Д.?Можно ли использовать аннотации в развертывании yaml для присоединения учетной записи службы?

Я хочу, чтобы в одном кластере gke было несколько развертываний и служб, неявно использующих разные учетные записи служб (ключи не используются)

1 Ответ

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

Введение:

Облачный кластер Google Cloud Kubernetes состоит из экземпляров виртуальной машины Compute Engine.При создании кластера учетная запись службы по умолчанию присоединяется к каждому экземпляру виртуальной машины.Эти учетные данные хранятся в метаданных экземпляра, и к ним можно получить доступ, используя приложение Client() по умолчанию (учетные данные приложения по умолчанию) или указав местоположение учетных данных.

Поиск учетных данных ADC:

from google.cloud import storage
client = storage.Client()

ИЛИ только из метаданных:

from google.auth import compute_engine
from google.cloud import storage
credentials = compute_engine.Credentials()
client = storage.Client(credentials=credentials, project=project)

[Обновить]

Я не хочу пропагандировать плохие методы обеспечения безопасности.Указанные выше методы должны быть заблокированы в защищенных производственных кластерах Kubernetes.

  1. Использовать учетную запись с минимальными привилегиями для кластера Kubernetes.
  2. Отключить устаревшие API-интерфейсы сервера метаданных и использовать скрытие метаданных.
  3. Использование политики безопасности модуля.
  4. Использование отдельных учетных записей служб для пулов узлов.
  5. Ограничение трафика между модулями с помощью сетевой политики.

[Конец обновления]

Метод Google Kubernetes:

Для Kubernetes рекомендуется создать отдельную учетную запись службы для каждого приложения, которое запускается вкластеризовать и уменьшить области, примененные к учетной записи службы по умолчанию.Роли, назначенные каждой учетной записи службы, зависят от разрешений, которые требуются приложениям.

Учетные данные учетной записи службы загружаются в виде файла Json, а затем сохраняются в Kubernetes как Secret.Затем вы должны смонтировать том с секретом (учетные данные).Затем приложение, работающее в контейнере, должно будет загрузить учетные данные при создании клиентов приложений Google, например, для доступа к облачному хранилищу.

Эта команда сохранит загруженный файл учетных данных в секретный том Kubernetes в качестве секрета с именем * 1045.*.Файл учетных данных внутри Kubernetes называется key.json.Учетные данные загружаются из файла, который был загружен из Google Cloud с именем `/secrets/credentials.json

kubectl create secret generic service-account-credentials --from-file=key.json=/secrets/credentials.json

. В файл развертывания добавьте следующее для подключения тома.

spec:
  volumes:
  - name: google-cloud-key
    secret:
      secretName: service-account-credentials
...
  containers:
    volumeMounts:
    - name: google-cloud-key
      mountPath: /var/secrets/google

Внутри контейнера учетные данные загружаются из /var/secrets/google/key.json

Python Пример:

from google.cloud import storage
client = storage.Client.from_service_account_json('/var/secrets/google/key.json')

В этом документе представлены пошаговые сведения об учетных данных учетной записи службы в Kubernetes.

Аутентификация в облачной платформе с учетными записями служб

...