Wpisy tajne

Wpis tajny to para klucz-wartość, która przechowuje materiał tajny z unikatową nazwą klucza w zakresie wpisu tajnego. Każdy zakres jest ograniczony do 1000 wpisów tajnych. Maksymalny dozwolony rozmiar wartości wpisu tajnego to 128 KB.

Zobacz również interfejs API wpisów tajnych.

Utwórz klucz tajny

W nazwach wpisów tajnych nie jest rozróżniana wielkość liter.

Metoda tworzenia wpisu tajnego zależy od tego, czy używasz zakresu opartego na usłudze Azure Key Vault, czy zakresu opartego na usłudze Databricks.

Tworzenie wpisu tajnego w zakresie opartym na usłudze Azure Key Vault

Aby utworzyć wpis tajny w usłudze Azure Key Vault, użyj interfejsu API REST zestawu wpisów tajnych platformy Azure lub interfejsu użytkownika witryny Azure Portal.

Azure Key Vault

Tworzenie wpisu tajnego w zakresie opartym na usłudze Databricks

Aby utworzyć wpis tajny w zakresie opartym na usłudze Databricks przy użyciu interfejsu wiersza polecenia usługi Databricks (wersja 0.205 i nowsze):

databricks secrets put-secret --json '{
  "scope": "<scope-name>",
  "key": "<key-name>",
  "string_value": "<secret>"
}'

Jeśli tworzysz wpis tajny wielowierszowy, możesz przekazać wpis tajny przy użyciu standardowych danych wejściowych. Na przykład:

