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 conocer los conceptos básicos de cómo GitHub usa OpenID Connect (OIDC) y su arquitectura y ventajas, consulta 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, consulta OpenID Connect.
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.
- 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 que has revisado Configuración de la confianza de OIDC con la nube. Para obtener un ejemplo, consulta Configuración del asunto en el proveedor de nube.
- Para que la cuenta de servicio esté disponible para la configuración, debe asignarse al rol
roles/iam.workloadIdentityUser
. Para más información, vea la documentación de GCP. - La dirección URL del emisor que se va a usar:
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.
- Use la acción
google-github-actions/auth
para intercambiar el token de OIDC (JWT) por un token de acceso a la nube.
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 más información, consulta 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.
Nota:
La configuración de id-token: write
de los permisos del flujo de trabajo no concede al flujo de trabajo permiso para modificar o escribir en ningún recurso. En su lugar, solo permite al flujo de trabajo solicitar (capturar) y usar (establecer) un token OIDC para una acción o paso. A continuación, este token se usa para autenticarse con servicios externos mediante un token de acceso de corta duración.
Para obtener información detallada sobre los permisos necesarios, ejemplos de configuración y escenarios avanzados, consulta Referencia de OpenID Connect.
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.
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
SERVICE-ACCOUNT
: reemplace esto por el nombre de la cuenta de servicio en 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.
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@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0' with: create_credentials_file: 'true' workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER' service_account: 'SERVICE-ACCOUNT' - id: 'gcloud' name: 'gcloud' run: |- gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}" gcloud services list
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@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'
with:
create_credentials_file: 'true'
workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'
service_account: 'SERVICE-ACCOUNT'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list