DEV Community

Jorge Rodriguez Noriega
Jorge Rodriguez Noriega

Posted on

OCI Workload Identity Federation: acceso sin credenciales permanentes para GitHub Actions, Kubernetes y agentes de IA

En arquitecturas cloud modernas, uno de los problemas más comunes no es únicamente cómo autenticar una aplicación, sino cómo hacerlo sin terminar administrando API keys, secretos permanentes y usuarios técnicos que sobreviven mucho más tiempo que el workload que los necesita.

Este problema se vuelve todavía más relevante cuando trabajamos con pipelines CI/CD, Kubernetes, arquitecturas multicloud y agentes de inteligencia artificial.

Oracle Cloud Infrastructure está abordando este escenario mediante Workload Identity Federation (WIF), permitiendo que workloads externos utilicen una identidad existente para obtener acceso temporal a recursos OCI sin depender de credenciales OCI permanentes.

En este artículo veremos qué problema resuelve, cómo funciona conceptualmente y por qué puede cambiar la manera en que diseñamos la autenticación machine-to-machine en OCI.

El problema: credenciales que viven demasiado tiempo

Imaginemos un pipeline de GitHub Actions que necesita subir un artefacto a OCI Object Storage.

Una implementación tradicional podría requerir almacenar información como:

OCI_USER_OCID
OCI_TENANCY_OCID
OCI_FINGERPRINT
OCI_PRIVATE_KEY
OCI_REGION

El pipeline funciona.

Pero ahora existe una nueva responsabilidad:

proteger la private key;
controlar quién puede leer el secret;
rotar la credencial;
eliminarla cuando deje de utilizarse;
evitar que termine dentro de una imagen, repositorio o log;
auditar qué workload utilizó realmente esa identidad.

La pregunta entonces es:

¿Por qué entregar una credencial permanente a un workload que solamente necesita acceso durante unos minutos?

Aquí aparece Workload Identity Federation.

¿Qué es OCI Workload Identity Federation?

OCI Workload Identity Federation permite que una carga de trabajo presente una identidad emitida por una plataforma externa confiable y la intercambie por acceso temporal a OCI.

Oracle describe este modelo utilizando ephemeral Resource Principal Session Tokens (RPST).

En lugar de crear permanentemente:

`Workload
    ↓
OCI User
    ↓
API Key
    ↓
OCI Resource

podemos utilizar:

Workload
    ↓
Identidad externa verificable
    ↓
OCI Workload Identity Federation
    ↓
Credencial OCI temporal
    ↓
OCI IAM Policy
    ↓
OCI Resource
Enter fullscreen mode Exit fullscreen mode

`
El workload mantiene su identidad original.

OCI valida esa identidad y determina qué acciones puede realizar.

Arquitectura conceptual

Una arquitectura simplificada podría verse así:

La principal diferencia está en que OCI ya no necesita mantener una identidad permanente por cada workload externo.

Tres conceptos importantes

Oracle resume este modelo alrededor de tres resultados importantes.

  1. No Standing Users

No es necesario mantener un usuario OCI permanente para cada workload.

El workload obtiene una sesión efímera.

Esto puede reducir tareas como:

  • alta de usuarios técnicos;
  • revisiones periódicas;
  • deshabilitación;
  • limpieza;
  • offboarding.
  • No Standing Credentials

Una aplicación puede utilizar una credencial nativa y temporal de su plataforma.

Por ejemplo:

plaintext
GitHub Actions → OIDC Token
Kubernetes → Service Account Token
Cloud workload → Platform-issued identity

Después, OCI puede validar dicha identidad y emitir una sesión temporal.

Esto evita que una API key OCI de larga duración termine almacenada en:

  • GitHub Secrets
  • Kubernetes Secrets
  • Containers
  • CI/CD configuration
  • Notebooks
  • Agent configuration

Oracle destaca precisamente la eliminación de credenciales permanentes como uno de los principales beneficios del modelo.

  1. Claim-Based Authorization

Aquí encontramos uno de los puntos más interesantes.

Una identidad externa normalmente contiene claims.

