Registros de exemplo para a federação de identidade da carga de trabalho

Nesta página, mostramos exemplos dos registros de auditoria gerados quando você usa a federação de identidade da carga de trabalho. Com a federação de identidade de carga de trabalho, é possível permitir que uma carga de trabalho no local ou em várias nuvens acesse os recursos do Google Cloud sem usar uma chave de conta de serviço.

Para mais informações sobre como ativar e visualizar registros de auditoria, consulte Geração de registros de auditoria do IAM.

Registros para a troca de um token do IdP por um token federado

Depois de configurar pools de identidade da carga de trabalho e o provedor de identidade (IdP), crie um token para o IdP e troque-o por um token federado.

O IAM pode gerar registros de auditoria quando os principais trocam um token. Para receber registros de auditoria de todas as etapas do processo de troca de token, é preciso ativar os registros de auditoria para a atividade de acesso a dados para as seguintes APIs:

  • API Identity and Access Management (IAM) (ative o tipo de registro "Admin Read")
  • API Security Token Service (ative o tipo de registro "Leitura de administradores")

Depois que você ativa os registros de auditoria para a atividade de acesso a dados, o IAM gera uma entrada de registro de auditoria sempre que um principal troca um token. A entrada de registro inclui os seguintes campos:

  • protoPayload.authenticationInfo.principalSubject: o assunto do token do IdP.
    • No Amazon Web Services (AWS), este campo contém o Amazon Resource Name (ARN) do principal que você autenticou.
    • No Microsoft Azure, esse campo contém o ID de objeto da identidade gerenciada que você especificou como o assunto do token do Azure.
    • Para outros IdPs OIDC, esse campo contém o valor da declaração sub ou assunto do token OIDC.
  • protoPayload.metadata.mapped_principal: o assunto do token, usando a sintaxe do IAM para identificar o principal:

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName: o provedor de pool de Identidade da carga de trabalho ao qual o token está associado.

O exemplo a seguir mostra uma entrada de registro de auditoria para uma solicitação para trocar um token. Neste exemplo, um token do Microsoft Azure foi trocado por um 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.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"
  }
}

Registros de declarações SAML assinadas e criptografadas

Nesta seção, descrevemos as entradas dos Registros de auditoria do Cloud que o Security Token Service cria quando tenta verificar as declarações SAML assinadas ou descriptografar declarações criptografadas enviadas do IdP.

Para a federação de identidade da carga de trabalho, a entrada de registro pertinente é semelhante a esta:

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

Esta saída inclui os seguintes valores:

  • fingerprint: a representação hexadecimal do hash SHA-256 do certificado X.509 usado para verificar a assinatura na credencial SAML. O certificado X.509 é extraído dos metadados XML SAML anexados ao provedor de pool de identidade da carga de trabalho.
  • resourceName: o nome do recurso da chave do provedor de pool de identidade da carga de trabalho usada para descriptografar a declaração SAML criptografada. Esse campo só estará presente se a federação de identidade da carga de trabalho receber uma resposta SAML criptografada do IdP.

Registros para criar credenciais de curta duração para uma conta de serviço

Depois de trocar o token do IdP por um token federado, use-o para criar credenciais de curta duração para uma conta de serviço. Todos os serviços do Google permitem que você faça a autenticação com essas credenciais de curta duração.

Depois que você ativa os registros de auditoria do IAM para atividade de acesso a dados, o IAM gera uma entrada de registro de auditoria sempre que um principal gera credenciais de curta duração para uma conta de serviço. A entrada de registro inclui os seguintes campos:

  • protoPayload.authenticationInfo.principalSubject: o assunto do token federado.
  • resource.labels.email_id: a conta de serviço para a qual foram geradas credenciais de curta duração.

Veja no exemplo a seguir uma entrada de registro de auditoria de uma solicitação para gerar um token de acesso OAuth 2.0 de curta duração para uma conta de serviço. Neste exemplo, a solicitação foi autenticada com credenciais federadas e as credenciais de curta duração foram criadas para a conta de serviço 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"
  }
}

Registros para autenticação com credenciais da conta de serviço falsificada

Depois de criar credenciais de curta duração para uma conta de serviço, use-as para representar a conta de serviço ao chamar APIs do Google Cloud.

Alguns dos métodos chamados podem gerar registros de auditoria. Em geral, essas entradas de registro mostram as seguintes identidades:

  • A conta de serviço que as credenciais de curta duração estão representando
  • A identidade que criou as credenciais de curta duração

Por exemplo, suponha que o usuário jamie@example.com crie um token federado para o assunto principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com e use o token federado para criar credenciais de curta duração para a conta de serviço my-service-account@my-project.iam.gserviceaccount.com

Em seguida, esse usuário cria um novo tópico do Pub/Sub, usando as credenciais de curta duração para representar a conta de serviço. O Pub/Sub gera uma entrada de registro que identifica a conta de serviço, bem como o assunto do token do 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"
  }
}

A seguir