Функции Google Cloud позволяют легко создавать программы Python Python. Этот пост покажет вам, как вы можете использовать Google Secret Manager Для безопасного и надежно используйте секреты в вашей функции.
Жесткое кодирование или использование переменных среды для хранения строк в простых текстах, которые должны быть «секретными», такие как ключи API, секретные токены для файлов cookie и т. Д. Обычно не рекомендуется. Любая сторонняя зависимость или библиотека, которую вы используете, имеет доступ к той же величинам окружающей среды.
Тем не менее, очень удобно хранить секреты вдоль вашей функции. Вы все еще можете сделать это, пока вы храните эти секреты благополучно и надежно.
Мы сделаем это, хранив наш секрет с Google Secret Manager и доступа к нашим секретам на уровне приложений. Это будет ограничивать доступ к секрете только членам вашей команды, у которого есть доступ к секрету (и, конечно же, функция, когда он работает в Google Cloud).
Я предполагаю, что вы уже создали проект Google Cloud с именем (мой – my_cloud_project
). Если у вас нет, продолжайте и сделайте это сейчас.
Теперь, когда вы создали проект, следующий шаг – создать секрет в этом. Мы можем сделать это на командной строке с gcloud
инструмент! Кроме того, мы сделаем это через облачную оболочку, поэтому никаких полномочий не пришлось покинуть облако.
Во-первых, Запустите облачную оболочку Для вашего проекта.
Вы должны увидеть подсказку, которое выглядит так:
Welcome to Cloud Shell! Type "help" to get started. Your Cloud Platform project in this session is set to my_cloud_project. Use "gcloud config set project [PROJECT_ID]" to change to a different project. di@cloudshell:~ (my_cloud_project)$
Далее мы включим Secret Manager API (и Облачные функции API , пока мы на этом):
$ gcloud services enable secretmanager.googleapis.com cloudfunctions.googleapis.com
Далее мы создадим новый секрет с gcloud
Инструмент командной строки:
$ echo -n "The chickens are in the hayloft." | \ gcloud secrets create my-secret \ --data-file=- \ --replication-policy automatic
--data-file = -
Флаг позволяет нам трусить секрет gcloud
Команда из вывода предыдущей команды, которая просто эхо
S секрет (без новинок).
Наш секрет сейчас надежно хранится. Если мы хотим проверить это, мы можем использовать следующую команду для доступа к нашему секрету в командной строке:
$ gcloud secrets versions access 1 --secret="my-secret" The chickens are in the hayloft.
Теперь мы напишем нашу функцию. Вот всю нашу функцию, которую мы развернули, которая будет жить в файле под названием main.py
:
import os from google.cloud import secretmanager client = secretmanager.SecretManagerServiceClient() secret_name = "my-secret" project_id = "my-gcp-project" request = {"name": f"projects/{project_id}/secrets/{secret_name}/versions/latest"} response = client.access_secret_version(request) secret_string = response.payload.data.decode("UTF-8") def secret_hello(request): return secret_string
Эта функция определяет имя ресурса для секрета в зависимости от среды функции, доступа к последней версии нашего секрета, а затем декодирование ответа и, наконец, возвращая исходную строку.
Также обратите внимание, как выполняет функцию этой работы снаружи самой функции Python. Это ускорит нашу функцию, доступ к секрету только один раз, когда облачная функция создается, а не один раз для каждого запроса.
Нам также нужно будет сообщить нашу функцию установить Google-Cloud-Secret-Manager
Библиотека, поэтому мы можем получить доступ к секрете из Python. В файле под названием требования .txt
Добавьте строку:
google-cloud-secret-manager==2.0.0
На данный момент ваша структура каталогов должна выглядеть так:
. ├── main.py └── requirements.txt
Нам также нужно дать наше разрешение на работу на доступ к секрете:
$ gcloud secrets add-iam-policy-binding my-secret \ --role roles/secretmanager.secretAccessor \ --member serviceAccount:my-cloud-project@appspot.gserviceaccount.com
ServieSeacount
Вот учетная запись службы по умолчанию для облачных функций.
Последний шаг – развернуть нашу функцию с gcloud
инструмент:
$ gcloud functions deploy secret_hello \ --runtime python38 \ --trigger-http
Теперь мы можем проверить нашу функцию, как только это развернуто:
$ gcloud functions call secret_hello executionId: 4856xc8an4fa result: The chickens are in the hayloft.
Есть много большего, вы можете сделать с облачными функциями! Следуйте по ссылкам ниже, чтобы узнать, как:
- Написать «Фон» триггерные функции, которые отвечают на события
- Монитор функционирует на высоком уровне со стекольщиком
- Смотрите дополнительные советы и трюки для написания облачных функций
Все код © Google W/Apache 2 лицензия
Оригинал: “https://dev.to/googlecloud/using-secrets-in-google-cloud-functions-5aem”