Exemplos de registos para a federação de identidade da força de trabalho

Esta página mostra exemplos dos registos de auditoria gerados quando usa a Workforce Identity Federation. Com a federação de identidades da força de trabalho, pode permitir que identidades de terceiros acedam a Trusted Cloud by S3NS recursos sem usar uma chave de conta de serviço.

Para mais informações sobre como ativar e ver registos de auditoria, consulte o artigo Registo de auditoria da IAM.

A IAM pode gerar registos de auditoria quando cria e gere pools de força de trabalho. Para ativar os registos de auditoria ao gerir pools de força de trabalho, tem de ativar os registos de auditoria para a atividade de acesso a dados para a seguinte API:

  • API Identity and Access Management (IAM) (ative o tipo de registo "Admin Read")

Para configurar ainda mais os registos de auditoria para o processo de troca de tokens ou início de sessão na consola (federado), também tem de ativar os registos de auditoria para a atividade de acesso a dados para a seguinte API:Trusted Cloud

  • API Security Token Service (ative o tipo de registo "Admin Read")

Registos para criar um grupo de trabalhadores

O exemplo seguinte mostra uma entrada de registo para a criação de um conjunto de trabalhadores. Neste exemplo, o utilizador sam@example.com criou um workforce pool com o ID my-pool na organização com o 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"
  }
}

Registos para trocar um token do IdP por um token federado

Depois de configurar o Workload Identity Pool e o fornecedor do Workload Identity Pool, pode criar um token para o seu fornecedor de identidade (IdP) e trocá-lo por um token federado.

Depois de ativar os registos de auditoria do Cloud para a atividade de acesso a dados, a IAM gera uma entrada de registo de auditoria sempre que um principal troca um token. A entrada do registo inclui os seguintes campos:

  • protoPayload.authenticationInfo.principalSubject: O assunto do token do IdP.
    • Para IdPs OIDC, este campo contém o valor da reivindicação sub ou de assunto do token OIDC.
    • Para IdPs SAML, este campo contém o valor do subatributo NameID do atributo Subject na declaração SAML.
  • protoPayload.metadata.mapped_principal: o assunto do token, usando a sintaxe do IAM para identificar o principal:

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: o fornecedor do Workforce Pool ao qual o token está associado.

Troca de tokens bem-sucedida

O exemplo seguinte mostra uma entrada do registo de auditoria para um pedido de troca de um token. Neste exemplo, um token OIDC é trocado por um token federado:

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

Falha na troca de tokens: existem demasiados grupos

O registo de exemplo seguinte descreve uma troca de tokens que falhou porque o número de reivindicações de grupos excedeu o máximo de 400.

Para registar atributos recebidos pela federação de identidade da força de trabalho, tem de ativar o registo de auditoria detalhado quando criar o fornecedor do conjunto de identidades da força de trabalho.

Para saber como resolver problemas de mapeamento de atributos com registo de auditoria detalhado, consulte o artigo Erros gerais de mapeamento de atributos.

No exemplo seguinte, o elemento mappedAttributes contém atributos que foram recebidos do IdP, incluindo uma lista de grupos. Neste caso, o número de grupos excedeu o limite da federação de identidade da força de trabalho.

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

Registos de afirmações SAML assinadas e encriptadas

Esta secção descreve as entradas de registo dos registos de auditoria da nuvem que o serviço de tokens de segurança cria quando tenta validar afirmações SAML assinadas ou desencriptar afirmações encriptadas enviadas a partir do seu IdP.

Para a federação de identidade da força de trabalho, a entrada de registo pertinente tem um aspeto semelhante ao seguinte:

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

Esta saída inclui os seguintes valores:

  • fingerprint: a representação hexadecimal do hash SHA-256 do certificado X.509 que foi usado para validar a assinatura na credencial SAML. O certificado X.509 é extraído dos metadados XML SAML anexados ao fornecedor do Workload Identity Pool.
  • resourceName: o nome do recurso da chave do fornecedor do Workload Identity Pool que foi usado para desencriptar a declaração SAML encriptada. Este campo só está presente se a federação de identidades receber uma resposta SAML encriptada do seu IdP.

Registos de chamadas de Trusted Cloud APIs com o token federado

Depois de trocar o token do IdP por um token federado, pode usar o token federado para chamar APIs. Trusted Cloud Alguns dos métodos que chama podem gerar registos de auditoria.

O exemplo seguinte mostra uma entrada do registo de auditoria para um pedido de listagem dos contentores do Cloud Storage num projeto através de um token federado.

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

Registos de início de sessão na Trusted Cloud consola (federado)

Depois de configurar os seus pools de identidades da força de trabalho e os respetivos IdPs, os utilizadores podem iniciar sessão na consola (federada). Trusted Cloud

Registos de inícios de sessão com êxito

Esta secção apresenta um exemplo de uma entrada dos registos de auditoria do Cloud registada como resultado de um início de sessão bem-sucedido. Neste exemplo, o utilizador, user@example.com, inicia sessão através de um fornecedor locations/global/workforcePools/my-pool/providers/my-provider. Neste caso, é gerada a seguinte entrada dos registos de auditoria do Google Cloud:

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

A entrada dos registos de auditoria do Google Cloud para fornecedores SAML também pode conter informações da chave de assinatura no campo de metadados.

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

Registos de inícios de sessão falhados

Esta secção apresenta um exemplo de uma entrada dos registos de auditoria do Cloud registada como resultado de um início de sessão falhado. Neste exemplo, o utilizador user@example.com tenta iniciar sessão através de um fornecedor locations/global/workforcePools/my-pool/providers/my-provider, mas o acesso é recusado porque uma condição de atributo não é cumprida. Neste caso, é gerada a seguinte entrada dos registos de auditoria do Cloud:

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

Registos para terminar sessão

Esta secção apresenta um exemplo de uma entrada dos registos de auditoria do Cloud registada como resultado de um evento de saída. Neste exemplo, o utilizador, user@example.com, que tem sessão iniciada através de um fornecedor locations/global/workforcePools/my-pool/providers/my-provider inicia uma saída. Neste caso, é gerada a seguinte entrada dos registos de auditoria do Google Cloud:

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

Registos para iniciar sessão com o fluxo OAuth

Depois de configurar o Workforce Identity Pool e o fornecedor do Workforce Identity Pool, pode usar Trusted Cloud recursos através do fluxo OAuth.

Depois de ativar os registos de auditoria do Cloud para a atividade dos registos de auditoria de acesso a dados, a IAM gera uma entrada de registo de auditoria sempre que um principal usa o fluxo OAuth para iniciar sessão. A entrada do registo inclui os seguintes campos:

  • protoPayload.authenticationInfo.principalSubject: O assunto do token do IdP.
    • Para IdPs OIDC, este campo contém o valor da reivindicação sub ou de assunto do token OIDC.
    • Para IdPs SAML, este campo contém o valor do subatributo NameID do atributo Subject na declaração SAML.
  • protoPayload.metadata.mapped_principal: o assunto do token, usando a sintaxe do IAM para identificar o principal:

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: o fornecedor do Workforce Pool ao qual o token está associado.

O exemplo seguinte mostra uma entrada do registo de auditoria para um pedido de troca de um token. Neste exemplo, o principal é federado através de um fornecedor 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"
  }
}

O que se segue?