#google-cloud-datastore
#google-cloud-хранилище данных
Вопрос:
Я пытаюсь аутентифицировать хранилище данных Google c # SDK в модуле k8, работающем в Google Cloud. Я не смог найти никакого способа ввести файл account.json в DatastoreDb или DatastoreClient, кроме использования переменной среды GOOGLE_APPLICATION_CREDENTIALS. Использование переменной среды GOOGLE_APPLICATION_CREDENTIALS проблематично, поскольку я не хочу оставлять файл учетной записи открытым.
Согласно документации в:https://googleapis.github.io/google-cloud-dotnet/docs/Google .Облако.Datastore.V1/index.html
При запуске на облачной платформе Google не требуется предпринимать никаких действий для аутентификации.
Но, похоже, это не работает.
Мы будем признательны за подсказку в правильном направлении (:
Ответ №1:
Я бы предложил использовать секрет K8s для хранения ключа учетной записи службы, а затем смонтировать его в модуле во время выполнения. Смотрите ниже:
- Создайте учетную запись службы для нужного приложения.
- Сгенерируйте и закодируйте ключ учетной записи службы: просто сгенерируйте
.json
ключ для вновь созданной учетной записи службы на предыдущем шаге, а затем закодируйте его с помощьюbase64 -w 0 key-file-name
. Это важно: K8S ожидает, что содержимое секрета будет закодировано в Base64. -
Создайте файл секретного манифеста K8s (см. Содержимое ниже), а затем примените его.
apiVersion: v1
kind: Secret
metadata:
name: your-service-sa-key-k8s-secret
type: Opaque
data:
sa_json: previously_generated_base64_encoding -
Смонтируйте секрет.
volumes: - name: service-account-credentials-volume secret: secretName: your-service-sa-key-k8s-secret items: - key: sa_json path: secrets/sa_credentials.json
Теперь все, что вам нужно сделать, это установить для GOOGLE_APPLICATION_CRENDENTIALS значение secrets/sa_credentials.json.
Надеюсь, это поможет. Извините за форматирование (в спешке).
Комментарии:
1. Это то, что я закончил делать, прежде чем задать вопрос. К сожалению, это не соответствует спецификации безопасности, в соответствии с которой я работаю, поскольку файл учетной записи в конечном итоге не зашифрован в файловой системе pod. (термин k8 «секрет» вводит в заблуждение) Я ценю совет @Andrey Balici
2. Возможно, это поможет: kubernetes.io/docs/tasks/administer-cluster/encrypt-data . На самом деле никогда этого не делал, но, возможно, это отправная точка для вас.
Ответ №2:
Вот как это можно сделать:
учетные данные var = Учетные данные Google.Из файла (@"/path/to/google.credentials.json").CreateScoped(DatastoreClient.Области по умолчанию); var channel = новый Grpc.Core.Канал (DatastoreClient.Конечная точка по умолчанию.toString(), учетные данные.ToChannelCredentials()); Клиент хранилища данных = DatastoreClient.Создать (канал, настройки: Настройки хранилища данных.getDefault()); DatastoreDb db = DatastoreDb.Create(YOUR_PROJECT_ID, client: клиент); // Что делать с хранилищем данных... // Выключите канал, когда он больше не требуется. ожидание канала.ShutdownAsync();