Ejemplos de registros para la federación de Workload Identity

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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 el token de un proveedor de identidad por un token federado

Después de configurar tus grupos de trabajadores y proveedores de identidad, puedes crear un token para tu proveedor de identidad 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 del proveedor de identidad.
    • Para proveedores de identidad de OIDC, este campo contiene el valor del sub o el asunto de la reclamación de OIDC.
    • Para los proveedores de identidad 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 llamar a las API de Google Cloud con el token federado

Después de intercambiar el token del proveedor de identidad por un token federado, puedes usar el token federado para llamar a las API 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 proveedores de identidad, los usuarios pueden acceder a Google Cloud mediante el inicio de sesión único.

Registros para acceso exitoso

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?