Resumen
OpenID Connect (OIDC) permite que tus flujos de trabajo de GitHub Actions se autentiquen con HashiCorp Vault para recuperar secretos.
Esta guía te proporciona un resumen de cómo configurar HashiCorp Vault para que confíe en el OIDC de GitHub como identidad federada y demuestra cómo utilizar esta configuración en la acción hashicorp/vault-action para recuperar los secretos desde HashiCorp Vault.
Prerrequisitos
-
Para aprender los conceptos básicos de cómo GitHub utiliza OpenID Connect (OIDC) y su arquitectura y beneficios, consulta la sección "Acerca del fortalecimiento de seguridad con OpenID Connect".
-
Antes de proceder, debes planear tu estrategia de seguridad para garantizar que los tokens de acceso solo se asignen de forma predecible. Para controlar la forma en la que tu proveedor de servicios en la nube emite tokens de acceso, debes define por lo menos una condición para que los repositorios no confiables no puedan solicitar tokens de acceso para tus recursos en la nube. Para obtener más información, consulta la sección "Configurar la relación de confianza de OIDC con la nube".
Agregar el proveedor de identidad a HashiCorp Vault
Para utilizar OIDC con HashiCorp Vault, necesitarás agregar una configuración de confianza para el proveedor de OIDC de GitHub. Para obtener más información, consulta la documentación de HashiCorp Vault.
Configura la bóveda para que acepte Tokens Web JSON (JWT) para la autenticación:
- Para el
oidc_discovery_url
, utilizahttps://token.actions.githubusercontent.com
- Para
bound_issuer
, utilizahttps://token.actions.githubusercontent.com
- Asegúrate de que
bound_subject
se defina correctamente para tus requisitos de seguridad. Para obtener más información, consulta la sección "Configurar la confianza de OIDC con la nube" yhashicorp/vault-action
.
Actualizar tu flujo de trabajo de GitHub Actions
Para actualizar tus flujos de trabajo para ODIC, necesitarás hacer dos cambios a tu YAML:
- Agregar ajustes de permisos para el token.
- Utiliza la acción
hashicorp/vault-action
para intercambiar el token OIDC (JWT) por un token de acceso a la nube.
Para agregar la integración de OIDC con tus flujos de trabajo, la cual les permita acceder a los secretos en la bóveda, necesitarás agregar los siguientes cambios al código:
- Otorga permiso para recuperar el token del proveedor de OIDC de GitHub:
- El flujo de trabajo necesita ajustes de
permissions:
con el valorid-token
configurado enwrite
. Esto te permite recuperar el token de OIDC desde cualquier job en el flujo de trabajo.
- El flujo de trabajo necesita ajustes de
- Solicita el JWT desde el proveedor de OIDC de GitHub y preséntalo a HashiCorp Vault para recibir un token de acceso:
- Podrías utilizar las Herramientas de las acciones para recuperar los tokens para tu job o puedes utilizar la acción
hashicorp/vault-action
para recuperar el JWT y recibir el token de acceso de la bóveda.
- Podrías utilizar las Herramientas de las acciones para recuperar los tokens para tu job o puedes utilizar la acción
Este ejemplo demuestra cómo utilizar OIDC con la acción oficial para solicitar un secreto de HashiCorp Vault.
Agregar ajustes de permisos
El job o ejecución de flujo de trabajo requiere un ajuste de permissions
con id-token: write
. No podrás solicitar la ID de token JWT de OIDC si el ajuste de permissions
para el id-token
se configura como read
o none
.
El ajuste de id-token: write
permite que se solicite el JWT desde el proveedor de OIDC de GitHub utilizando uno de estos enfoques:
- Utilizando variables de ambiente en el ejecutor (
ACTIONS_ID_TOKEN_REQUEST_URL
yACTIONS_ID_TOKEN_REQUEST_TOKEN
). - Utilizando
getIDToken()
desde el kit de herramientas de las acciones.
Si solo necesitas recuperar un token de OIDC para un solo job, entonces este permiso puede configurarse dentro de dicho job. Por ejemplo:
permissions:
id-token: write
Puede que necesites especificar permisos adicionales aquí, dependiendo de los requisitos de tu flujo de trabajo.
Solicitar el token de acceso
La acción hashicorp/vault-action
recibe un JWT del proveedor de OIDC de GitHub y posteriormente solicita un token de acceso de tu instancia de HashiCorp Vault para recuperar los secretos. Para obtener más información, consulta la documentación de HashiCorp Vault.
Este ejemplo demuestra cómo crear un job que solicite un secreto de HashiCorp Vault.
<Vault URL>
: Reemplaza esto con la URL de tu HashiCorp Vault.<Role name>
: Reemplaza esto con el rol que configuraste en la relación de confianza de HashiCorp Vault.<Audience>
: Reemplaza esto con la audiencia que definiste en la relación de confianza de HashiCorp Vault.<Secret-Path>
: Reemplaza esto con la ruta al secreto que estás recuperando desde HashiCorp Vault. Por ejemplo:secret/data/ci npmToken
.
jobs:
retrieve-secret:
steps:
- name: Retrieve secret from Vault
uses: hashicorp/vault-action@v2.4.0
with:
url: <Vault URL>
role: <Role name>
method: jwt
jwtGithubAudience: <Audience>
secrets: <Secret-Path>
- name: Use secret from Vault
run: |
# This step has access to the secret retrieved above; see hashicorp/vault-action for more details.