Información general
OpenID Connect (OIDC) permite que tus flujos de trabajo de GitHub Actions accedan a los recursos en Azure, sin la necesidad de almacenar las credenciales de Azure como secretos de GitHub con vida larga.
En esta guía se proporciona un resumen de cómo configurar Azure para que confíe en el OIDC de GitHub como una entidad federada y se incluye un ejemplo de flujo de trabajo para la acción azure/login
en el que se usan tokens para autenticarse en Azure y acceder a los recursos.
Prerrequisitos
-
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».
Adición de las credenciales federadas a Azure
El proveedor de OIDC de GitHub funciona con la federación de identidades de carga de trabajo de Azure. Para obtener información general, vea la documentación de Microsoft en "Federación de identidades de carga de trabajo".
Para configurar el proveedor de identidad de OIDC en Azure, necesitarás realizar la siguiente configuración. Para obtener instrucciones sobre cómo realizar estos cambios, consulte la documentación de Azure.
En el procedimiento siguiente, crearás una aplicación para Microsoft Entra ID (anteriormente conocido como Azure AD).
- Crea una aplicación y una entidad de servicio de Entra ID.
- Agrega credenciales federadas para la aplicación Entra ID.
- Crea secretos de GitHub para almacenar la configuración de Azure.
Orientación adicional para configurar el proveedor de identidad:
- Para incrementar la seguridad, asegúrate de haber consultado "Acerca del fortalecimiento de seguridad con OpenID Connect". Para obtener un ejemplo, consulta "Acerca del fortalecimiento de seguridad con OpenID Connect".
- Para la configuración de
audience
,api://AzureADTokenExchange
es el valor recomendado, pero también puede especificar otros valores aquí.
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.
- Use la acción
azure/login
para intercambiar el token de OIDC (JWT) por un token de acceso a la nube.
Note
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».
Agregar ajustes de permisos
La ejecución de trabajo o flujo de trabajo requiere una configuración de permissions
con id-token: write
para permitir que el proveedor OIDC de GitHub pueda crear un token web JSON para cada ejecución. No podrás solicitar el token de identificador JWT de OIDC si el valor de permissions
para id-token
no está establecido en write
, pero este valor no implica conceder acceso de escritura a ningún recurso, solo poder capturar y establecer el token de OIDC para una acción o paso para habilitar la autenticación con un token de acceso de corta duración. Cualquier configuración de confianza real se define mediante notificaciones de OIDC. Para obtener más información, consulta «Acerca del fortalecimiento de seguridad con OpenID Connect».
El valor id-token: write
permite solicitar JWT desde el proveedor OIDC de GitHub mediante uno de estos enfoques:
- Con variables de entorno en el ejecutor (
ACTIONS_ID_TOKEN_REQUEST_URL
yACTIONS_ID_TOKEN_REQUEST_TOKEN
). - Con
getIDToken()
del kit de herramientas de Acciones.
Si necesita capturar un token de OIDC para un flujo de trabajo, el permiso se puede establecer en el nivel de flujo de trabajo. Por ejemplo:
permissions: id-token: write # This is required for requesting the JWT contents: read # This is required for actions/checkout
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
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 # This is required for requesting the JWT
permissions:
id-token: write # This is required for requesting the JWT
Puede que necesite especificar permisos adicionales aquí, dependiendo de los requisitos de su flujo de trabajo.
Para flujos de trabajo reutilizables que son propiedad del mismo usuario, organización o empresa que el flujo de trabajo del autor de la llamada, se puede acceder al token de OIDC generado en el flujo de trabajo reutilizable desde el contexto del autor de la llamada.
Para los flujos de trabajo reutilizables fuera de la empresa u organización, la configuración de permissions
para id-token
debe fijarse explícitamente en write
en el nivel del flujo de trabajo del autor de la llamada o en el trabajo específico que llama al flujo de trabajo reutilizable.
Esto garantiza que el token de OIDC generado en el flujo de trabajo reutilizable solo se pueda consumir en los flujos de trabajo de la persona que llama cuando está previsto.
Para obtener más información, vea «Reutilización de flujos de trabajo».
Solicitar el token de acceso
La acción azure/login
recibe un JWT del proveedor de OIDC de GitHub y luego solicita un token de acceso a Azure. Para obtener más información, consulte la documentación de azure/login
.
El siguiente ejemplo intercambia un token de ID de ODIC con Azure para recibir un token de acceso, el cual puede utilizarse entonces apra cceder a los recursos en la nube.
name: Run Azure Login with OIDC on: [push] permissions: id-token: write contents: read jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: 'Az CLI login' uses: azure/login@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: 'Run az commands' run: | az account show az group list
name: Run Azure Login with OIDC
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run az commands'
run: |
az account show
az group list