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

Questa pagina mostra esempi di log di controllo generati quando utilizzi Workforce Identity Federation. Con la federazione delle identità della forza lavoro, puoi consentire alle identità di terze parti di accedere alle risorse Google Cloud senza utilizzare una chiave dell'account di servizio.

Per ulteriori informazioni su come attivare e visualizzare i log di controllo, consulta Log di controllo IAM.

IAM può generare log di controllo quando crei e gestisci i pool di personale. Per attivare i log di controllo durante la gestione dei pool di personale, 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 "Lettura amministratore")

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

  • API Security Token Service (attiva il tipo di log "Lettura amministratore")

Log per la creazione di un pool di forza lavoro

L'esempio seguente mostra una voce di log per la creazione di un pool di risorse umane. 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 relativo fornitore, puoi creare un token per il tuo provider di identità (IdP) e scambiarlo con un token federato.

Dopo aver attivato 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 del log include i seguenti campi:

  • protoPayload.authenticationInfo.principalSubject: l'oggetto del token IdP.
    • Per le IdP OIDC, questo campo contiene il valore dell'attributo 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: l'oggetto del token, che utilizza 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, 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"
  }
}

Log per le asserzioni SAML firmate e criptate

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

Per la federazione delle identità della forza lavoro, la voce del 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 della credenziale SAML. Il certificato X.509 viene estratto dai metadati XML SAML allegati al provider del pool di identità per la forza lavoro.
  • resourceName: il nome della risorsa della chiave del provider del pool di identità della forza lavoro utilizzata per decriptare l'affermazione SAML criptata. Questo campo è presente solo se la federazione delle identità riceve una risposta SAML criptata dal tuo IdP.

Log per le chiamate alle 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 API Google Cloud. Alcuni dei metodi che chiami potrebbero generare log di controllo.

L'esempio seguente mostra una voce di log di controllo per una richiesta di elenco dei bucket Cloud Storage in un progetto che utilizza 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/012345678901"
    },
    "methodName": "storage.buckets.list",
    "serviceName": "storage.googleapis.com",
  },
  "resource": {
    "type": "gcs_bucket"
  }
}

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

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 come risultato di un accesso riuscito. In questo esempio, l'utente user@example.com accede utilizzando un fornitore 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 dei log di controllo di Cloud per i provider SAML può contenere inoltre 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 accessi non riusciti

Questa sezione fornisce un esempio di voce di Cloud Audit Logs registrata come risultato di un accesso non riuscito. In questo esempio, l'utente user@example.com tenta di accedere utilizzando un fornitorelocations/global/workforcePools/my-pool/providers/my-provider, ma gli viene negato l'accesso a causa della mancata soddisfazione di una condizione dell'attributo. 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 come risultato di un evento di disconnessione. In questo esempio, l'utente user@example.com, che ha eseguito l'accesso utilizzando un fornitore locations/global/workforcePools/my-pool/providers/my-provider, avvia un logout. 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à per la forza lavoro e il relativo provider, puoi utilizzare le risorse Google Cloud utilizzando il flusso OAuth.

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

  • protoPayload.authenticationInfo.principalSubject: l'oggetto del token IdP.
    • Per le IdP OIDC, questo campo contiene il valore dell'attributo 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: l'oggetto del token, che utilizza 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, il principale è federato 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/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