Log di esempio per la federazione delle identità della forza lavoro

Questa pagina mostra esempi dei log di controllo generati quando utilizzi la federazione delle identità della forza lavoro. Con la federazione delle identità della forza lavoro, puoi consentire alle identità di terze parti di accedere alle risorseGoogle Cloud senza utilizzare una chiave del account di servizio.

Per saperne di più sull'attivazione e la visualizzazione dei log di controllo, consulta Audit logging IAM.

IAM può generare audit log quando crei e gestisci i pool di workforce. Per attivare i log di controllo durante la gestione dei pool di forza lavoro, devi attivare i log di controllo per l'attività di accesso ai dati per la seguente API:

  • API Identity and Access Management (IAM) (attiva il tipo di log "Admin Read")

Per configurare ulteriormente gli audit log per il processo di scambio di token o l'accesso alla console (federato), devi anche attivare gli audit log per l'attività di accesso ai dati per la seguente API:Google Cloud

  • API Security Token Service (attiva il tipo di log "Admin Read")

Log per la creazione di un pool di forza lavoro

Il seguente esempio mostra una voce di log per la creazione di un pool di forza lavoro. In questo esempio, l'utente sam@example.com ha creato un pool forza lavoro con l'ID my-pool nell'organizzazione con l'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"
  }
}

Log per lo scambio di un token IdP con un token federato

Dopo aver configurato il pool di identità per la forza lavoro e il provider del pool di identità per la forza lavoro, puoi creare un token per il provider di identità (IdP) e scambiarlo con un token federato.

Dopo aver abilitato Cloud Audit Logs per l'attività di accesso ai dati, IAM genera una voce di audit log ogni volta che un'entità scambia un token. La voce di log include i seguenti campi:

  • protoPayload.authenticationInfo.principalSubject: L'oggetto del token IdP.
    • Per i provider di identità OIDC, questo campo contiene il valore dell'attestazione sub o soggetto del token OIDC.
    • Per gli IdP SAML, questo campo contiene il valore dell'attributo secondario NameID dell'attributo Subject nell'asserzione SAML.
  • protoPayload.metadata.mapped_principal: il soggetto del token, utilizzando la sintassi IAM per identificare l'entità:

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: il provider del pool di forza lavoro a cui è associato il token.

Scambio di token riuscito

L'esempio seguente mostra una voce di log di controllo per una richiesta di scambio di un token. In questo esempio, un token OIDC viene scambiato con un token federato:

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

Scambio di token non riuscito: troppi gruppi

Il seguente log di esempio descrive uno scambio di token non riuscito perché il numero di rivendicazioni di gruppo ha superato il massimo di 400.

Per registrare gli attributi ricevuti da Federazione delle identità per la forza lavoro, devi attivare la registrazione degli audit dettagliata quando crei il provider del pool di identità per la forza lavoro.

Per scoprire come risolvere i problemi relativi agli errori di mappatura degli attributi con la registrazione di controllo dettagliata, consulta Errori generali di mappatura degli attributi.

Nell'esempio seguente, mappedAttributes contiene gli attributi ricevuti dall'IdP, incluso un elenco di gruppi. In questo caso, il numero di gruppi ha superato il limite della federazione delle identità della forza lavoro.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 3,
      "message": "The current count of 800 mapped attribute google.groups exceeds the 400 count limit. Either modify your attribute mapping or the incoming assertion to produce a mapped attribute that is less than 400."
    },
    "authenticationInfo": {
      "principalSubject": "3Kn-kJQal4N-WXVjxMqcOF1tQcCdBliu97lV-2P-Khc"
    },
    "requestMetadata": {
      "callerIp": "2601:647:4680:9140:9d68:88c9:cab9:a908",
      "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
      "requestAttributes": {
        "time": "2025-04-09T18:32:34.979311Z",
        "auth": {}
      },
      "destinationAttributes": {}
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignIn",
    "authorizationInfo": [
      {
        "permission": "sts.identityProviders.checkLogging",
        "granted": false,
        "permissionType": "ADMIN_READ"
      }
    ],
    "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",
      "host": "auth-staging.corp.cloud.google"
    },
    "metadata": {
      "mappedAttributes": {
        "google.subject": "3Nk-kJQal4N-WXVjxMqcOF1tQcCdBliu97lV-2P-Khc",
        "google.providerId": "my-provider-id",
        "google.groups": "[group-claim-1, group-claim-2, ..., group-claim-800]"
      }
    }
  },
  "insertId": "-llnhbmck3a",
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignIn"
    }
  },
  "timestamp": "2025-04-09T18:32:34.208412Z",
  "severity": "ERROR",
  "logName": "organizations/123456789012/logs/cloudaudit.googleapis.com%2Fdata_access",
  "receiveTimestamp": "2025-04-09T18:32:35.059811619Z"
}

