# Secretos y variables de entorno Dos tipos de valores quedan fuera de su código: **secretos** (contraseñas y claves de API) y **variables de entorno** (ajustes simples, como una dirección pública). Guardados en el proyecto, una clave nunca termina en su repositorio ni en un chat con la IA, y usted cambia un valor sin cambiar código. Los secretos se cifran con un servicio de claves administrado. Una vez guardado, el valor queda oculto: nadie puede leerlo en la aplicación ni por la API, pero sus aplicaciones sí pueden usarlo. ## Antes de empezar [#antes-de-empezar] - Agregarlos y cambiarlos requiere el rol **Propietario** o **Administrador** en el proyecto. - La aplicación le pide confirmar su identidad primero: seleccione **Verifique para ver** y luego **Continuar** en "Confirme que es usted". ## Dónde encontrarlos [#dónde-encontrarlos] - **Claves** en la barra lateral, bajo **Lanzamiento**, cubre todos los proyectos. Elija uno; la página indica si puede cambiar o solo ver. - Dentro de un proyecto, abra **Configuración** y vaya a **Claves**. ## ¿Secreto o variable? [#secreto-o-variable] | Use un | Para | Después de guardar | | --- | --- | --- | | Secreto | Contraseñas, tokens y claves de API. | Oculto. Puede reemplazarlo, desactivarlo o eliminarlo, nunca leerlo. | | Variable | Ajustes simples que sus aplicaciones pueden leer. | Visible para quienes pueden abrir la sección Claves. | ## Agregar un secreto [#agregar-un-secreto] ### Abra Secretos [#abra-secretos] En la sección **Claves** del proyecto, seleccione **Verifique para ver** si se le pide, vaya a **Secretos** y abra **Agregar un secreto**. ### Póngale nombre [#póngale-nombre] Escriba un **Nombre**, por ejemplo `GITHUB_TOKEN`. ### Elija cómo se usa [#elija-cómo-se-usa] En **Cómo se usa**, elija una opción: - **Se agrega a las solicitudes a un sitio web**: escriba el **Sitio web** (por ejemplo `api.github.com`). Klarety agrega el secreto a cada solicitud allí, así su código nunca tiene el valor. Opcionalmente, defina el **Encabezado** (por ejemplo `Authorization`) y un **Prefijo** (por ejemplo `Bearer `). - **Una variable en sus aplicaciones desplegadas**: su aplicación desplegada la lee como una variable de entorno con este nombre. ### Pegue el valor y elija el alcance [#pegue-el-valor-y-elija-el-alcance] Pegue el **Valor**. En **Alcance**, elija **Studio**, **Vista previa** o **Producción**. ### Guarde [#guarde] Seleccione **Agregar secreto**. Los secretos también son de solo escritura en el SDK: `projects.secrets` devuelve nombres, sitios, versiones y último uso, nunca un valor. ```python title="secrets.py" from klarety import Nexus nx = Nexus.connect() project_id = "YOUR_PROJECT_ID" nx.projects.set_secret( project_id, "GITHUB_TOKEN", "ghp_your_token", host="api.github.com", use="host", environments=["studio", "production"], ) nx.projects.set_secret(project_id, "STRIPE_KEY", "sk_live_your_key", use="env") for secret in nx.projects.secrets(project_id)["secrets"]: print(secret["name"], secret["host"], secret["version"]) nx.projects.disable_secret(project_id, "STRIPE_KEY") nx.projects.delete_secret(project_id, "STRIPE_KEY") ``` `use="host"` agrega el secreto a las solicitudes a `host`, con `inject_header` (por defecto `Authorization`) e `inject_prefix` (por defecto `Bearer `). `use="env"` lo define como una variable con el nombre del secreto. `environments` acepta `studio`, `preview` y `production`. Para traer un archivo dotenv, `nx.projects.import_secrets(project_id, entries, host=...)` agrega un secreto por clave. ## Cambiar o quitar un secreto [#cambiar-o-quitar-un-secreto] Cada secreto muestra su alcance, su versión y cuándo se usó por última vez. - **Reemplazar**: sobrescribe el valor para siempre. El nuevo se usa desde la próxima solicitud. - **Desactivar**: pausa el secreto sin eliminarlo. - **Eliminar**: deja de enviarse de inmediato y no se puede recuperar. ## Agregar una variable [#agregar-una-variable] ### Abra Entorno [#abra-entorno] En la sección **Claves** del proyecto, vaya a **Entorno** y seleccione **Agregar variable**. ### Complétela [#complétela] Escriba el nombre y el **Valor**, y elija su alcance (Studio, Vista previa o Producción). Márquela como **Compilación** si su aplicación la necesita al compilarse, o **Público** si está pensada para verse, por ejemplo en una página web. ### Guarde [#guarde-1] Seleccione **Guardar**. Si quitó o renombró una variable, la aplicación le pide confirmar. `set_env` reemplaza el conjunto completo, y solo sobre la versión que usted leyó, para que dos personas no se sobrescriban sin darse cuenta. Una `version` desactualizada recibe un conflicto 409. ```python title="environment.py" from klarety import Nexus nx = Nexus.connect() project_id = "YOUR_PROJECT_ID" current = nx.projects.env(project_id) entries = {**current["entries"], "APP_TITLE": "Sales dashboard"} nx.projects.set_env( project_id, entries, version=current["version"], scopes={ **current["scopes"], "APP_TITLE": {"environments": ["production", "preview"], "public": True}, }, ) ``` ## Cuándo se aplica un cambio [#cuándo-se-aplica-un-cambio] - Los Studios y despliegues nuevos reciben una variable cambiada. - El código que lee una variable quitada o renombrada deja de encontrarla. - Un secreto reemplazado se usa desde la próxima solicitud. Uno eliminado se detiene de inmediato. Una aplicación en ejecución conserva sus valores anteriores hasta que se despliegue de nuevo. Consulte [Desplegar una aplicación](/docs/es/deploy/deploy-an-app). ## Si algo sale mal [#si-algo-sale-mal] No ha confirmado su identidad recientemente. Seleccione **Verifique para ver**. Solo el Propietario y los Administradores del proyecto pueden agregar o cambiar secretos. Pídaselo a uno de ellos. Genere un valor nuevo en su origen y luego **Reemplácelo** aquí. Si cree que se filtraron las credenciales del proyecto, use **Cortar el acceso del proyecto** en la Zona de peligro. Consulte [Configuración del proyecto](/docs/es/projects/settings). ## Siguientes pasos [#siguientes-pasos] - [Configuración del proyecto](/docs/es/projects/settings) - [Desplegar una aplicación](/docs/es/deploy/deploy-an-app) - [Seguridad](/docs/es/get-started/security)