En GitHub podríamos tener información relacionada con:

  • organization
  • repository
  • workflow
  • branch
  • environment
  • issuer

En Kubernetes podríamos identificar:

  • cluster
  • namespace
  • service account
  • issuer
  • subject

Estos atributos pueden convertirse en contexto utilizado por OCI IAM para tomar decisiones de autorización.

Ya no solamente preguntamos:

¿Quién eres?

También podemos preguntar:

¿Desde qué repositorio vienes?
¿Desde qué workflow?
¿Desde qué namespace?
¿Qué ServiceAccount estás utilizando?
¿En qué ambiente estás ejecutándote?

Esto permite construir controles mucho más específicos.

Caso 1: GitHub Actions → OCI

Uno de los escenarios más interesantes es GitHub Actions.

Supongamos que tenemos:

Repository:
company/payment-api

Workflow:
deploy-production.yml

Branch:
main

El objetivo es permitir que únicamente ese workflow pueda acceder a determinados recursos de OCI.

El flujo conceptual sería:

`plaintext

Developer


GitHub Repository


GitHub Actions

│ OIDC token

OCI Workload Identity Federation

│ temporary OCI identity

OCI IAM


Object Storage / Functions / Other OCI services

`

GitHub puede emitir un token OIDC firmado que representa el workflow.

OCI puede validar elementos como:

Issuer
Repository
Workflow
Branch
Environment

y posteriormente otorgar una identidad temporal.

¿Qué cambia desde el punto de vista de seguridad?

Modelo tradicional:

plaintext
GitHub Actions


GitHub Secret


OCI Private API Key


OCI User


OCI Resource

`

Modelo federado:

`plaintext

GitHub Actions


GitHub OIDC Token


OCI WIF


Temporary RPST


OCI IAM


OCI Resource
`

La diferencia parece pequeña visualmente.

Arquitectónicamente es enorme.

Comparación

  • Modelo con credenciales permanentes Workload Identity Federation
  • API Key almacenada Token temporal
  • Usuario técnico OCI Identidad del workload
  • Rotación necesaria Sesión efímera
  • Secrets permanentes Identidad emitida por plataforma
  • Mayor superficie operacional Menor administración de credenciales
  • Identidad generalmente estática Contexto mediante claims
  • Difícil identificar cada ejecución Mayor granularidad potencial Caso 2: Kubernetes

Kubernetes presenta otro escenario ideal.

Normalmente nuestras aplicaciones utilizan ServiceAccounts.

Por ejemplo:

apiVersion: v1
kind: ServiceAccount
metadata:
name: payment-api
namespace: production

Tenemos entonces una identidad lógica:

Cluster:
prod-cluster

Namespace:
production

ServiceAccount:
payment-api

En lugar de entregar una API key OCI al pod:

`plaintext
Pod

Kubernetes Secret

OCI API Key

OCI

podemos construir:

Pod

ServiceAccount Token

OCI Identity Federation

Temporary Identity

OCI IAM

OCI Resource
`

Esto permite vincular autorización con el contexto real del workload.

Oracle también soporta identidades de workload directamente en OKE para proporcionar acceso detallado desde workloads Kubernetes a otros recursos OCI. En esos escenarios, la identidad está determinada por la combinación de cluster, namespace y ServiceAccount.

Ejemplo: aplicación Kubernetes accediendo a Object Storage

Imaginemos:

Application:
invoice-service

Namespace:
finance

ServiceAccount:
invoice-reader

Su único requerimiento es consultar archivos de un bucket:

finance-invoices

El principio de mínimo privilegio nos dice que deberíamos evitar:

Allow everything everywhere

y diseñar una autorización limitada exclusivamente al workload y recurso requerido.

Conceptualmente:

plaintext
invoice-service


ServiceAccount
invoice-reader


Workload Identity


OCI IAM Policy


finance-invoices bucket

La identidad queda relacionada con la aplicación y no con el worker node completo.

Esto mejora significativamente la granularidad.

GitHub Actions también puede utilizar OIDC con OKE

Oracle dispone además de un patrón específico para permitir que GitHub Actions acceda a clusters OKE mediante OpenID Connect.

El objetivo es eliminar la necesidad de credenciales de larga duración dentro del pipeline CI/CD.

En este escenario:

plaintext
GitHub Actions

│ OIDC

OKE


Kubernetes RBAC

Oracle documenta la posibilidad de habilitar GitHub como issuer OIDC y utilizar RBAC para limitar las operaciones permitidas dentro del cluster.

Esto es especialmente interesante porque podemos aplicar controles tanto en:

Cloud IAM

como en:

Kubernetes RBAC
Caso 3: agentes de Inteligencia Artificial

Aquí comienza una discusión todavía más interesante.

Los agentes de IA están dejando de ser solamente interfaces conversacionales.

Actualmente pueden ejecutar acciones como:

  • Consultar datos
  • Leer archivos
  • Invocar APIs
  • Ejecutar funciones
  • Analizar logs
  • Crear tickets
  • Desplegar aplicaciones
  • Modificar infraestructura

En otras palabras:

Un agente también es un workload.

Supongamos que tenemos un agente que debe analizar archivos guardados en OCI Object Storage.

Una implementación rápida podría ser:

`plaintext