Log per le asserzioni SAML firmate e criptate

Questa sezione descrive le voci di log di Cloud Audit Logs che Security Token Service crea quando tenta di verificare le asserzioni SAML firmate o di decriptare le asserzioni criptate inviate dal tuo IdP.

Per la federazione delle identità per la forza lavoro, la voce di log pertinente è simile alla seguente:

"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"
  }
]

Questo output include i seguenti valori:

  • fingerprint: la rappresentazione esadecimale dell'hash SHA-256 del certificato X.509 utilizzato per verificare la firma sulla credenziale SAML. Il certificato X.509 viene estratto dai metadati XML SAML allegati al provider di pool di identità per la forza lavoro.
  • resourceName: il nome della risorsa della chiave del provider di identità della forza lavoro utilizzata per decriptare l'asserzione SAML criptata. Questo campo è presente solo se la federazione di identità riceve una risposta SAML criptata dal tuo IdP.

Log per la chiamata delle API Google Cloud con il token federato

Dopo aver scambiato il token dell'IdP con un token federato, puoi utilizzare il token federato per chiamare le Google Cloud API. Alcuni dei metodi che chiami potrebbero generare audit log.

L'esempio seguente mostra una voce di log di controllo per una richiesta di elencare i bucket Cloud Storage in un progetto utilizzando un token federato.

{
  "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/kalani@altostrat.com"
    },
    "methodName": "storage.buckets.list",
    "serviceName": "storage.googleapis.com",
  },
  "resource": {
    "type": "gcs_bucket"
  }
}

Log per l'accesso alla console Google Cloud (federata)

Dopo aver configurato i pool di identità della forza lavoro e i relativi IdP, gli utenti possono accedere a Google Cloud utilizzando la console (federata).

Log per l'accesso riuscito

Questa sezione fornisce un esempio di voce di Cloud Audit Logs registrata in seguito a un accesso riuscito. In questo esempio, l'utente user@example.com accede utilizzando un provider locations/global/workforcePools/my-pool/providers/my-provider. In questo caso, viene generata la seguente voce di Cloud Audit Logs:

{
  "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 voce Cloud Audit Logs per i provider SAML può contenere anche informazioni sulla chiave di firma nel campo dei metadati.

{
  "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",
      }
    ],
  }
}

Log per l'accesso non riuscito

Questa sezione fornisce un esempio di voce di Cloud Audit Logs registrata in seguito a un accesso non riuscito. In questo esempio, l'utente user@example.com tenta di accedere utilizzando un provider locations/global/workforcePools/my-pool/providers/my-provider, ma l'accesso viene negato perché una condizione dell'attributo non è soddisfatta. In questo caso, viene generata la seguente voce di Cloud Audit Logs:

{
  "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",
    }
  },
}

Log per la disconnessione

Questa sezione fornisce un esempio di voce di Cloud Audit Logs registrata in seguito a un evento di disconnessione. In questo esempio, l'utente user@example.com, che ha eseguito l'accesso utilizzando un provider locations/global/workforcePools/my-pool/providers/my-provider, avvia una disconnessione. In questo caso, viene generata la seguente voce di Cloud Audit Logs:

{
  "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"
    }
  },
}

Log per l'accesso con il flusso OAuth

Dopo aver configurato il pool di identità della forza lavoro e il provider del pool di identità della forza lavoro, puoi utilizzare le risorse Google Cloud utilizzando il flusso OAuth.

Dopo aver attivato Cloud Audit Logs per l'attività di audit log di accesso ai dati, IAM genera una voce di audit log ogni volta che un principal utilizza il flusso OAuth per accedere. La voce di log include i seguenti campi:

  • protoPayload.authenticationInfo.principalSubject: L'oggetto del token IdP.
    • Per i provider di identità OIDC, questo campo contiene il valore dell'attestazione sub o soggetto del token OIDC.
    • Per gli IdP SAML, questo campo contiene il valore dell'attributo secondario NameID dell'attributo Subject nell'asserzione SAML.
  • protoPayload.metadata.mapped_principal: il soggetto del token, utilizzando la sintassi IAM per identificare l'entità:

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: il provider del pool di forza lavoro a cui è associato il token.

L'esempio seguente mostra una voce di log di controllo per una richiesta di scambio di un token. In questo esempio, l'entità è federata utilizzando un provider OIDC:

{
  "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/POOL_ID/subject/IDENTIFIER"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeOauthToken",
    "resourceName": "locations/global/workforcePools/POOL_ID/providers/WORKFORCE_PROVIDER_ID",
    "serviceName": "sts.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeOauthTokenRequest",
      "grantType": "authorization_code",
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

Passaggi successivi