.
Auf dieser Seite wird beschrieben, wie Sie Logs verwenden, um die Ausstellung und Verwendung von Kubernetes-Identitäten in Form von Zertifikaten und Dienstkonto-Tokens durch die Steuerungsebene des Google Kubernetes Engine-Clusters (GKE) zu prüfen. Diese Überprüfung ist völlig optional und nicht erforderlich, um Ihre Steuerungsebene zu schützen.
Dieser Leitfaden richtet sich an Sicherheitsadministratoren und Plattforminhaber, die bestimmte Compliance- oder Richtlinienanforderungen für die Kontrolle der Ausstellung und Signierung von Anmeldedaten haben. Sie sollten bereits selbstverwaltete Schlüssel und Zertifizierungsstellen mit der GKE Control Plane Authority eingerichtet haben.
Sie sollten mit den folgenden Konzepten vertraut sein:
Auf dieser Seite wird ein Teil einer Reihe optionaler Steuerungsebenenfunktionen in GKE beschrieben, mit denen Sie Aufgaben wie das Überprüfen des Sicherheitsstatus der Steuerungsebene oder das Konfigurieren der Verschlüsselung und der Anmeldedatensignierung in der Steuerungsebene mit von Ihnen verwalteten Schlüsseln ausführen können. Weitere Informationen finden Sie unter GKE Control Plane Authority.
Standardmäßig wendet Trusted Cloud verschiedene Sicherheitsmaßnahmen auf die verwaltete Steuerungsebene an. Auf dieser Seite werden optionale Funktionen beschrieben, mit denen Sie mehr Einblick in die GKE-Steuerungsebene erhalten oder mehr Kontrolle darüber haben.
Protokolle zur Identitätsausstellung
Die GKE-Logs zur Identitätsausstellung sind Audit-Logs der Steuerungsebene, in denen aufgezeichnet wird, wann die Steuerungsebene Anmeldedaten ausstellt und wann diese Anmeldedaten im Cluster verwendet werden. Sie können diese Logs verwenden, um die Lebensdauer von Anmeldedaten zu verfolgen, einschließlich Ausstellung und Verwendung. Korrelieren Sie dazu die Logs zur Identitätsausstellung mit den Logs von Cloud KMS, Certificate Authority Service und der Kubernetes API. GKE-Logs zur Identitätsausstellung sind aktiviert, wenn Sie die GKE Control Plane Authority verwenden. In diesen Logs werden die Ausstellung und Verwendung der folgenden Arten von Anmeldedaten erfasst:
- X.509-Zertifikate
- Cluster-JSON-Web-Tokens (JWTs)
X.509-Zertifikate
Kubernetes verwendet X.509-Zertifikate für die Authentifizierung mit Clientzertifikaten. Zum Ausstellen von Zertifikaten sendet die Kubernetes-Steuerungsebene eine genehmigte CertificateSigningRequest an eine Zertifizierungsstelle (Certificate Authority, CA) in CA Service. Die Zertifizierungsstelle stellt dann ein Zertifikat aus, indem sie den entsprechenden Schlüssel in Cloud KMS verwendet, um den Zertifikats-Digest zu signieren.
Die Kubernetes API-Serverlogs enthalten Details zur Zertifikatsignatur für jeden Kubernetes API-Aufruf, der mit einem Zertifikat authentifiziert wurde. Der Eintrag für die Anmeldedaten-ID im Log hat das folgende Format:
"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"
Der Wert CERTIFICATE_HASH
ist der SHA256-Hash für das Zertifikat, mit dem Sie den Lebenszyklus des Zertifikats nachvollziehen können.
Sie können Kubernetes API-Serverzertifikatslogs verwenden, um den Lebenszyklus des Zertifikats nachzuvollziehen, indem Sie Logs aus den folgenden Diensten korrelieren:
- GKE-Logs zur Identitätsausstellung: Verwenden Sie die
protoPayload.metadata.credentialId
-Abfrage, um bestimmte GKE-Logs zur Identitätsausstellung basierend auf der Anmeldedaten-ID aus den Kubernetes API-Server-Logs zu finden. Verwenden Sie dann das FeldprotoPayload.metadata.certificateFingerprint
aus dem GKE-Log zur Identitätsausstellung, um die Logs zur Identitätsausstellung mit den CA Service-Logs in Beziehung zu setzen. - CA Service-Logs: Suchen Sie nach dem Logeintrag zur Zertifikatausstellung, der die folgenden IDs enthält:
cert_fingerprint.sha256_hash
: Der SHA256-Hash des signierten Zertifikats. Verwenden Sie diese ID, um Logs mit GKE- und Kubernetes API-Ereignissen abzugleichen.tbs_certificate_digest
: ein Hash des Zertifikatsinhalts, der zur Signierung mit einem Cloud KMS-Schlüssel gesendet wurde. Verwenden Sie diese ID, um Logs mit Cloud KMS-Logs abzugleichen.
- Cloud KMS-Signaturlogs: Verwenden Sie den Wert
tbs_certificate_digest
aus dem CA Service-Log, um zu bestätigen, dass das Zertifikat mit dem erwarteten Cloud KMS-Schlüssel signiert wurde.
JSON-Web-Tokens (JWTs)
Signierte JWTs (JSON Web Tokens) werden als Bearer-Tokens für Entitäten im Cluster wie Kubernetes-Dienstkonten verwendet, wenn Anfragen an die Kubernetes API authentifiziert werden. Wenn ein Pod erstellt wird, der ein bestimmtes Dienstkonto verwendet, erstellt Kubernetes ein JWT und stellt es im Pod bereit. Wenn Sie die GKE-Steuerungsebene verwenden, um Ihre eigenen Schlüssel und Zertifizierungsstellen auszuführen, wird dieses JWT mit dem Dienstkonto-Signaturschlüssel in Cloud KMS signiert und später verifiziert.
Die Kubernetes API-Server-Logs enthalten Details zur Tokensignatur für jeden Kubernetes API-Aufruf, der mit einem JWT authentifiziert wurde. Der Eintrag für die Tokensignatur im Log hat das folgende Format:
"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"
Der Wert JWT_ID
ist ein String, der das JWT identifiziert, das im Kubernetes-API-Aufruf verwendet wurde.
Sie können die JWT-ID aus den Kubernetes API-Serverlogs verwenden, um den Lebenszyklus eines JWT nachzuvollziehen, indem Sie die folgenden Logs korrelieren:
- GKE-Logs zur Identitätsausstellung: Verwenden Sie die JWT-ID aus den Kubernetes API-Server-Logs, um bestimmte Einträge zur JWT-Ausstellung zu finden. Jeder Eintrag enthält auch das Feld
toBeSignedDigest
, dessen Wert mit Cloud KMS-Logs übereinstimmen kann. - Cloud KMS-Signaturlogs: Verwenden Sie den Wert des Felds
toBeSignedDigest
aus den GKE-Logs zur Identitätsausstellung, um zu bestätigen, dass der erwartete Cloud KMS-Schlüssel das JWT signiert hat.
Preise
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Trusted Cloud by S3NS:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
Steuerungsebene Ihres GKE-Cluster mit selbstverwalteten CAs oder Schlüsseln konfigurieren
Aktivieren Sie die folgenden Cloud-Audit-Logging-Dienst-APIs:
- Aktivieren Sie für Cloud KMS Audit-Logs zum Datenzugriff vom Typ Daten lesen.
- Aktivieren Sie für CA Service Audit-Logs zum Datenzugriff der Typen Lesen durch Administrator und Daten schreiben.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie für den Zugriff auf Protokolle zur Identitätsausstellung benötigen:
-
Alle Aktionen in Logging ausführen:
Logging-Administrator (
roles/logging.admin
). -
Logs ansehen:
Betrachter privater Logs (
roles/logging.privateLogViewer
).
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Anforderungen und Einschränkungen
Es gelten die folgenden Anforderungen und Einschränkungen:
- Sie müssen mindestens die GKE-Version 1.31.1-gke.1846000 verwenden.
- Logs zur Identitätsausstellung werden als Cloud-Audit-Logs aufgezeichnet und haben eine festgelegte Aufbewahrungsdauer von 400 Tagen. Die Aufbewahrungsdauer ist nicht konfigurierbar. Sie können Ihre Audit-Logs zu Systemereignissen jedoch an andere Ziele weiterleiten, um sie länger aufzubewahren.
Zertifikate überprüfen
Sie können die Logs zur Ausstellung von Identitäten der GKE-Steuerungsebene verwenden, um zu bestätigen, dass ein Zertifikat erfolgreich ausgestellt oder verwendet wurde. Sie können eines der folgenden Logs oder eine Kombination von Logs verwenden, um Informationen zur Ausstellung und Verwendung von Zertifikaten zu bestätigen:
Zertifikatslogs |
|
---|---|
Kubernetes API-Log für die Zertifikatsnutzung |
Protokolliert die Details der Zertifikatsignatur, wenn das Zertifikat für die Kubernetes API verwendet wird. |
GKE-Log für Vorgänge zur Zertifikatausstellung |
Protokolliert alle Vorgänge zur Zertifikatausstellung als Systemereignis-Audit-Log. Diese Logs sind standardmäßig für alle Cluster aktiviert, in denen von Nutzern verwaltete Schlüssel oder CAs für die GKE-Steuerungsebene verwendet werden. |
CA Service-Audit-Log |
Protokolliert einen Eintrag, wenn ein Zertifikat ausgestellt wird. |
Cloud KMS-Audit-Log |
Protokolliert einen Eintrag, wenn ein Digest als Reaktion auf eine Signieranfrage von CA Service signiert wird. |
Zertifikatsverwendung mit Kubernetes API-Logs prüfen
So finden Sie Logeinträge für API-Aufrufe, die mit Zertifikaten authentifiziert wurden:
Rufen Sie in der Trusted Cloud Console die Seite Log-Explorer auf:
Fügen Sie den folgenden Ausdruck in das Feld des Abfrageeditors ein:
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"X509SHA256="
Klicken Sie auf Abfrage ausführen.
Bei dieser Abfrage werden alle Kubernetes API-Serverlogs zurückgegeben, denen ein X.509-Zertifikat zugeordnet ist. Suchen Sie mit Ihren Sicherheitstools oder manuell in den Logs nach bestimmten Logeinträgen, um sie zu untersuchen.
Wenn Sie diese Logs mit anderen Logtypen in Beziehung setzen möchten, suchen Sie nach dem folgenden Feld:
"authentication.k8s.io/credential-id":"CREDENTIAL_ID"
Der Wert CREDENTIAL_ID
ist der Bezeichner, mit dem Sie Logs aus GKE, CA Service und Cloud KMS korrelieren können. Der CREDENTIAL_ID
hat das Format "X509SHA256=CERTIFICATE_HASH"
.
Zertifikatsausstellung mit GKE-Logs prüfen
So finden Sie GKE-Logeinträge für Ereignisse zur Zertifikatausstellung:
Rufen Sie in der Trusted Cloud Console die Seite Log-Explorer auf:
Fügen Sie den folgenden Ausdruck in das Feld des Abfrageeditors ein:
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" resource.type="gke_cluster" protoPayload.serviceName="container.googleapis.com" protoPayload.metadata.credentialId="CREDENTIAL_ID"
Ersetzen Sie Folgendes:
PROJECT_ID
: Ihre Projekt-ID.CREDENTIAL_ID
: dieCREDENTIAL_ID
aus dem Abschnitt Zertifikatsnutzung mit Kubernetes API-Logs überprüfen.
Klicken Sie auf Abfrage ausführen.
Zertifikatsausstellung mit CA Service-Logs überprüfen
So finden Sie CA Service-Logs, die mit den GKE-Zertifikatausstellungsereignissen übereinstimmen:
Rufen Sie in der Trusted Cloud Console die Seite Log-Explorer auf:
Fügen Sie den folgenden Ausdruck in das Feld des Abfrageeditors ein:
resource.type="audited_resource" protoPayload.serviceName="privateca.googleapis.com" protoPayload.methodName="google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate" protoPayload.response.certificate_description.cert_fingerprint.sha256_hash="CERTIFICATE_HASH"
Ersetzen Sie
CERTIFICATE_HASH
durch dieCERTIFICATE_HASH
aus dem Abschnitt Zertifikatsverwendung mit Kubernetes API-Logs überprüfen. Achten Sie darauf, dass Sie das PräfixX509SHA256=
aus dem Hash entfernen.Klicken Sie auf Abfrage ausführen.
Diese Abfrage gibt ein Log zurück, das im Antwortabschnitt zur Zertifikatsbeschreibung ein
tbs_certificate_digest: DIGEST_VALUE
-Feld enthält.
Sie können DIGEST_VALUE
verwenden, um Cloud KMS-Signaturlogs für das Zertifikat abzugleichen.
Zertifikatausstellung mit Cloud KMS-Signaturlogs prüfen
So finden Sie Cloud KMS-Signaturereignisse für die Ereignisse zur CA Service-Zertifikatausstellung:
Rufen Sie in der Trusted Cloud Console die Seite Log-Explorer auf:
Fügen Sie den folgenden Ausdruck in das Feld des Abfrageeditors ein:
protoPayload.request.digest.sha256="DIGEST_VALUE" protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.methodName="AsymmetricSign" protoPayload.serviceName="cloudkms.googleapis.com"
Ersetzen Sie
DIGEST_VALUE
durch den Digest-Wert aus dem Abschnitt Zertifikatsausstellung mit CA Service-Logs bestätigen.Klicken Sie auf Abfrage ausführen.
Diese Abfrage gibt die Protokolle für Ereignisse zur Zertifikatausstellung zurück. In Cloud KMS-Logs wird nicht zwischen Zertifikaten und JWTs unterschieden. Die Logeinträge für beide sind daher identisch.
Tokens prüfen
Sie können die Ausstellungslogs für die Identität der GKE-Steuerungsebene und die Cloud KMS-Signaturlogs verwenden, um zu bestätigen, dass ein JSON Web Token (JWT) erfolgreich ausgestellt wurde.
Die Rückverfolgung des Tokenausgabeereignisses beginnt in der Regel mit der Überwachung des Kubernetes API-Logs auf Dienstkontoaktivitäten. Nachdem Sie ein Aktivitätsprotokoll identifiziert haben, das genauer untersucht werden muss, können Sie die folgenden Protokolle verwenden, um Informationen zur Ausstellung und Verwendung von Anmeldedaten zu bestätigen:
JWT-Logs |
|
---|---|
Kubernetes API-Log für die JWT-Verwendung |
Protokolliert die Details der JWT-Signatur, wenn ein JWT für die Kubernetes API verwendet wird. |
GKE-Log für JWT-Ausstellungsvorgänge |
Alle Vorgänge zur Tokenausstellung werden als Audit-Log zu Systemereignissen protokolliert. Diese Logs sind standardmäßig für alle Cluster aktiviert, in denen von Nutzern verwaltete Schlüssel oder Zertifizierungsstellen für die GKE-Steuerungsebene verwendet werden. |
Cloud KMS-Audit-Log |
Protokolliert einen Eintrag, wenn ein Token signiert und ausgestellt wird. |
Tokennutzung mit Kubernetes API-Serverlogs prüfen
So rufen Sie Logeinträge für Ereignisse zur Tokennutzung auf:
Rufen Sie in der Trusted Cloud Console die Seite Log-Explorer auf:
Fügen Sie den folgenden Ausdruck in das Feld des Abfrageeditors ein:
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"JTI="
Klicken Sie auf Abfrage ausführen.
Mit dieser Abfrage werden alle Kubernetes API-Serverlogs mit einem zugehörigen JWT zurückgegeben. Suchen Sie mit Ihren Sicherheitstools oder manuell in den Logs nach bestimmten Logeinträgen, die Sie untersuchen möchten.
Wenn Sie diese Logs mit anderen Logtypen in Beziehung setzen möchten, suchen Sie nach dem folgenden Feld:
"authentication.k8s.io/credential-id": "JTI=JWT_ID"
JWT_ID
ist die Token-ID, mit der Sie Logs aus GKE und Cloud KMS in Beziehung setzen können.
Tokenausstellung mit GKE-Logs prüfen
So finden Sie Logeinträge für Ereignisse zur Tokenausstellung:
Rufen Sie in der Trusted Cloud Console die Seite Log-Explorer auf:
Fügen Sie den folgenden Ausdruck in das Feld des Abfrageeditors ein:
resource.type="gke_cluster" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT" protoPayload.metadata.credentialId="JTI=JWT_ID"
Ersetzen Sie Folgendes:
PROJECT_ID
: Ihre Projekt-ID.JWT_ID
: die JWT-ID aus dem Abschnitt Tokennutzung mit Kubernetes API-Serverlogs überprüfen.
Klicken Sie auf Abfrage ausführen.
Diese Abfrage gibt Logs zurück, die ein
toBeSignedDigest
-Feld enthalten.
Mit dem Wert toBeSignedDigest
können Sie nach Cloud KMS-Signierereignissen suchen.
Tokenausstellung mit Cloud KMS-Signaturlogs prüfen
So finden Sie Logeinträge für signierte Digests:
Rufen Sie in der Trusted Cloud Console die Seite Log-Explorer auf:
Fügen Sie den folgenden Ausdruck in das Feld des Abfrageeditors ein:
protoPayload.request.digest.sha256="DIGEST_VALUE" protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.methodName="AsymmetricSign" protoPayload.serviceName="cloudkms.googleapis.com"
Ersetzen Sie
DIGEST_VALUE
durch den Wert im FeldtoBeSignedDigest
aus dem Abschnitt Tokenausstellung mit GKE-Logs überprüfen.Klicken Sie auf Abfrage ausführen.
Diese Abfrage gibt die Protokolle für Ereignisse zur Zertifikatausstellung zurück. In Cloud KMS-Logs wird nicht zwischen Zertifikaten und JWTs unterschieden. Die Logeinträge für beide sind daher identisch.