Exemples de journaux pour la fédération d'identité de charge de travail

Cette page présente des exemples de journaux d'audit générés lors de l'utilisation de la fédération d'identité de charge de travail. Avec la fédération d'identité de charge de travail, vous pouvez autoriser une charge de travail sur site ou multicloud à accéder aux ressources Google Cloud sans avoir à utiliser de clé de compte de service.

Pour en savoir plus sur l'activation et l'affichage des journaux d'audit, consultez la page Journaux d'audit Cloud IAM.

Journaux permettant d'échanger un jeton de fournisseur d'identité contre un jeton fédéré

Après avoir configuré vos pools d'identités de charge de travail et votre fournisseur d'identité (IdP), vous pouvez créer un jeton pour votre IdP et l'échanger contre un jeton fédéré.

Cloud IAM peut générer des journaux d'audit lorsque les comptes principaux échangent un jeton. Afin de recevoir des journaux d'audit pour toutes les étapes du processus d'échange de jetons, vous devez activer les journaux d'audit pour l'accès aux données pour les API suivantes :

  • API IAM (Identity and Access Management) (activer le type de journal "Lecture administrateur")
  • API Security Token Service (activer le type de journal "Lecture administrateur")

Une fois que vous avez activé les journaux d'audit pour l'accès aux données, IAM génère une entrée de journal d'audit chaque fois qu'un compte principal échange un jeton. Cette entrée comprend les champs suivants :

  • protoPayload.authenticationInfo.principalSubject : objet du jeton d'IdP.
    • Sur Amazon Web Services (AWS), ce champ contient le nom ARN (Amazon Resource Name) du compte principal que vous avez authentifié.
    • Sur Microsoft Azure, ce champ contient l'ID d'objet de l'identité gérée que vous avez spécifiée comme objet de jeton Azure.
    • Pour les fournisseurs d'identité OIDC, ce champ contient la valeur de la revendication sub (l'objet) provenant du jeton OIDC.
  • protoPayload.metadata.mapped_principal : objet du jeton, utilisant la syntaxe IAM pour identifier le compte principal :

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName : fournisseur de pools Identity Workload auquel le jeton est associé.

L'exemple suivant montre une entrée de journal d'audit pour une requête d'échange de jeton. Dans cet exemple, un jeton Microsoft Azure a été échangé contre un jeton fédéré :

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

Journaux pour les assertions SAML signées et chiffrées

Cette section décrit les entrées des journaux Cloud Audit Logs créées par Security Token Service lorsqu'elle tente de valider des assertions SAML signées ou de déchiffrer des assertions chiffrées envoyées par votre IdP.

Pour la fédération d'identité de charge de travail, l'entrée de journal pertinente se présente comme suit :

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

Ce résultat inclut les valeurs suivantes :

  • fingerprint : représentation hexadécimale du hachage SHA-256 du certificat X.509 utilisé pour vérifier la signature de l'identifiant SAML. Le certificat X.509 est extrait des métadonnées XML SAML associées au fournisseur du pool d'identités de charge de travail.
  • resourceName : nom de ressource de la clé du fournisseur de pool d'identités de charge de travail utilisée pour déchiffrer l'assertion SAML chiffrée. Ce champ n'est présent que si la fédération d'identité de charge de travail reçoit une réponse SAML chiffrée de votre IdP.

Journaux permettant de créer des identifiants éphémères pour un compte de service

Une fois que vous avez échangé le jeton de l'IdP contre un jeton fédéré, vous pouvez l'utiliser pour créer des identifiants éphémères pour un compte de service. Tous les services Google vous permettent de vous authentifier à l'aide de ces identifiants éphémères.

Une fois que vous avez activé les journaux d'audit IAM pour l'accès aux données, IAM génère une entrée de journal d'audit chaque fois qu'un compte principal génère des identifiants éphémères pour un compte de service. Cette entrée comprend les champs suivants :

  • protoPayload.authenticationInfo.principalSubject : objet du jeton fédéré.
  • resource.labels.email_id : compte de service pour lequel des identifiants éphémères ont été générés

L'exemple suivant illustre une entrée de journal d'audit pour une requête visant à générer un jeton d'accès OAuth 2.0 éphémère pour un compte de service. Dans cet exemple, la requête a été authentifiée avec des identifiants fédérés et les identifiants éphémères ont été créés pour le compte de service 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"
  }
}

Journaux d'authentification avec les identifiants du compte de service dont l'identité est empruntée

Une fois les identifiants éphémères créés pour un compte de service, vous pouvez les utiliser pour emprunter l'identité du compte de service lorsque vous appelez les API Google Cloud.

Certaines des méthodes appelées peuvent générer des journaux d'audit. En général, ces entrées de journal indiquent les identités suivantes :

  • Compte de service dont l'identité est empruntée par les identifiants éphémères
  • Identité ayant créé les identifiants éphémères

Par exemple, supposons que l'utilisateur jamie@example.com crée un jeton fédéré pour l'objet principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com, puis utilise ce jeton fédéré pour créer des identifiants éphémères pour le compte de service my-service-account@my-project.iam.gserviceaccount.com.

Il crée ensuite un sujet Pub/Sub à l'aide des identifiants éphémères pour emprunter l'identité du compte de service. Pub/Sub génère une entrée de journal qui identifie le compte de service, ainsi que l'objet du jeton de l'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"
  }
}

Étapes suivantes