Ejemplos de registros para la federación de Workload Identity

En esta página, se muestran ejemplos de los registros de auditoría que se generan cuando usas la federación de Workforce Identity. Con la federación de Workforce Identity, puedes permitir que las identidades de terceros accedan a los recursos de Google Cloud sin usar una clave de cuenta de servicio.

Para obtener más información sobre cómo habilitar y ver los registros de auditoría, consulta Registros de auditoría de IAM.

IAM puede generar registros de auditoría cuando creas y administras grupos de personal. Para habilitar los registros de auditoría cuando administras grupos de personal, debes habilitar los registros de auditoría para la actividad de acceso a los datos en la siguiente API:

  • API de Identity and Access Management (IAM) (habilita el tipo de registro “Lectura de administración”)

A fin de configurar más los registros de auditoría para el proceso de intercambio de tokens o el acceso a la consola de Google Cloud (federada) también debes habilitar los registros de auditoría para la actividad de acceso a los datos de la siguiente manera: API:

  • API del servicio de token de seguridad (habilita el tipo de registro “Lectura de administración”)

Registros para crear un grupo de trabajadores

En el siguiente ejemplo, se muestra una entrada de registro para crear un grupo de personal. En este ejemplo, el usuario sam@example.com creó un grupo de trabajadores con el ID my-pool en la organización con el ID 123456789012.

{
  "logName": "organizations/123456789012/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "sam@example.com",
    },
    "methodName": "google.iam.admin.v1.WorkforcePools.CreateWorkforcePool",
    "resourceName": "locations/global/workforcePools/my-pool",
    "serviceName": "iam.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.iam.admin.v1.CreateWorkforcePoolRequest",
      "workforcePool": {
        "parent": "organizations/123456789012"
      },
      "workforcePoolId": "my-pool"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

Registros para intercambiar un token de IdP por un token federado

Después de configurar tu grupo de identidades de personal y el proveedor de grupos de identidades de personal, puedes crear un token para tu proveedor de identidad (IdP) y, luego, intercambiarlo por un token federado.

Después de habilitar los Registros de auditoría de Cloud para la actividad de acceso a los datos, IAM genera una entrada de registro de auditoría cada vez que una principal intercambia un token. En la entrada de registro, se incluyen los siguientes campos:

  • protoPayload.authenticationInfo.principalSubject: Es el asunto del token de IdP.
    • Para los IdP de OIDC, este campo contiene el valor del sub o el asunto de la reclamación de OIDC.
    • Para los IdP de SAML, este campo contiene el valor del subatributo NameID del atributo Subject en la aserción de SAML.
  • protoPayload.metadata.mapped_principal: Es el asunto del token, con la sintaxis de IAM para identificar el principal:

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: El proveedor de grupos de personal con el que se asocia el token.

En el siguiente ejemplo, se muestra una entrada de registro de auditoría para una solicitud a fin de intercambiar un token. En este ejemplo, se intercambia un token de OIDC por un token federado:

