Compartición de secretos cifrados para GitHub Actions
Crea y recupera enlaces de secretos autodestructivos en flujos de trabajo de CI/CD — con dos líneas de YAML.
- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.API_KEY }}
views: 1
expires: 24h- uses: vaulted-fyi/share-secret/get@v1
id: get
with:
url: ${{ needs.share.outputs.url }}
- run: echo "Secret is $SECRET"
env:
SECRET: ${{ steps.get.outputs.secret }}Cifrado de extremo a extremo
El cifrado AES-256-GCM ocurre dentro del runner de GitHub Actions. Arquitectura de conocimiento cero — el servidor nunca ve el texto plano ni las claves. La clave de descifrado vive únicamente en el fragmento de la URL.
Enmascarado automático de registros
Llama a core.setSecret antes de setOutput para que el valor descifrado nunca aparezca en los registros del flujo de trabajo. Los secretos de varias líneas se enmascaran línea a línea para una protección completa.
Sin necesidad de infraestructura
Sin servidor Vault, sin AWS Secrets Manager, sin archivos de configuración. Solo dos líneas de YAML en tu flujo de trabajo y ya tienes compartición de secretos cifrada.
Salidas combinables
La acción de creación produce tanto url como id. Combínala con notificaciones de Slack, comentarios en PR, acciones de correo o cualquier paso que acepte una entrada de tipo cadena.
Protección con frase de contraseña
Añade una frase de contraseña opcional como segundo factor. La clave de cifrado se envuelve con PBKDF2 — incluso si alguien intercepta el enlace, no puede descifrarlo sin la frase de contraseña.
Enlaces autodestructivos
Establece límites de 1 a 10 visualizaciones. Establece la caducidad de 1 hora a 30 días. Los secretos se eliminan automáticamente del servidor cuando se alcanzan los límites.
Flujos de trabajo comunes
- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.DEPLOY_TOKEN }}
views: 1
expires: 1h
- uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `Deploy token: ${{ steps.share.outputs.url }}`
})- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.DATABASE_URL }}
views: 3
expires: 7d
- uses: slackapi/slack-github-action@v2
with:
webhook: ${{ secrets.SLACK_WEBHOOK }}
webhook-type: incoming-webhook
payload: |
{"text": "DB credentials: ${{ steps.share.outputs.url }}"}- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.PROD_KEY }}
passphrase: ${{ secrets.SHARE_PASSPHRASE }}
views: 1
expires: 1hEntradas de creación
| Entrada | Obligatorio | Por defecto | Descripción |
|---|---|---|---|
| secret | sí | — | El secreto en texto plano que se va a cifrar y compartir |
| views | no | 1 | Máximo de visualizaciones antes del autoborrado (1, 3, 5, 10) |
| expires | no | 24h | Tiempo de caducidad (1h, 24h, 7d, 30d) |
| passphrase | no | — | Frase de contraseña opcional para protección adicional |
Entradas de recuperación
| Entrada | Obligatorio | Por defecto | Descripción |
|---|---|---|---|
| url | sí | — | URL de Vaulted que se va a descifrar |
| passphrase | no | — | Frase de contraseña si el secreto está protegido |