Información general
OpenID Connect (OIDC) permite que los flujos de trabajo de GitHub Actions se autentiquen con JFrog para descargar y publicar artefactos sin necesidad de almacenar contraseñas, tokens o claves de API de JFrog en GitHub.
En esta guía se proporciona información general sobre cómo configurar JFrog para confiar en el OIDC de GitHub como identidad federada y se muestra cómo usar esta configuración en un flujo de trabajo de GitHub Actions.
Para obtener un ejemplo de flujo de trabajo de GitHub Actions, consulta Integración de ejemplo de GitHub Actions en la documentación de JFrog.
Para obtener un flujo de trabajo de ejemplo de GitHub Actions mediante la CLI de JFrog, consulta build-publish.yml
en el repositorio jfrog-github-oidc-example
.
Requisitos previos
-
Para conocer los conceptos básicos de cómo GitHub usa OpenID Connect (OIDC) y su arquitectura y ventajas, consulta "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 que el proveedor de servicios en la nube emite tokens de acceso, tendrá que definir al menos una condición, para que los repositorios no confiables no puedan solicitar tokens de acceso para los recursos en la nube. Para obtener más información, vea «Acerca del fortalecimiento de seguridad con OpenID Connect».
-
Para estar protegido, debes establecer un JSON de notificaciones en JFrog al configurar asignaciones de identidad. Para obtener más información, vea «AUTOTITLE» y «Acerca del fortalecimiento de seguridad con OpenID Connect».
Por ejemplo, puedes establecer
iss
enhttps://token.actions.githubusercontent.com
, yrepository
en algo parecido a "octo-org/octo-repo"'. Esto garantizará que solo los flujos de trabajo de Acciones del repositorio especificado tengan acceso a la plataforma JFrog. A continuación se muestra un ejemplo de JSON de notificaciones al configurar asignaciones de identidad.JSON { "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
{ "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
Incorporación del proveedor de identidades a JFrog
Para usar OIDC con JFrog, establece una relación de confianza entre GitHub Actions y la plataforma JFrog. Para obtener más información sobre este proceso, consulta Integración de OpenID Connect en la documentación de JFrog.
- Inicia sesión en la plataforma JFrog.
- Configura la confianza entre JFrog y los flujos de trabajo de GitHub Actions.
- Configura asignaciones de identidad.
Actualizar tu flujo de trabajo de GitHub Actions
Una vez que establezcas una relación de confianza entre GitHub Actions y la plataforma JFrog, puedes actualizar el archivo de flujo de trabajo de GitHub Actions.
En el archivo de flujo de trabajo de GitHub Actions, asegúrate de que usas el nombre del proveedor y el público que configuraste en la plataforma JFrog.
En el ejemplo siguiente se usa el marcador de posición YOUR_PROVIDER_NAME
.
- name: Fetch Access Token from Artifactory
id: fetch_access_token
env:
ID_TOKEN: $
run: |
ACCESS_TOKEN=$(curl \
-X POST \
-H "Content-type: application/json" \
https://example.jfrog.io/access/api/v1/oidc/token \
-d \
"{\"grant_type\": \"urn:ietf:params:oauth:grant-type:token-exchange\", \"subject_token_type\":\"urn:ietf:params:oauth:token-type:id_token\", \"subject_token\": \"$ID_TOKEN\", \"provider_name\": \"YOUR_PROVIDER_NAME\"}" | jq .access_token | tr -d '"')
echo ACCESS_TOKEN=$ACCESS_TOKEN >> $GITHUB_OUTPUT
En el ejemplo siguiente se muestra parte de un archivo de flujo de trabajo de GitHub Actions mediante cURL.
- name: Get ID Token (cURL method)
id: idtoken
run: |
ID_TOKEN=$(curl -sLS -H "User-Agent: actions/oidc-client" -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
"${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=jfrog-github" | jq .value | tr -d '"')
echo "ID_TOKEN=${ID_TOKEN}" >> $GITHUB_OUTPUT
Como alternativa, puedes establecer el público como una variable de entorno mediante el contexto env
. Para obtener más información sobre el contexto de env
, consulte "Acceso a información contextual sobre ejecuciones de flujo de trabajo".
Nota: Cuando los entornos se usan en flujos de trabajo o en directivas de OIDC, se recomienda agregar reglas de protección al entorno para mayor seguridad. Por ejemplo, puedes configurar reglas de implementación en un entorno para restringir qué ramas y etiquetas se pueden implementar en el entorno o acceder a secretos del entorno. Para obtener más información, vea «Administrar entornos para la implementación».
jobs:
build:
runs-on: ubuntu-latest
env:
OIDC_AUDIENCE: 'YOUR_AUDIENCE'
Después, en el archivo de flujo de trabajo, recupera el valor de las variables almacenadas en el contexto env
. En el ejemplo siguiente se usa el contexto env
para recuperar el público de OIDC.
- name: Get ID Token (using env context)
uses: actions/github-script@v6
id: idtoken
with:
script: |
const coredemo = require('@actions/core');
let id_token = await coredemo.getIDToken(process.env.OIDC_AUDIENCE);
coredemo.setOutput('id_token', id_token);