Beispiellogs für die Workload Identity-Föderation

Auf dieser Seite werden Beispiele für Audit-Logs gezeigt, die generiert werden, wenn Sie die Workload Identity-Föderation verwenden. Mit der Föderation von Workload Identity können Sie einer lokalen oder Multi-Cloud-Arbeitslast den Zugriff auf Google Cloud-Ressourcen ermöglichen, ohne einen Dienstkontoschlüssel verwenden zu müssen.

Weitere Informationen zum Aktivieren und Anzeigen von Audit-Logs finden Sie unter IAM-Audit-Logging.

Logs zum Austauschen eines IdP-Tokens gegen ein föderiertes Token

Nachdem Sie die Workload Identity-Pools und den Identitätsanbieter eingerichtet haben, können Sie ein Token für Ihren IdP erstellen und gegen ein föderiertes Token austauschen.

IAM kann Audit-Logs generieren, wenn Hauptkonten ein Token austauschen. Um Audit-Logs für alle Schritte des Token-Austauschprozesses zu erhalten, müssen Sie für die folgenden APIs Audit-Logs für Datenzugriffsaktivitäten aktivieren:

  • Identity and Access Management (IAM) API (Logtyp „Administrator-Lesezugriff“ aktivieren)
  • Security Token Service API (Logtyp „Administrator-Lesezugriff“ aktivieren)

Nachdem Sie Audit-Logs für Datenzugriffsaktivitäten aktiviert haben, generiert IAM jedes Mal einen Audit-Logeintrag, wenn ein Hauptkonto ein Token austauscht. Der Logeintrag enthält diese Felder:

  • protoPayload.authenticationInfo.principalSubject ist der Betreff des IdP-Tokens.
    • Bei Amazon Web Services (AWS) enthält dieses Feld den Amazon Resource Name (ARN) des Hauptkontos, das Sie authentifiziert haben.
    • In Microsoft Azure enthält dieses Feld die Objekt-ID der verwalteten Identität, die Sie als Betreff des Azure-Tokens angegeben haben.
    • Bei anderen OIDC-IdPs enthält dieses Feld den Wert von sub (Betreff) aus dem OIDC-Token.
  • protoPayload.metadata.mapped_principal: Der Betreff des Tokens, wobei die IAM-Syntax verwendet wird, um das Hauptkonto zu identifizieren:

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName: Der Anbieter von Workload Identity-Pool, mit dem das Token verknüpft ist.

Das folgende Beispiel zeigt einen Audit-Logeintrag für eine Anfrage zum Austausch eines Tokens. In diesem Beispiel wurde ein Microsoft Azure-Token gegen ein föderiertes Token ausgetauscht:

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

Logs für signierte und verschlüsselte SAML-Assertions

In diesem Abschnitt werden die Logeinträge der Cloud-Audit-Logs beschrieben, die von Security Token Service bei dem Versuch erstellt werden, signierte SAML-Assertions zu prüfen oder verschlüsselte Assertions zu entschlüsseln, die von Ihrem IdP gesendet werden.

Für die Workload Identity-Föderation sieht der entsprechende Logeintrag in etwa so aus:

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

Diese Ausgabe enthält die folgenden Werte:

  • fingerprint: Die hexadezimale Darstellung des SHA-256-Hashs des X.509-Zertifikats, das zur Überprüfung der Signatur mit den SAML-Anmeldedaten verwendet wurde. Das X.509-Zertifikat wird aus den SAML-XML-Metadaten extrahiert, die mit dem Anbieter des Workload Identity-Pools verknüpft sind.
  • resourceName: der Ressourcenname des Anbieterschlüssels des Workload Identity-Pools, der zum Entschlüsseln der verschlüsselten SAML-Assertion verwendet wurde. Dieses Feld ist nur vorhanden, wenn die Workload Identity-Föderation eine verschlüsselte SAML-Antwort von Ihrem IdP empfängt.

Logs zum Erstellen kurzlebiger Anmeldedaten für ein Dienstkonto

Nachdem Sie das IdP-Token gegen ein föderiertes Token ausgetauscht haben, können Sie mit dem föderierten Token kurzlebige Anmeldedaten für ein Dienstkonto erstellen. Alle Google-Dienste ermöglichen die Authentifizierung mit diesen kurzlebigen Anmeldedaten.

Nachdem Sie IAM-Audit-Logs für Datenzugriffsaktivitäten aktiviert haben, generiert IAM jedes Mal einen Audit-Logeintrag, wenn ein Hauptkonto kurzlebige Anmeldedaten für ein Dienstkonto generiert. Der Logeintrag enthält diese Felder:

  • protoPayload.authenticationInfo.principalSubject: Der Betreff des föderierten Tokens.
  • resource.labels.email_id: Das Dienstkonto, für das kurzlebige Anmeldedaten erstellt wurden.

Das folgende Beispiel zeigt einen Audit-Logeintrag für eine Anfrage zum Erzeugen eines kurzlebigen OAuth 2.0-Zugriffstokens für ein Dienstkonto. In diesem Beispiel wurde die Anfrage mit föderierten Anmeldedaten authentifiziert und die kurzlebigen Anmeldedaten wurden für das Dienstkonto my-service-account@my-project.iam.gserviceaccount.com erstellt:

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

Logs zur Authentifizierung mit Anmeldedaten für das übernommene Dienstkonto

Nach dem Erstellen kurzlebiger Anmeldedaten für ein Dienstkonto können Sie mit den Anmeldedaten die Identitätsübernahme des Dienstkontos durchführen, wenn Sie Google Cloud APIs aufrufen.

Einige der von Ihnen aufgerufenen Methoden generieren möglicherweise Audit-Logs. Im Allgemeinen weisen diese Logeinträge diese Identitäten auf:

  • Das Dienstkonto, für das die kurzlebigen Anmeldedaten eine Identitätsübernahme durchführen
  • Die Identität, die die kurzlebigen Anmeldedaten erstellt hat

Angenommen, der Nutzer jamie@example.com erstellt ein föderiertes Token für das Subjekt principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com und erstellt dann mit dem föderierten Token kurzlebige Anmeldedaten für das Dienstkonto my-service-account@my-project.iam.gserviceaccount.com.

Der Nutzer erstellt dann ein neues Pub/Sub-Thema und führt dabei mit den kurzlebigen Anmeldedaten eine Identitätsübernahme des Dienstkontos durch. Pub/Sub generiert einen Logeintrag, der das Dienstkonto sowie das Subjekt des Tokens des Identitätsanbieters identifiziert:

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

Nächste Schritte