Registros de auditoría 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 Workload Identity. Con la federación de Workload Identity, 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.

Intercambia el token del proveedor de identidad por un token federado

Después de configurar tus grupos de Workload Identity y sus proveedores de identidad, puedes crear un token para tu proveedor de identidad y, luego, intercambiarlo por un token federado.

IAM puede generar registros de auditoría cuando los miembros 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 administración de identidades y accesos (IAM)
  • API del servicio de token de seguridad

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 un miembro 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.
    • 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 proveedores de identidad 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 Workload Identity 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.v1beta.SecurityTokenService.ExchangeToken",
    "resourceName": "projects/1234567890123/locations/global/workloadIdentityPools/azure-pool/providers/azure",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1beta.ExchangeTokenRequest",
      "grantType": "urn:ietf:params:oauth:grant-type:token-exchange"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

Crea credenciales de corta duración para una cuenta de servicio

Después de intercambiar el token del proveedor de identidad 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 un miembro 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"
  }
}

Autentica con credenciales para la cuenta de servicio que se usará

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 proveedor de identidad:

{
  "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?