AI Agent


API Key guardada como secret


Object Storage
`

Funciona.

Pero ahora el agente posee una credencial permanente.

Una arquitectura más interesante sería:

Oracle incluye explícitamente AI agents entre los workloads que pueden beneficiarse de este patrón cuando la plataforma de origen puede emitir una identidad verificable.

Por qué esto es especialmente importante para agentes autónomos

Un agente autónomo puede ejecutarse:

24x7

Puede iniciar cientos de tareas.

Puede interactuar con múltiples sistemas.

Por eso deberíamos evitar diseñar algo así:

`plaintext

AI Agent
+
Powerful permanent credential
+
Broad permissions

La alternativa debería acercarse a:

Verified workload identity
+
Short-lived session
+
Least privilege
+
Context-based authorization
`

La diferencia fundamental es que estamos desplazando el modelo desde:

administrar secretos

hacia:

  • administrar confianza e identidad.
  • Autenticación y autorización no son lo mismo
  • Este punto es fundamental.

Workload Identity Federation responde principalmente a:

¿Quién está realizando la solicitud?

Pero después necesitamos responder:

¿Qué puede hacer?

La respuesta sigue siendo IAM.

Un workload autenticado correctamente no debería recibir automáticamente acceso total.

El flujo correcto es:

plaintext
Authentication


Identity verified


Authorization


IAM Policy evaluation


Resource access

Claims + IAM = autorización contextual

Supongamos que un token contiene:

repository = company/payment-api
branch = main
environment = production

Podemos imaginar una política donde solamente determinadas combinaciones sean aceptadas.

Por ejemplo:

plaintext
Repositorio correcto
+
Workflow correcto
+
Environment production
+
Recurso específico

El objetivo es evitar un patrón como:

plaintext
Any repository

Any workflow

Production resources

La identidad por sí sola no proporciona seguridad.

La seguridad aparece cuando diseñamos correctamente la relación entre:

Issuer
Claims
Trust
IAM Policies
Resource Scope
ABAC: Attribute-Based Access Control

Este modelo también abre una puerta interesante hacia Attribute-Based Access Control (ABAC).

En lugar de mantener cientos de usuarios técnicos:

service-user-001
service-user-002
service-user-003
service-user-004
...

podemos utilizar atributos provenientes de la identidad.

Ejemplo:

Repository
Namespace
ServiceAccount
Environment
Issuer
Workflow

y combinarlos con atributos del recurso.

Conceptualmente:

plaintext
Principal Attributes
+
Resource Attributes
+
IAM Policy
=
Authorization Decision

Oracle señala que ciertos claims provenientes del workload pueden propagarse y utilizarse en decisiones de IAM basadas en atributos.

Una arquitectura multicloud

Workload Identity Federation resulta particularmente interesante cuando OCI forma parte de una arquitectura multicloud.

Por ejemplo:

El mismo principio puede aplicarse a workloads provenientes de:

  • AWS
  • Azure
  • Google Cloud
  • GitHub
  • Kubernetes

Oracle describe precisamente este modelo de confianza para workloads procedentes de otras plataformas cloud.

Beneficios arquitectónicos
Menos secretos

Menos API keys almacenadas implica menos elementos que:

  • proteger;
  • rotar;
  • distribuir;
  • revocar;
  • auditar.
  • Sesiones temporales Las credenciales efímeras reducen la ventana de exposición frente a una credencial permanente.

Identidad del workload

Podemos autorizar a:

payment-api

en lugar de autorizar genéricamente al:

worker-node-01
Mejor separación de responsabilidades

Un workload puede tener únicamente los permisos que necesita.

Ejemplo:

`plaintext
CI/CD workflow
→ Deploy Function