(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <secret_scope> <secret_key>

Możesz również podać wpis tajny z pliku. Aby uzyskać więcej informacji na temat pisania wpisów tajnych, zobacz Co to jest interfejs wiersza polecenia usługi Databricks?.

Wyświetlanie listy wpisów tajnych

Aby wyświetlić listę wpisów tajnych w danym zakresie:

databricks secrets list-secrets <scope-name>

Odpowiedź wyświetla metadane dotyczące wpisów tajnych, takie jak nazwy kluczy wpisów tajnych. Aby wyświetlić te metadane, użyj narzędzia Secrets (dbutils.secrets). Na przykład:

dbutils.secrets.list('my-scope')

Odczytywanie wpisu tajnego

Wpisy tajne są tworzone przy użyciu interfejsu API REST lub interfejsu wiersza polecenia, ale należy użyć narzędzia Secrets (dbutils.secrets) w notesie lub zadaniu odczytu wpisu tajnego.

Usuń klucz tajny

Aby usunąć wpis tajny z zakresu przy użyciu interfejsu wiersza polecenia usługi Databricks:

databricks secrets delete-secret <scope-name> <key-name>

Możesz również użyć interfejsu API wpisów tajnych.

Aby usunąć wpis tajny z zakresu wspieranego przez usługę Azure Key Vault, użyj interfejsu API REST usługi Azure SetSecret lub interfejsu użytkownika witryny Azure Portal.

Używanie wpisu tajnego we właściwości konfiguracji platformy Spark lub zmiennej środowiskowej

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Uwaga

Dostępne w środowisku Databricks Runtime 6.4 Extended Support i nowszym.

Wpis tajny można odwoływać się do właściwości konfiguracji platformy Spark lub zmiennej środowiskowej. Pobrane wpisy tajne są redacted z danych wyjściowych notesu, a sterownik spark i dzienniki funkcji wykonawczej.

Ważne

Podczas odwoływania się do wpisów tajnych w właściwości konfiguracji platformy Spark lub zmiennej środowiskowej należy pamiętać o następujących implikacjach zabezpieczeń:

  • Jeśli kontrola dostępu do tabel nie jest włączona w klastrze, każdy użytkownik z uprawnieniami Can Attach To w klastrze lub Uprawnienia Uruchom w notesie może odczytać właściwości konfiguracji platformy Spark z poziomu notesu. Obejmuje to użytkowników, którzy nie mają bezpośrednich uprawnień do odczytywania wpisu tajnego. Usługa Databricks zaleca włączenie kontroli dostępu do tabel we wszystkich klastrach lub zarządzanie dostępem do wpisów tajnych przy użyciu zakresów wpisów tajnych.

  • Nawet jeśli kontrola dostępu do tabel jest włączona, użytkownicy z uprawnieniami Może dołączać do w klastrze lub Uruchom w notesie mogą odczytywać zmienne środowiskowe klastra z poziomu notesu. Usługa Databricks nie zaleca przechowywania wpisów tajnych w zmiennych środowiskowych klastra, jeśli nie mogą być dostępne dla wszystkich użytkowników w klastrze.

  • Wpisy tajne nie są redagowane z dziennika stdout i stderr strumieni sterowników platformy Spark. Aby chronić dane poufne, domyślnie dzienniki sterowników platformy Spark są widoczne tylko przez użytkowników z uprawnieniami CAN MANAGE w zadaniu, trybie dostępu pojedynczego użytkownika i klastrach trybu dostępu współdzielonego. Aby zezwolić użytkownikom z uprawnieniem CAN ATTACH TO lub CAN RESTART, aby wyświetlić dzienniki w tych klastrach, ustaw następującą właściwość konfiguracji platformy Spark w konfiguracji klastra: spark.databricks.acl.needAdminPermissionToViewLogs false.

    W przypadku klastrów trybu dostępu współużytkowanego bez izolacji dzienniki sterowników platformy Spark mogą być wyświetlane przez użytkowników z uprawnieniem CAN ATTACH TO lub CAN MANAGE. Aby ograniczyć, kto może odczytywać dzienniki tylko użytkownikom z uprawnieniami CAN MANAGE, ustaw wartość spark.databricks.acl.needAdminPermissionToViewLogstrue.

Wymagania i ograniczenia

Następujące wymagania i ograniczenia dotyczą odwoływania się do wpisów tajnych we właściwościach konfiguracji platformy Spark i zmiennych środowiskowych:

  • Właściciele klastrów muszą mieć uprawnienie CAN READ w zakresie wpisu tajnego.
  • Tylko właściciele klastrów mogą dodać odwołanie do wpisu tajnego we właściwości konfiguracji platformy Spark lub zmiennej środowiskowej oraz edytować istniejący zakres i nazwę. Właściciele zmieniają wpis tajny przy użyciu interfejsu API wpisów tajnych. Aby ponownie pobrać wpis tajny, należy ponownie uruchomić klaster.
  • Użytkownicy z uprawnieniem CAN MANAGE w klastrze mogą usuwać tajną właściwość konfiguracji platformy Spark lub zmienną środowiskową.

Składnia odwoływania się do wpisów tajnych we właściwości konfiguracji platformy Spark lub zmiennej środowiskowej

Możesz odwołać się do wpisu tajnego przy użyciu dowolnej prawidłowej nazwy zmiennej lub właściwości konfiguracji platformy Spark. Usługa Azure Databricks umożliwia specjalne zachowanie zmiennych odwołujące się do wpisów tajnych na podstawie składni ustawianej wartości, a nie nazwy zmiennej.

Składnia właściwości konfiguracji platformy Spark lub wartości zmiennej środowiskowej musi mieć wartość {{secrets/<scope-name>/<secret-name>}}. Wartość musi zaczynać się od i kończyć {{secrets/ ciągiem }}.

Zmienne części właściwości konfiguracji platformy Spark lub zmiennej środowiskowej to:

  • <scope-name>: nazwa zakresu, w którym jest skojarzony wpis tajny.
  • <secret-name>: unikatowa nazwa wpisu tajnego w zakresie.

Na przykład {{secrets/scope1/key1}}.

Uwaga

  • Nie powinno istnieć spacje między nawiasami klamrowymi. Jeśli istnieją spacje, są one traktowane jako część zakresu lub nazwy wpisu tajnego.

Odwołanie do wpisu tajnego z właściwością konfiguracji platformy Spark

Należy określić odwołanie do wpisu tajnego we właściwości konfiguracji platformy Spark w następującym formacie:

spark.<property-name> {{secrets/<scope-name>/<secret-name>}}

Dowolna konfiguracja <property-name> platformy Spark może odwoływać się do wpisu tajnego. Każda właściwość konfiguracji platformy Spark może odwoływać się tylko do jednego wpisu tajnego, ale można skonfigurować wiele właściwości platformy Spark w celu odwołowania się do wpisów tajnych.

Na przykład:

Należy ustawić konfigurację platformy Spark, aby odwoływać się do wpisu tajnego:

spark.password {{secrets/scope1/key1}}

Aby pobrać wpis tajny w notesie i użyć go:

Python

spark.conf.get("spark.password")

SQL

SELECT ${spark.password};

Odwołanie do wpisu tajnego w zmiennej środowiskowej

Ścieżkę wpisu tajnego należy określić w zmiennej środowiskowej w następującym formacie:

<variable-name>={{secrets/<scope-name>/<secret-name>}}

Podczas odwołuje się do wpisu tajnego można użyć dowolnej prawidłowej nazwy zmiennej. Dostęp do wpisów tajnych, do których odwołuje się zmienna środowiskowa, jest określany przez uprawnienia użytkownika, który skonfigurował klaster. Wpisy tajne przechowywane w zmiennych środowiskowych są dostępne dla wszystkich użytkowników klastra, ale są redacted z wyświetlania w postaci zwykłego tekstu, takich jak wpisy tajne, do których odwołuje się gdzie indziej.

Zmienne środowiskowe odwołujące się do wpisów tajnych są dostępne ze skryptu inicjowania o zakresie klastra. Zobacz Set and use environment variables with init scripts (Ustawianie i używanie zmiennych środowiskowych za pomocą skryptów inicjowania).

Na przykład:

Należy ustawić zmienną środowiskową, aby odwoływać się do wpisu tajnego:

SPARKPASSWORD={{secrets/scope1/key1}}

Aby pobrać wpis tajny w skrypcie init, uzyskaj dostęp $SPARKPASSWORD przy użyciu następującego wzorca:

if [ -n "$SPARKPASSWORD" ]; then
  # code to use ${SPARKPASSWORD}
fi

Zarządzanie uprawnieniami wpisów tajnych

W tej sekcji opisano sposób zarządzania kontrolą dostępu wpisów tajnych przy użyciu interfejsu wiersza polecenia usługi Databricks? (wersja 0.205 i nowsze). Możesz również użyć interfejsu API wpisów tajnych lub dostawcy narzędzia Terraform usługi Databricks. Aby uzyskać informacje o poziomach uprawnień wpisów tajnych, zobacz Tajne listy ACL

Tworzenie tajnej listy ACL

Aby utworzyć listę ACL wpisów tajnych dla danego zakresu wpisu tajnego przy użyciu interfejsu wiersza polecenia usługi Databricks (starsza wersja)

databricks secrets put-acl <scope-name> <principal> <permission>

Wysyłanie żądania put dla podmiotu zabezpieczeń, który ma już zastosowane uprawnienie zastępuje istniejący poziom uprawnień.

Pole principal określa istniejący podmiot zabezpieczeń usługi Azure Databricks. Użytkownik jest określany przy użyciu swojego adresu e-mail, jednostki usługi przy użyciu jej applicationId wartości i grupy przy użyciu nazwy grupy.

Wyświetlanie wpisów tajnych list ACL

Aby wyświetlić wszystkie tajne listy ACL dla danego zakresu wpisu tajnego:

databricks secrets list-acls <scope-name>

Aby uzyskać listę ACL wpisów tajnych zastosowanych do podmiotu zabezpieczeń dla danego zakresu wpisu tajnego:

databricks secrets get-acl <scope-name> <principal>

Jeśli dla danego podmiotu zabezpieczeń i zakresu nie istnieje lista ACL, to żądanie zakończy się niepowodzeniem.

Usuwanie tajnej listy ACL

Aby usunąć listę ACL wpisów tajnych zastosowanych do podmiotu zabezpieczeń dla danego zakresu wpisu tajnego:

databricks secrets delete-acl <scope-name> <principal>