Я создаю функцию Azure на Python, используя клиентскую библиотеку google-analytics-data для ежемесячной загрузки данных Google Analytics. Инструкции на https://developers.google.com/analytics/devguides/reporting/data/v1/quickstart-client-libraries требуют, чтобы учетные данные API существовали локально в файле с именем учетные данные.json. Когда я разверну это в Функциях Azure, будет ли это существовать в виде обычного текста? Есть ли способ его зашифровать?
Похоже, я должен иметь возможность передавать параметры в BetaAnalyticsDataClient() вместо использования файла, но https://googleapis.dev/python/analyticsdata/latest/data_v1beta/beta_analytics_data.html похоже, что ему нужен токен из Рукопожатие OAuth, а не учетные данные в учетных данных.json.
Что я нашел до сих пор в своем исследовании:
Не обязательно использовать клиентскую библиотеку google-analytics-data, просто кажется, что это будет намного проще. Как лучше всего безопасно пройти аутентификацию с помощью API GA4 из Функций Azure?
Только что развернул мой код в Функциях Azure и убедился, что файл учетных данных развернут в виде обычного текста вместе с фактическим кодом. Кто-нибудь подключался к API GA4 из Azure более безопасным способом?
Извините @SiddheshDesai, я пропустил ваш предыдущий комментарий. Если я помещу учетные данные в local.settings.json, как мне получить токен для BetaAnalyticsDataClient()? По умолчанию BetaAnalyticsDataClient ищет локально установленный файл. Похоже, я должен сделать что-то вроде BetaAnalyticsDataClient(private_key=os.getenv('private_key')), но это выдает ошибку.
Вы пытались использовать os.environ["<ваша настройка с секретами>"] или os.getenv("<ваша настройка с секретом>") в коде своей функции, чтобы получить секрет из local.settings.json? Пример def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Триггерная функция HTTP Python обработала запрос.') connectionstring = os.environ["connectionstring"] conn = pyodbc.connect(connectionstring) курсор = conn.cursor(), где у меня есть строка подключения, сохраненная в моем local.settings.json как "connectionstring": "<string>"
Это для локального использования. Вы также можете сохранить свои секреты или учетные данные в хранилище ключей Azure и импортировать эти секреты в свой код функции, см. здесь - stackoverflow.com/questions/65606790/…






Я скачал Google API Analytics Credentials.json и добавил его в свои функции Azure local.settings.json, как показано ниже:
Мой локальный.settings.json: -
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "python",
"type": "service_account",
"project_id": "quickstart-xxx3603076",
"private_key_id": "xxxxxxxeea5f0d7dc679d23af2160fb0ae4c",
"private_key": "-----BEGIN PRIVATE KEY-----\<private-key>\n-----END PRIVATE KEY-----\n",
"client_email": "starting-account-xxxf9k2gxzg@quickstart-xxx03603076.iam.gserviceaccount.com",
"client_id": "xxxx556667352042599",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/starting-account-xxxx0quickstart-xxxx3603076.iam.gserviceaccount.com"
}
Теперь я вызвал указанный выше private_key в своем коде функции, используя этот блок кода: - os.environ["private_key"]
Вызывается private_key в моем коде init.py, как показано ниже:
credentials = os.environ["private_key"]
print(credentials)
Закрытый ключ был зарегистрирован в выводе: -

Вышеупомянутый метод с local.settings.json будет работать только для локальной функции Azure, так как при развертывании вашей функции с локального сервера на портал Azure файл local.settings.json игнорируется git и не является частью среды выполнения.
Итак, чтобы хранить секреты или настройки в функциях Azure на портале>, вы можете добавить те же значения файла учетных данных.json в настройки приложения приложения-функции, как показано ниже:
Я выбрал «Функция Azure» > «Конфигурация» > «Новые параметры приложения» > «Добавить ключ и значение», где ключ — это ваш закрытый_ключ, а значение — значение закрытого ключа. См. ниже: —



В качестве альтернативы можно сохранить свои учетные данные в хранилище ключей Azure и вызвать их в приложении «Функция Azure». См. этот документ
Спасибо за ваши комментарии, @SiddheshDesai! Ваш ответ оказывается половиной решения. Шаг 1 — сохранить все содержимое учетных данных.json в виде одной переменной в local.settings.json или хранилище ключей Azure. Шаг 2, как описано на https://googleapis.dev/python/google-auth/latest/user-guide.html#service-account-private-key-files, заключается в использовании service_account.Credentials.from_service_account_info для создать объект Credentials, который можно передать в BetaAnalyticsDataClient. Мой local.settings.json выглядит так:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"ga4_credentials_json": "{\"type\": \"service_account\",\"project_id\": \" <etc...>
}
}
И вот мой рабочий код для объявления клиента:
json_acct_info = json.loads(os.getenv('ga4_credentials_json'))
credentials = service_account.Credentials.from_service_account_info(
json_acct_info)
scoped_credentials = credentials.with_scopes(
['https://www.googleapis.com/auth/analytics.readonly'])
client = BetaAnalyticsDataClient(credentials=scoped_credentials)
Затем вы просто определяете свой запрос и ответ = client.run_report(request)! Жизнь хороша.
Вы можете добавить учетные данные Google API в свой файл local.settings.json в своей функции. Файл local.settings.json будет частью git ignore, поэтому он не будет контролироваться версией вашего кода.