Resumen
OpenID Connect (OIDC) permite que tus flujos de trabajo de GitHub Actions accedan a recursos en la Plataforma de Google Cloud (GCP) sin necesidad de almacenar sus credenciales como secretos de GitHub de larga duración.
Esta guía te proporciona un resumen de cómo configurar GCP para que confíe en el OIDC de GitHub como una entidad federada e incluye un ejemplo de flujo de trabajo para la acción google-github-actions/auth
que utiliza tokens para autenticarse al GCP para acceder a los recursos.
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 un proveedor de identidad de Google Cloud Workload
Para configurar el proveedor de identidad de OIDC en GCP, necesitarás llevar a cabo la siguiente configuración. Para obtener las instrucciones de cómo hacer estos cambios, refiérete a la documentación de GCP.
- Crear un grupo de identidad nuevo.
- Configura el mapeo y agrega las condiciones.
- Conecta el grupo nuevo a una cuenta de servicio.
Orientación adicional para configurar el proveedor de identidad:
- Para fortalecer la seguridad, asegúrate de haber revisado la sección "Configurar la confianza de OIDC con la nube". Por ejemplo, consulta "Configurar el tema en tu proveedor de servicios en la nube".
- Para que la cuenta de servicio esté disponible para su configuración, esta necesita estar asignada al rol
roles/iam.workloadIdentityUser
. Para obtener más información, consulta la "Documentación de GCP". - La URL del emisor a utilizar:
https://token.actions.githubusercontent.com
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
google-github-actions/auth
para intercambiar el token (JWT) de OIDC por un token de acceso a la nube.
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 google-github-actions/auth
recibe un JWT desde el proveedor de OIDC de GitHub y luego solicita un token de acceso desde GCP. Para obtener más información, consulta la documentación de GCP.
Este ejemplo tiene un job llamado Get_OIDC_ID_token
que utiliza acciones para solicitar una lista de servicios de GCP.
<example-workload-identity-provider>
: Reemplaza esto con la ruta a tu proveedor de identidad en GCP. Por ejemplo,projects/<example-project-id>/locations/global/workloadIdentityPools/<name-of-pool/providers/<name-of-provider>
<example-service-account>
: Reemplaza esto con el nombre de tu cuenta de servicio en GCP.<project-id>
: Reemplaza esto con la ID de tu proyecto de GCP.
Esta acción intercambia un token de OIDC de GitHub por un token de acceso a Google Cloud, utilizando la Federación de Identidad de Carga de Trabajo.
name: List services in GCP
on:
pull_request:
branches:
- main
permissions:
id-token: write
jobs:
Get_OIDC_ID_token:
runs-on: ubuntu-latest
steps:
- id: 'auth'
name: 'Authenticate to GCP'
uses: 'google-github-actions/auth@v0.3.1'
with:
create_credentials_file: 'true'
workload_identity_provider: '<example-workload-identity-provider>'
service_account: '<example-service-account>'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list