Compartir a través de


Secretos

Un secreto es un par clave-valor que almacena material secreto, con un nombre de clave único dentro de un ámbito de secretos. Cada ámbito está limitado a 1000 secretos. El tamaño máximo permitido del valor del secreto es de 128 KB.

Consulte también la API de secretos.

Crear un secreto

Los nombres de los secretos no distinguen mayúsculas de minúsculas.

El método para crear un secreto depende de si se usa un ámbito con Azure Key Vault o un ámbito con respaldo de Databricks.

Crear un secreto en un ámbito respaldado por Azure Key Vault

Para crear un secreto en Azure Key Vault, debe usar la API REST Set Secret de Azure o la interfaz de usuario de Azure Portal.

Azure Key Vault

Crear un secreto en un ámbito respaldado por Databricks

Para crear un secreto en un ámbito respaldado por Databricks mediante el CLI de Databricks (versión 0.205 y posteriores):

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

Si va a crear un secreto de varias líneas, puede pasar el secreto mediante la entrada estándar. Por ejemplo:

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

También puede proporcionar un secreto de un archivo. Para obtener más información sobre cómo escribir secretos, consulte ¿Qué es la CLI de Databricks?.

Enumeración de secretos

Para enumerar secretos en un ámbito determinado:

databricks secrets list-secrets <scope-name>

La respuesta muestra información de metadatos sobre los secretos, como los nombres de clave de los secretos. Use la utilidad Secretos (dbutils.secrets) en un cuaderno o trabajo para enumerar estos metadatos. Por ejemplo:

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

leer un secreto

Puede crear secretos mediante la API REST o la CLI, pero debe usar la utilidad Secrets (dbutils.secrets) en un cuaderno o trabajo para leer un secreto.

eliminar un secreto

Para eliminar un secreto de un ámbito con la CLI de Databricks:

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

También puede usar la API de secretos.

Para eliminar un secreto de un ámbito respaldado por Azure Key Vault, use la API de REST SetSecret de Azure o la interfaz de usuario de Azure Portal.

Usar un secreto en una propiedad de configuración de Spark o una variable de entorno

Importante

Esta característica está en versión preliminar pública.

Nota:

Disponible en Databricks Runtime 6.4, soporte extendido y versiones posteriores.

Puede hacer referencia a un secreto en una variable de entorno o una propiedad de configuración de Spark. Los secretos recuperados se eliminan de la salida del cuaderno y de los registros del controlador y del ejecutor de Spark.

Importante

Tenga en cuenta las siguientes consecuencias de seguridad al hacer referencia a secretos en una variable de entorno o propiedad de configuración de Spark:

  • Si el control de acceso a tablas no está habilitado en un clúster, cualquier usuario que tenga el permiso Can Attach To (Puede asociar a) en un clúster o el permiso Run (Ejecutar) en un cuaderno puede leer las propiedades de configuración de Spark desde dentro del cuaderno. Esto incluye a los usuarios que no tienen permiso directo para leer un secreto. Databricks recomienda habilitar el control de acceso a tablas en todos los clústeres o administrar el acceso a los secretos mediante ámbitos de secretos.

  • Incluso cuando el control de acceso a tablas está habilitado, los usuarios con el permiso Can Attach To (Puede asociar a) en un clúster o el permiso Run (Ejecutar) en un cuaderno pueden leer variables de entorno de clúster desde dentro del cuaderno. Databricks no recomienda almacenar secretos en variables de entorno de clúster si no deben estar disponibles para todos los usuarios del clúster.

  • Los secretos no se censuran del los flujos stdout y stderr de registros de controladores de Spark. Para proteger los datos confidenciales, los registros de controladores de Spark solo son visibles por los usuarios con el permiso CAN MANAGE en el trabajo, el modo de acceso de usuario único y los clústeres en modo de acceso compartido. Para permitir que los usuarios con los permisos CAN ATTACH TO o CAN RESTART puedan ver los registros de estos clústeres, establezca la siguiente propiedad de configuración de Spark en la configuración del clúster: spark.databricks.acl.needAdminPermissionToViewLogs false.

    En clústeres de modo de acceso compartido sin aislamiento, los usuarios pueden ver los registros de controladores de Spark con el permiso CAN ATTACH TO o CAN MANAGE. Para limitar quién puede leer los registros solo a los usuarios con el permiso CAN MANAGE, establezca spark.databricks.acl.needAdminPermissionToViewLogs en true.

Requisitos y limitaciones