{
  "logName": "organizations/123456789012/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "b6112abb-5791-4507-adb5-7e8cc306eb2e"
    },
    "metadata": {
      "mapped_principal": "principal://iam.googleapis.com/locations/global/workforcePools/oidc-pool/subject/a1234bcd-5678-9012-efa3-4b5cd678ef9a"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeToken",
    "resourceName": "locations/global/workforcePools/oidc-pool/providers/oidc-provider",
    "serviceName": "sts.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeTokenRequest",
      "audience": "//iam.googleapis.com/locations/global/workforcePools/oidc-pool/providers/oidc-provider",
      "grantType": "urn:ietf:params:oauth:grant-type:token-exchange",
      "requestedTokenType": "urn:ietf:params:oauth:token-type:access_token",
      "subjectTokenType": "urn:ietf:params:oauth:token-type:id_token"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

Registros para aserciones de SAML firmadas y encriptadas

En esta sección, se describen las entradas de registro de auditoría de Cloud que el servicio de tokens de seguridad crea cuando intenta verificar las aserciones de SAML firmadas o desencriptar las aserciones encriptadas que se envían desde tu IdP.

Para la federación de identidades de personal, la entrada de registro pertinente es similar a la siguiente:

"keyInfo": [
  {
    "use": "verify"
    "fingerprint": "3C:B2:47:F8:A5:9A:8A:52:BD:1C:BC:96:B5:45:C1:8D:A7:F1:73:2D"
  },
  {
    "use": "decrypt"
    "resourceName": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_NAME/providers/PROVIDER_NAME/keys/KEY_NAME"
  }
]

En esta salida, se incluyen los siguientes valores:

  • fingerprint: la representación hexadecimal del hash SHA-256 del certificado X.509 que se usó para verificar la firma en la credencial de SAML. El certificado X.509 se extrae de los metadatos XML de SAML adjuntos al proveedor de grupos de identidades de personal.
  • resourceName: el nombre del recurso de la clave del proveedor de grupos de identidades de personal que se usó para desencriptar la aserción de SAML encriptada. Este campo solo está presente si la federación de identidades de personal recibe una respuesta de SAML encriptada de tu IdP.

Registros para llamar a las APIs de Google Cloud con el token federado

Después de intercambiar el token del IdP por un token federado, puedes usar el token federado para llamar a las APIs de Google Cloud. Puede que algunos de los métodos que llames generen registros de auditoría.

En el siguiente ejemplo, se muestra una entrada de registro de auditoría de una solicitud para enumerar los buckets de Cloud Storage en un proyecto mediante un token federado.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "principal://iam.googleapis.com/locations/global/workforcePools/oidc-pool/subject/012345678901"
    },
    "methodName": "storage.buckets.list",
    "serviceName": "storage.googleapis.com",
  },
  "resource": {
    "type": "gcs_bucket"
  }
}

Accede a los registros de la consola de Google Cloud (federada)

Después de configurar tus grupos de identidades de personal y sus IdP, los usuarios pueden acceder a Google Cloud mediante el inicio de sesión único.

Registros para el acceso correcto

En esta sección, se proporciona un ejemplo de una entrada de registros de auditoría de Cloud que se registra como resultado de un acceso exitoso. En este ejemplo, el usuario, user@example.com, accede con un proveedor locations/global/workforcePools/my-pool/providers/my-provider. En este caso, se genera la siguiente entrada de registros de auditoría de Cloud:

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignIn",
    "resourceName": "locations/global/workforcePools/my-pool/providers/my-provider",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignInRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "continueUrl": "https://console.cloud.google",
      "host": "http://auth.cloud.google",
    },
    "metadata": {
       "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignIn",
    }
  },
}

La entrada de registros de auditoría de Cloud para proveedores de SAML también puede contener información de claves de firma en el campo de metadatos.

{
  "metadata": {
    "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    "keyInfo": [
      {
        "use": "verify",
        "fingerprint": "AE:CK:LM:EF:LK:OG:EH:IJ:KN:AL:OM:AD:NO",
      }
    ],
  }
}

Registros de acceso con errores

En esta sección, se proporciona un ejemplo de una entrada de registros de auditoría de Cloud que se registra como resultado de un acceso con errores. En este ejemplo, el usuario user@example.com intenta acceder mediante un proveedor locations/global/workforcePools/my-pool/providers/my-provider, pero se le niega el acceso debido a que no se cumple una condición de atributo. En este caso, se genera la siguiente entrada de registros de auditoría de Cloud:

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "status": {
      "code": 3,
      "message": "The given credential is rejected by the attribute condition.",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignIn",
    "resourceName": "locations/global/workforcePools/my-pool/subject/user@example.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignInRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "host": "http://auth.cloud.google",
    },
    "metadata": {
      "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignIn",
    }
  },
}

Registros para salir

En esta sección, se proporciona un ejemplo de una entrada de registros de auditoría de Cloud que se registra como resultado de un evento de cierre de sesión. En este ejemplo, el usuario user@example.com, que accede con un proveedor locations/global/workforcePools/my-pool/providers/my-provider, inicia un cierre de sesión. En este caso, se genera la siguiente entrada de registros de auditoría de Cloud:

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignOut",
    "resourceName": "locations/global/workforcePools/my-pool/providers/my-provider",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignOutRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "host": "http://auth.cloud.google"
    },
    "metadata": {
      "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignOut"
    }
  },
}

¿Qué sigue?