Как получить секреты (например, ключи API) в блокнотах Snowflake

В настоящее время я пробую блокноты Snowflake (в предварительной версии). Мне не удалось найти никакой информации о том, как обращаться с секретами, например с ключами API.

Я знаю, что могу создавать секреты в Snowflake, но не могу понять, как получить к ним доступ из Блокнота. В документации Ноутбука об этом ничего нет.

В Справочнике по секретному API есть описание того, как «получить учетные данные, содержащиеся в созданном вами секрете», но я не могу заставить это работать в блокноте Snowflake.

Любые подсказки очень ценятся.

Пробовали ли вы создать пользовательскую функцию, как показано в справочнике по секретному API, для получения секрета, а затем вызвать UDF из записной книжки?

Dave Welden 28.08.2024 20:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У меня была та же проблема с получением объекта секретов имени пользователя и пароля. Мой обходной путь состоял в том, чтобы создать функцию для получения секрета, а затем вызвать ее в моем блокноте. Адаптируйте этот код для использования ключей API.

Сначала создайте интеграцию:

CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION my_external_endpoints
ALLOWED_AUTHENTICATION_SECRETS = ('database.schema.your_secret_string_name')
ENABLED = true;

Затем создайте эту функцию, которая будет получать информацию для вас:

CREATE OR REPLACE FUNCTION get_secret_username_password()
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = 3.8
HANDLER = 'get_secret_username_password'
EXTERNAL_ACCESS_INTEGRATIONS = (my_external_endpoints)
SECRETS = ('cred' = your_secret_string_name)
AS
$$
import _snowflake
import json

def get_secret_username_password():
  username_password_object = _snowflake.get_username_password('cred')

  username_password_dictionary = {
      "Username": username_password_object.username,
      "Password": username_password_object.password
  }

  return json.dumps(username_password_dictionary)
$$;

В своем блокноте извлеките информацию:

from snowflake.snowpark import Session
import json

session = get_active_session()

result = session.sql(f"""
    SELECT get_secret_username_password()
""").collect()

creds = json.loads(result[0][0])

username = creds["Username"]
password = creds["Password"]

Большое спасибо, это сработало! Однако это кажется излишне сложным, поскольку мне нужно будет написать функцию извлечения секрета для каждого секрета. Будем надеяться, что Snowflake в будущем придумает лучшее решение!

Sebastian 29.08.2024 11:09

Хотя @Amito дал правильный ответ, вот немного более короткая версия, если вам просто нужно вернуть строку, например ключ API:

CREATE OR REPLACE FUNCTION retrieve_my_api_key()
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = 3.8
HANDLER = 'retrieve_my_api_key'
EXTERNAL_ACCESS_INTEGRATIONS = (my_integration)
SECRETS = ('cred' = my_api_key)
AS
$$
import _snowflake

def retrieve_my_api_key():   
  my_api_key = _snowflake.get_generic_secret_string('cred') 
  return my_api_key
$$;

и в тетради:

from snowflake.snowpark.context import get_active_session
session = get_active_session()
results = session.sql('SELECT retrieve_my_api_key()').collect()
# this returns [Row(RETRIEVE_MY_API_KEY()='sUpErSecRetApiKey')] - why??
secret_my_api_key = results[0][0]

Другие вопросы по теме