Application
→ Read Object Storage

AI Agent
→ Read specific bucket

Monitoring Agent
→ Read metrics

Cada identidad tiene un propósito.
`

Consideraciones de seguridad

Workload Identity Federation elimina algunas responsabilidades, pero no elimina la necesidad de diseñar seguridad.

Hay varios puntos que considero esenciales.

  1. Validar cuidadosamente el issuer

OCI debe confiar solamente en proveedores de identidad conocidos y controlados.

  1. Restringir los claims

No sería suficiente confiar únicamente en:

issuer = GitHub

Eso sería demasiado amplio.

Tiene más sentido evaluar:

organization
repository
workflow
branch
environment

  1. Aplicar mínimo privilegio

La federación no justifica políticas como:

manage all-resources in tenancy

Cada workload debería recibir únicamente las acciones que realmente necesita.

  1. Separar DEV, QA y PROD

Una estrategia saludable sería:

`plaintext
DEV identity

DEV resources

QA identity

QA resources

PROD identity

PROD resources
`

No utilizar la misma autorización para todos los ambientes.

  1. Auditar

La autenticación machine-to-machine también debe formar parte de nuestra estrategia de observabilidad y auditoría.

Deberíamos ser capaces de responder preguntas como:

¿Qué workload accedió?
¿Cuándo?
¿Qué recurso utilizó?
¿Qué operación ejecutó?
¿Qué política permitió la operación?

En OKE, Oracle indica que las solicitudes realizadas mediante workload identities pueden rastrearse mediante OCI Audit.

¿Reemplaza completamente las API Keys?

No necesariamente.

Existen aplicaciones legacy, integraciones antiguas y escenarios particulares donde todavía pueden utilizarse credenciales tradicionales.

Pero para nuevos diseños de:

CI/CD
Kubernetes
Multicloud
Automation
AI Agents
Cloud-native workloads

vale la pena preguntarnos primero:

¿Realmente necesito crear otra credencial permanente?

Muchas veces la respuesta será no.

Mi regla de diseño

Cuando diseño acceso machine-to-machine intento seguir este orden:

  1. ¿Existe una identidad nativa del workload?

  2. ¿Podemos establecer confianza con esa identidad?

  3. ¿Podemos utilizar una credencial temporal?

  4. ¿Podemos limitar permisos mediante claims?

  5. ¿Podemos auditar completamente el acceso?

  6. Solo si lo anterior no es posible:
    considerar una credencial permanente.

Este pequeño cambio de mentalidad reduce considerablemente la dependencia de secretos.

Conclusión

Durante años, muchas arquitecturas cloud han utilizado el mismo patrón:

Para mí, la parte más interesante no es solamente eliminar API keys.

Es cambiar la unidad de confianza.

Ya no confiamos simplemente en una credencial que alguien posee.

Podemos confiar en la identidad verificable del workload que está ejecutando la operación.

En arquitecturas donde cada vez tenemos más pipelines, contenedores, automatizaciones y agentes de IA interactuando entre sí, ese cambio puede convertirse en una pieza importante para construir plataformas cloud más seguras y operables.

Autor: Jorge Luis Rodriguez Noriega
Tema: Oracle Cloud Infrastructure, IAM, DevOps, Kubernetes, AI Security

oracle #oci #cloud #devops #kubernetes #githubactions #iam #security #ai #cloudsecurity

Top comments (0)