Рубрики
Без рубрики

Использование секретов в функциях Google Cloud

Как использовать секретные значения в ваших программах Python без сервеса. Помечено Python, облачные функции, безвесочные, менеджер секретов.

Функции 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”