Log di esempio per la federazione delle identità per i carichi di lavoro

Questa pagina mostra esempi di audit log generati quando utilizzi la federazione delle identità per i carichi di lavoro. Con la federazione delle identità per i carichi di lavoro, puoi consentire a un carico di lavoro on-premise o multi-cloud di accedere alle risorse Google Cloud senza utilizzare una chiave dell'account di servizio.

Per ulteriori informazioni sull'abilitazione e la visualizzazione degli audit log, consulta Audit logging di IAM.

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

Dopo aver configurato i pool di identità per i carichi di lavoro e il provider di identità (IdP), puoi creare un token per l'IdP e scambiarlo con un token federato.

IAM può generare audit log quando le entità scambiano un token. Per ricevere gli audit log per tutte le fasi del processo di scambio di token, devi abilitare gli audit log per l'attività di accesso ai dati per le seguenti API:

  • API Identity and Access Management (IAM) (attiva tipo di log "Lettura amministratore")
  • API Security Token Service (abilita il tipo di log "Admin Read")

Dopo che hai abilitato gli audit log 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.
    • In Amazon Web Services (AWS), questo campo contiene l'Amazon Resource Name (ARN) dell'entità che hai autenticato.
    • In Microsoft Azure, questo campo contiene l'ID oggetto dell'identità gestita specificata come oggetto del token Azure.
    • Per altri IdP OIDC, questo campo contiene il valore della rivendicazione sub, o soggetto, del token OIDC.
  • protoPayload.metadata.mapped_principal: l'oggetto del token, utilizzando la sintassi IAM per identificare l'entità:

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName: il provider del pool di identità per i carichi di lavoro a cui è associato il token.

L'esempio seguente mostra una voce di audit log relativa a una richiesta di scambio di un token. In questo esempio, un token di Microsoft Azure è stato scambiato con un token federato:

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

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 i carichi di lavoro, la voce di log pertinente sembra 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/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_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 collegati al provider del pool di identità per i carichi di lavoro.
  • resourceName: il nome della risorsa della chiave del provider del pool di identità dei carichi di lavoro utilizzata per decriptare l'asserzione SAML criptata. Questo campo è presente solo se la federazione delle identità per i carichi di lavoro riceve una risposta SAML criptata dal tuo IdP.

Log per la creazione di credenziali di breve durata per un account di servizio

Dopo aver scambiato il token IdP con un token federato, puoi utilizzarlo per creare credenziali di breve durata per un account di servizio. Tutti i servizi Google ti consentono di autenticarti con queste credenziali di breve durata.

Dopo aver abilitato gli audit log IAM per l'attività di accesso ai dati, IAM genera una voce di audit log ogni volta che un'entità genera credenziali di breve durata per un account di servizio. La voce di log include i seguenti campi:

  • protoPayload.authenticationInfo.principalSubject: l'oggetto del token federato.
  • resource.labels.email_id: l'account di servizio per cui sono state generate le credenziali di breve durata.

L'esempio seguente mostra una voce dell'audit log relativa a una richiesta di generazione di un token di accesso OAuth 2.0 di breve durata per un account di servizio. In questo esempio, la richiesta è stata autenticata con credenziali federate e sono state create le credenziali di breve durata per l'account di servizio 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"
  }
}

Log per l'autenticazione con le credenziali dell'account di servizio rappresentato

Dopo aver creato credenziali di breve durata per un account di servizio, puoi utilizzare le credenziali per impersonare l'account di servizio quando chiami le API Google Cloud.

Alcuni dei metodi chiamati potrebbero generare audit log. In generale, queste voci di log mostrano le seguenti identità:

  • L'account di servizio utilizzato dalle credenziali di breve durata
  • L'identità che ha creato le credenziali di breve durata

Ad esempio, supponiamo che l'utente jamie@example.com crei un token federato per l'oggetto principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com, quindi utilizzi il token federato per creare credenziali di breve durata per l'account di servizio my-service-account@my-project.iam.gserviceaccount.com.

L'utente crea quindi un nuovo argomento Pub/Sub, utilizzando le credenziali di breve durata per impersonare l'account di servizio. Pub/Sub genera una voce di log che identifica l'account di servizio e l'oggetto del token dell'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"
  }
}

Passaggi successivi