Registros de ejemplo para la federación de identidades para cargas de trabajo

En esta página, se muestran ejemplos de los registros de auditoría que se generan cuando usas la federación de identidades para cargas de trabajo. Con la federación de identidades para cargas de trabajo, puedes permitir que una carga de trabajo local o de múltiples nubes acceda 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.

Registros para intercambiar un token de IdP por un token federado

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

IAM puede generar registros de auditoría cuando los principales intercambian un token. A fin de recibir registros de auditoría para todos los pasos del proceso de intercambio de tokens, debes habilitar los registros de auditoría para la actividad de acceso a los datos de las siguientes API:

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

Después de habilitar los registros de auditoría 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.
    • En Amazon Web Services (AWS), este campo contiene el nombre del recurso de Amazon (ARN) del principal que autenticaste.
    • En Microsoft Azure, este campo contiene el ID de objeto de la identidad administrada que especificaste como el sujeto del token de Azure.
    • Para otros IdP de OIDC, este campo contiene el valor del sub o el asunto de la reclamación de OIDC.
  • protoPayload.metadata.mapped_principal: Es el asunto del token, con la sintaxis de IAM para identificar el principal:

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName: Es el proveedor de grupos de identidades para cargas de trabajo 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 intercambió un token de Microsoft Azure por un token federado:

{
  "logName": "projects/my-project/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/projects/1234567890123/locations/global/workloadIdentityPools/azure-pool/subject/a1234bcd-5678-9012-efa3-4b5cd678ef9a"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeToken",
    "resourceName": "projects/1234567890123/locations/global/workloadIdentityPools/azure-pool/providers/azure",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeTokenRequest",
      "grantType": "urn:ietf:params:oauth:grant-type:token-exchange"
    }
  },
  "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 para cargas de trabajo, 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/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_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 para cargas de trabajo.
  • resourceName: el nombre del recurso de la clave del proveedor de grupos de identidades para cargas de trabajo que se usó para desencriptar la aserción de SAML encriptada. Este campo solo está presente si la federación de identidades para cargas de trabajo recibe una respuesta de SAML encriptada de tu IdP.

Registros para crear credenciales de corta duración para una cuenta de servicio

Después de intercambiar el token del IdP por un token federado, puedes usar el token federado a fin de crear credenciales de corta duración para una cuenta de servicio. Todos los servicios de Google te permiten autenticarte con estas credenciales de corta duración.

Después de habilitar los registros de auditoría de IAM para la actividad de acceso a los datos, IAM genera una entrada de registro de auditoría cada vez que una principal genera credenciales de corta duración para una cuenta de servicio. En la entrada de registro, se incluyen los siguientes campos:

  • protoPayload.authenticationInfo.principalSubject: Es el sujeto del token federado.
  • resource.labels.email_id: La cuenta de servicio para la que se generaron las credenciales de corta duración.

En el siguiente ejemplo, se muestra una entrada de registro de auditoría para una solicitud a fin de generar un token de acceso de OAuth 2.0 de corta duración para una cuenta de servicio. En este ejemplo, la solicitud se autenticó con credenciales federadas y las credenciales de corta duración se crearon para la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com:

{
  "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/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/012345678901"
    },
    "methodName": "GenerateAccessToken",
    "request": {
      "@type": "type.googleapis.com/google.iam.credentials.v1.GenerateAccessTokenRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901"
  },
  "resource": {
    "labels": {
      "email_id": "my-service-account@my-project.iam.gserviceaccount.com",
      "project_id": "my-project",
      "unique_id": "123456789012345678901"
    },
    "type": "service_account"
  }
}

Registros para autenticar con credenciales para la cuenta de servicio de la que se usó la identidad

Después de crear credenciales de corta duración para una cuenta de servicio, puedes usar las credenciales con el fin de actuar en nombre de la cuenta de servicio cuando llames a las API de Google Cloud.

Puede que algunos de los métodos que llames generen registros de auditoría. En general, en estas entradas de registro, se muestran las siguientes identidades:

  • La cuenta de servicio que suplantan las credenciales de corta duración
  • La identidad que creó las credenciales de corta duración

Por ejemplo, supongamos que el usuario jamie@example.com crea un token federado para el asunto principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com y, luego, usa el token federado a fin de crear credenciales de corta duración para la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com.

Luego, el usuario crea un tema nuevo de Pub/Sub mediante las credenciales de corta duración para actuar en nombre de la cuenta de servicio. Pub/Sub genera una entrada de registro que identifica la cuenta de servicio, además del asunto del token del IdP:

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "my-service-account@my-project.iam.gserviceaccount.com",
      "serviceAccountDelegationInfo": [
        {
          "principalSubject": "principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/012345678901"
        }
      ]
    },
    "methodName": "google.pubsub.v1.Publisher.CreateTopic",
    "request": {
      "@type": "type.googleapis.com/google.pubsub.v1.Topic",
      "name": "projects/my-project/topics/my-topic"
    },
    "resourceName": "projects/my-project/topics/my-topic"
  },
  "resource": {
    "type": "pubsub_topic"
  }
}

¿Qué sigue?