Este repositorio contiene workflows reutilizables de GitHub Actions que permiten centralizar la gestión de CI/CD y sincronizar actualizaciones fácilmente entre múltiples repositorios.
El objetivo principal es proporcionar workflows estandarizados y reutilizables que puedan ser llamados desde otros repositorios, evitando la duplicación de código y facilitando el mantenimiento de pipelines de CI/CD.
Descripción: Configura automáticamente un proveedor OIDC (OpenID Connect) en AWS y crea un rol IAM compartido que permite a GitHub Actions autenticarse con AWS sin necesidad de credenciales estáticas.
Funcionalidades:
- Crea o reutiliza un proveedor OIDC para GitHub Actions
- Genera un rol IAM compartido configurable
- Crea políticas IAM dinámicas por repositorio
- Utiliza Terraform para la infraestructura como código
- Detecta automáticamente proveedores OIDC existentes
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
aws_account_id |
string | ✅ | ID de la cuenta de AWS |
aws_region |
string | ✅ | Región de AWS donde crear los recursos |
role_name |
string | ✅ | Nombre para el rol IAM |
repo_names |
string (JSON) | ✅ | Lista JSON de repositorios autorizados (formato: ["owner/repo1", "owner/repo2"]) |
oidc_actions |
string | ❌ | Patrón de acciones OIDC permitidas (default: "*") |
policy_actions |
string (JSON) | ✅ | Mapa JSON de acciones IAM por repositorio (formato: "{owner/repo1", ["s3:*"]}) |
| Secreto | Descripción |
|---|---|
aws_access_key_id |
Access Key ID de AWS |
aws_secret_access_key |
Secret Access Key de AWS |
| Output | Descripción |
|---|---|
oidc_provider_arn |
ARN del proveedor OIDC creado/actualizado |
github_role_arn |
ARN del rol IAM creado/actualizado |
name: Setup AWS OIDC
on:
workflow_dispatch:
inputs:
aws_region:
description: 'AWS Region'
required: true
default: 'us-east-1'
role_name:
description: 'Nombre del rol IAM'
required: true
default: 'github-actions-role'
jobs:
setup-oidc:
uses: pulidovpe/reusable-workflows/.github/workflows/oidc-setup.yml@main
with:
aws_account_id: '123456789012'
aws_region: ${{ github.event.inputs.aws_region }}
role_name: ${{ github.event.inputs.role_name }}
repo_names: '["usuario/my-app", "usuario/another-app"]'
policy_actions: '{"usuario/my-app": ["s3:GetObject", "s3:PutObject"], "usuario/another-app": ["ec2:DescribeInstances"]}'
secrets:
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}El workflow utiliza Terraform para gestionar la infraestructura:
➡️ Backend: S3 (devops-aws-backend-tfstate)
➡️ Estado: test/oidc-setup.tfstate
➡️ Región: Configurable via input
➡️ Recursos creados:
- Proveedor OIDC para GitHub Actions
- Rol IAM compartido
- Políticas IAM dinámicas por repositorio
terraform/oidc/
├── main.tf # Configuración principal de Terraform
├── variables.tf # Definición de variables
└── outputs.tf # Outputs de Terraform
Para usar cualquier workflow de este repositorio en tu proyecto:
-
Referenciar el workflow:
uses: pulidovpe/reusable-workflows/.github/workflows/nombre-workflow.yml@main
-
Proporcionar los parámetros requeridos:
with: parametro1: valor1 parametro2: valor2
-
Configurar los secretos necesarios:
secrets: secreto1: ${{ secrets.MI_SECRETO }}
@main: Última versión (desarrollo)@v1.0.0: Versión estable (cuando esté disponible)
Para agregar nuevos workflows:
- Crea el archivo en
.github/workflows/ - Documenta los parámetros y secretos requeridos
- Actualiza este README con la información del nuevo workflow
- Incluye ejemplos de uso
- Los workflows utilizan Terraform para gestionar la infraestructura
- El backend de Terraform está configurado en S3
- Los roles IAM son compartidos entre múltiples repositorios
- Se detectan automáticamente proveedores OIDC existentes para evitar duplicados