Los siguientes requisitos y limitaciones se aplican al hacer referencia a secretos en las propiedades de configuración de Spark y las variables de entorno:

  • Los propietarios del clúster deben tener el permiso CAN READ en el ámbito del secreto.
  • Solo los propietarios del clúster pueden agregar una referencia a un secreto en una variable de entorno o propiedad de configuración de Spark, y editar el ámbito y el nombre existentes. Los propietarios cambian un secreto mediante la API de secretos. Debe reiniciar el clúster para volver a capturar el secreto.
  • Los usuarios con el permiso CAN MANAGE (Puede administrar) en el clúster pueden eliminar una variable de entorno o propiedad de configuración de Spark de un secreto.

Sintaxis para hacer referencia a secretos en una propiedad de configuración de Spark o una variable de entorno

Puede hacer referencia a un secreto mediante cualquier nombre de variable válido o propiedad de configuración de Spark. Azure Databricks permite un comportamiento especial para las variables que hacen referencia a secretos en función de la sintaxis del valor que se establece, no del nombre de la variable.

La sintaxis del valor de la variable de entorno o propiedad de configuración de Spark debe ser {{secrets/<scope-name>/<secret-name>}}. El valor debe comenzar por {{secrets/ y terminar por }}.

Las partes variables de la variable de entorno o propiedad de configuración de Spark son:

  • <scope-name>: Nombre del ámbito en el que está asociado el secreto.
  • <secret-name>: Nombre único del secreto en el ámbito.

Por ejemplo, {{secrets/scope1/key1}}.

Nota:

  • No debe haber espacios entre las llaves. Si hay espacios, se tratan como parte del ámbito o nombre del secreto.

Referencia a un secreto con una propiedad de configuración de Spark

Especifique una referencia a un secreto en una propiedad de configuración de Spark con el formato siguiente:

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

Cualquier <property-name> de configuración de Spark puede hacer referencia a un secreto. Cada propiedad de configuración de Spark solo puede hacer referencia a un secreto, pero puede configurar varias propiedades de Spark para hacer referencia a secretos.

Por ejemplo:

Establezca una configuración de Spark para hacer referencia a un secreto:

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

Para capturar el secreto en el cuaderno y usarlo:

Python

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

SQL

SELECT ${spark.password};

Referencia a un secreto en una variable de entorno

Especifique una ruta de acceso al secreto en una variable de entorno con el siguiente formato:

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

Puede usar cualquier nombre de variable válido al hacer referencia a un secreto. El acceso a los secretos a los que se hace referencia en las variables de entorno viene determinado por los permisos del usuario que configuró el clúster. Todos los usuarios del clúster pueden acceder a los secretos almacenados en variables de entorno, pero se censuran de la presentación de texto no cifrado, como los secretos a los que se hace referencia desde otro lugar.

Las variables de entorno que hacen referencia a secretos son accesibles desde un script de inicialización con ámbito de clúster. Consulte Establecimiento y uso de variables de entorno con scripts de inicialización.

Por ejemplo:

Puede establecer una variable de entorno para que haga referencia a un secreto:

SPARKPASSWORD={{secrets/scope1/key1}}

Para capturar el secreto en un script de inicialización, acceda a $SPARKPASSWORD mediante el siguiente patrón:

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

Administrar permisos de secretos

En esta sección se describe cómo administrar el control de acceso a secretos mediante ¿Qué es la CLI de Databricks (versión 0.205 y posteriores). También puede usar la API de secretos o el proveedor de Terraform de Databricks. Para conocer los niveles de permisos secretos, consulte ACL de secretos

Creación de una ACL para secreto

A fin de crear una ACL de secretos para un ámbito de secretos determinado mediante la CLI de Databricks (heredado)

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

Al realizar una solicitud PUT para una entidad de seguridad que ya tiene un permiso aplicado, se sobrescribe el nivel de permisos existente.

El campo principal especifica una entidad de seguridad de Azure Databricks existente. Se especifica un usuario mediante su dirección de correo electrónico, una entidad de servicio con su valor applicationId y un grupo con su nombre de grupo.

Visualización de ACL de secreto

Para ver todas las ACL de secretos de un ámbito de secretos determinado:

databricks secrets list-acls <scope-name>

Para obtener la ACL de secreto aplicada a una entidad de seguridad para un ámbito de secretos determinado:

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

Si no existe ninguna ACL para la entidad de seguridad y el ámbito especificados, se producirá un error en esta solicitud.

Eliminación de una ACL de secreto

Para eliminar una ACL de secreto aplicada a una entidad de seguridad para un ámbito de secretos determinado:

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