Skip to main content

Configurar OpenID Connect en Google Cloud Platform

Utiliza OpenID Connect con tus flujos de trabajo para autenticarte con Google Cloud Platform.

Información general

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.

En esta guía se proporciona un resumen de cómo configurar GCP 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 google-github-actions/auth en el que se usan tokens para autenticarse en GCP y acceder a los recursos.

Prerrequisitos

  • Para obtener información sobre los conceptos básicos de cómo GitHub usa OpenID Connect (OIDC), su arquitectura y sus ventajas, consulte "Acerca del fortalecimiento de la 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 más información, vea "Configuración de la 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 instrucciones sobre cómo realizar estos cambios, consulte la documentación de GCP.

  1. Crear un grupo de identidad nuevo.
  2. Configura el mapeo y agrega las condiciones.
  3. Conecta el grupo nuevo a una cuenta de servicio.

Orientación adicional para configurar el proveedor de identidad:

Actualizar tu flujo de trabajo de GitHub Actions

Para actualizar tus flujos de trabajo para ODIC, necesitarás hacer dos cambios a tu YAML:

  1. Agregar ajustes de permisos para el token.
  2. Use la acción google-github-actions/auth para intercambiar el token de OIDC (JWT) por un token de acceso a la nube.

Agregar ajustes de permisos

La ejecución del trabajo o del flujo de trabajo necesita una configuración permissions con id-token: write. No podrá solicitar el token de identificador JWT de OIDC si el valor permissions de id-token está establecido en read o none.

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 y ACTIONS_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:

YAML
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:

YAML
permissions:
  id-token: write # This is required for requesting the JWT

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 del proveedor de OIDC de GitHub y luego solicita un token de acceso a GCP. Para más información, vea la documentación de GCP.

Este ejemplo tiene un trabajo llamado Get_OIDC_ID_token que utiliza acciones para solicitar una lista de servicios a GCP.

  • <example-workload-identity-provider>: reemplace esto por la ruta al proveedor de identidades en GCP. por ejemplo, projects/<example-project-id>/locations/global/workloadIdentityPools/<name-of-pool/providers/<name-of-provider>
  • <example-service-account>: reemplace esto por el nombre de la cuenta de servicio en GCP.
  • <project-id>: reemplace esto por el id. del proyecto de GCP.

Esta acción intercambia un token de OIDC de GitHub por un token de acceso de Google Cloud mediante la federación de identidades de carga de trabajo.

YAML
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