Soluciona problemas de la federación de identidades para cargas de trabajo

En esta página, se describen las resoluciones para errores comunes de la federación de identidades para cargas de trabajo.

La API deGoogle Cloud no acepta la credencial emitida por SecurityTokenService

Los tokens de acceso que devuelve la API de SecurityTokenService son tokens de acceso federados. Aunque la mayoría de las Google Cloud APIs admiten la federación de identidades, es posible que ciertos métodos de API tengan limitaciones. Para obtener una lista de las limitaciones, consulta Federación de identidades: productos y limitaciones.

Si encuentras el siguiente error, es posible que estés intentando usar un token de acceso federado con un servicio que no los admite.

{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED",
  }
}

Para resolver este error, llama a GenerateAccessToken para intercambiar el token de acceso federado por un token de acceso sin restricciones. Para obtener más información, consulta Obtén credenciales de corta duración con federación de identidades.

Agrega un proveedor de identidad a la lista de entidades permitidas para usarlo con la federación de identidades para cargas de trabajo

Si intentas configurar un proveedor de identidad no permitido como un proveedor de grupo de Workload Identity, verás el siguiente error:

FAILED_PRECONDITION: Precondition check failed.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: "Org Policy violated for value: '{PROVIDER}'."
    subject: orgpolicy:projects/{PROJECT}/locations/global/workloadIdentityPools/{POOL}
    type: constraints/iam.workloadIdentityPoolProviders

A fin de resolver este problema, sigue las instrucciones en Restringe la configuración del proveedor de identidad para incluir en la lista de entidades permitidos el proveedor de identidad que se usará con la federación de identidades para cargas de trabajo.

El JWK de entrada no tiene un formato JSON válido.

Si configuras un proveedor de OIDC y recibes el error Input JWK is not in a valid json format, es posible que sea porque Google Cloudno admite extremos protegidos con certificados autofirmados. Específicamente, los campos x5c y x5t no son compatibles y deben quitarse del JWK de OIDC.

Para resolver problemas con tu JWK, haz lo siguiente:

  1. Edita tu JWK y quita los campos x5c (cadena de certificados X.509) y x5t (huella digital SHA-1 del certificado X.509).

    {
      "kty": "RSA",
      "use": "sig",
      "kid": "example-key-id",
      "alg": "RS256",
      "n": "base64url-modulus",
      "e": "AQAB"
    }
    
  2. Verifica que el formato de los campos restantes de JWK sea el correcto, como se describe en la especificación de OIDC.

  3. Configura el proveedor de OIDC con el JWK actualizado.

Error en la conexión con la entidad emisora de la credencial

Si recibes el siguiente error, podría deberse a que Google Cloud no puede recuperar el documento de metadatos de OIDC de tu IdP o el JWKS:

{
  "error": "invalid_grant",
  "error_description":"Error connecting to the given credential's issuer."
 }

Por lo general, este error ocurre porque los extremos no están configurados para ser accesibles desde la Internet pública. Para resolver este error, verifica que el extremo de OIDC esté disponible de forma pública y que cumpla con la especificación de OIDC. Para obtener más información, consulta Prepara el proveedor de identidad externo.

Si sigues recibiendo el error, verifica que la entidad emisora del token, la reclamación iss en el token, sea correcta.

La solicitud de AWS proporcionada no contiene todos los encabezados obligatorios.

Si recibes el siguiente error cuando solicitas un token de la API de SecurityTokenService, es porque el campo headers de tu token de GetCallerIdentity de AWS no incluye un encabezado obligatorio o incluye encabezados no admitidos:

{
  "error": "invalid_grant",
  "error_description": "The given AWS request doesn't contain all the required headers."
}

El campo headers de un token GetCallerIdentity debe incluir solo los siguientes encabezados de solicitud HTTP:

  • Authorization: La firma de la solicitud.
  • host: Es el nombre de host del campo url; por ejemplo, sts.amazonaws.com.
  • x-amz-date: La hora a la que enviarás la solicitud, con el formato de una cadena simple ISO 8601.
  • x-goog-cloud-target-resource: Es el nombre completo del recurso del proveedor de grupos de identidades para cargas de trabajo.
  • x-amz-security-token: Es el token de sesión. Solo es necesario si usas credenciales de seguridad temporales.

Este error también se produce si tu firmante de la versión 4 de la firma incluye encabezados adicionales, como x-amz-content-sha256, en la solicitud firmada. Para resolver este problema, asegúrate de que tu solicitud GetCallerIdentity tenga un cuerpo vacío y de que tanto el campo headers como el campo SignedHeaders de la solicitud firmada incluyan solo los encabezados admitidos. Para obtener más información, consulta Autentica una carga de trabajo con la API de REST.

El reclamo google.subject asignado supera el límite de 127 bytes

Si recibes el siguiente error, se debe a que las credenciales entrantes que recibe la API de SecurityTokenService generan un reclamo de google.subject que supera el límite de caracteres:

{
  "error": "invalid_request",
  "error_description":"The size of mapped attribute google.subject exceeds the 127 bytes limit. Either modify your attribute mapping or the incoming assertion to produce a mapped attribute that is less than 127 bytes."
 }

Para resolver este problema, usa la función extract para quitar los caracteres innecesarios y extraer un identificador de asunto único de un reclamo más largo, por ejemplo:

google.subject=assertion.sub.extract('/users/{sub_claim}')

Error 429, Demasiadas solicitudes

Si recibes el error 429 Too Many Requests cuando solicitas un token a la API de SecurityTokenService, significa que tu proyecto Google Cloud superó el límite de cuota de frecuencia para la API.

El error incluye un mensaje similar al siguiente:

{
  "error": "quota_exceeded",
  "error_description":"The request was throttled due to rate limit: sts.googleapis.com/requests. Please retry after a few seconds."
 }

Para resolver este problema, identifica el nombre de la métrica sts.googleapis.com/requests que se proporciona en el mensaje de error, localiza el nombre de la métrica correspondiente en la página Cuota de IAM, confirma que el porcentaje de uso supera la cuota y, luego, solicita un aumento de cuota.