Exemples de journaux pour la fédération d'identité de personnel

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 personnel. Grâce à la fédération d'identité de personnel, vous pouvez autoriser les identités tierces à 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.

Cloud IAM peut générer des journaux d'audit lorsque vous créez et gérez des pools de personnel. Pour activer les journaux d'audit lors de la gestion des pools de personnel, vous devez activer les journaux d'audit pour l'accès aux données pour l'API suivante:

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

Pour configurer davantage les journaux d'audit pour le processus d'échange de jetons ou la connexion à la console Google Cloud (fédération), vous devez également activer les journaux d'audit pour l'accès aux données pour l'API suivante :

  • API Security Token Service (activer le type de journal "Lecture administrateur")

Journaux pour la création d'un pool d'employés

L'exemple suivant montre une entrée de journal générée par la création d'un pool de personnel. Dans cet exemple, l'utilisateur sam@example.com a créé un pool de personnel avec l'ID my-pool sous l'organisation dont l'ID est 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"
  }
}

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

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

Une fois que vous avez activé Cloud Audit Logs pour les activités d'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.
    • Pour les fournisseurs d'identité OIDC, ce champ contient la valeur de la revendication sub, ou de l'objet, provenant du jeton OIDC.
    • Pour les fournisseurs d'identité SAML, ce champ contient la valeur du sous-attribut NameID de l'attribut Subject de l'assertion SAML.
  • protoPayload.metadata.mapped_principal : objet du jeton, utilisant la syntaxe IAM pour identifier le compte principal :

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName : fournisseur de pools de personnel 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 OIDC est échangé contre un jeton fédéré :

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

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 des identités des employés, 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/locations/global/workforcePools/WORKFORCE_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 de pools d'identités des employés.
  • resourceName : nom de ressource de la clé du fournisseur de pool d'identités des employés utilisée pour déchiffrer l'assertion SAML chiffrée. Ce champ n'est présent que si la fédération des identités des employés reçoit une réponse SAML chiffrée de votre IdP.

Journaux pour appeler les API Google Cloud avec le jeton fédéré

Après avoir échangé le jeton de l'IdP contre un jeton fédéré, vous pouvez l'utiliser pour appeler les API Google Cloud. Certaines des méthodes appelées peuvent générer des journaux d'audit.

L'exemple suivant montre une entrée de journal d'audit générée pour une requête permettant de répertorier les buckets Cloud Storage d'un projet à l'aide d'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": "principal://iam.googleapis.com/locations/global/workforcePools/oidc-pool/subject/012345678901"
    },
    "methodName": "storage.buckets.list",
    "serviceName": "storage.googleapis.com",
  },
  "resource": {
    "type": "gcs_bucket"
  }
}

Journaux pour la connexion à la console Google Cloud

Une fois que vous avez configuré vos pools d'identités des employés et leurs fournisseurs d'identité, les utilisateurs peuvent se connecter à Google Cloud à l'aide de l'authentification unique.

Journaux pour une connexion réussie

Cette section fournit un exemple d'entrée de journal d'audit Cloud consignée après une connexion réussie. Dans cet exemple, l'utilisateur user@example.com se connecte à l'aide d'un fournisseur locations/global/workforcePools/my-pool/providers/my-provider. Dans ce cas, l'entrée de journal d'audit Cloud suivante est générée :

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

L'entrée de journal d'audit Cloud pour les fournisseurs SAML peut également contenir des informations de clé de signature dans le champ de métadonnées.

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

Journaux pour l'échec de la connexion

Cette section fournit un exemple d'entrée de journal d'audit Cloud consignée après un échec de connexion. Dans cet exemple, l'utilisateur user@example.com tente de se connecter à l'aide d'un fournisseur locations/global/workforcePools/my-pool/providers/my-provider, mais l'accès est refusé, car une condition d'attribut n'est pas remplie. Dans ce cas, l'entrée de journal d'audit Cloud suivante est générée :

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

Journaux pour la déconnexion

Cette section fournit un exemple d'entrée de journal d'audit Cloud consignée après un événement de déconnexion. Dans cet exemple, l'utilisateur user@example.com, qui est connecté à l'aide d'un fournisseur locations/global/workforcePools/my-pool/providers/my-provider, lance une déconnexion. Dans ce cas, l'entrée de journal d'audit Cloud suivante est générée :

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

Étapes suivantes