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

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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é vos pools de personnel et vos fournisseurs d'identité, vous pouvez créer un jeton pour votre fournisseur d'identité 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 du fournisseur d'identité.
    • 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 appeler les API Google Cloud avec le jeton fédéré

Après avoir échangé le jeton du fournisseur d'identité 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 de personnel 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