Amazon EKS-Audit-Logs sind über CloudWatch Logs verfügbar. Verwenden Sie das k8saudit-eks Falco-Plugin.
Vorbereitungen
-
Falco mit den Plugins
k8saudit-eksundjsongebaut. -
EKS-Cluster mit aktiviertem Steuerungsebenen-Logging.
Prozedur
- Aktivieren Sie die Protokollierung der Steuerungsebene in der AWS Console.
- Navigieren Sie zu Ihrem EKS-Cluster.
- Navigieren Sie zu .
- Aktivieren Sie die Protokollierung von Audit.
- Konfigurieren Sie IAM-Berechtigungen für EC2-Knotengruppen in der AWS Console.

Hinweis
Dieser Schritt gilt für EKS-Cluster, die EC2-gestützte Knotengruppen verwenden. Wenn Ihr Cluster Fargate verwendet, überspringen Sie diesen Schritt.- Navigieren Sie zu und klicken Sie dann auf den Knotengruppenname.
- Klicken Sie auf Node IAM role ARN, um IAM zu öffnen.
- Die folgende Inline-Richtlinie hinzufügen:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadAccessToCloudWatchLogs", "Effect": "Allow", "Action": [ "logs:Describe*", "logs:FilterLogEvents", "logs:Get*", "logs:List*" ], "Resource": [ "arn:aws:logs:${region}:${account-id}:log-group:/aws/eks/${cluster-name}/cluster:*" ] } ] }Ersetzen Sie${region},${account-id}und${cluster-name}durch Ihre Werte. - IRSA für Fargate konfigurieren.

Hinweis
Dieser Schritt gilt für EKS-Cluster, die Fargate verwenden. Wenn Ihr Cluster EC2-gestützte Knotengruppen verwendet, fahren Sie mit dem nächsten Schritt fort.Fargate blockiert den Zugriff auf den EC2 Instance Metadata Service (IMDS), sodass Pods keine IAM-Rollen von der Fargate-Ausführungsrolle erben können. IRSA (IAM-Rollen für Servicekonten) ist die einzige Möglichkeit, AWS-Anmeldedaten für Container auf Fargate bereitzustellen.- Holen Sie sich die EKS OIDC-Anbieter-ID.
OIDC_ID=$(aws eks describe-cluster --name <CLUSTER_NAME> \ --query "cluster.identity.oidc.issuer" --output text | sed 's|.*/id/||')
- Erstellen Sie eine IAM-Rolle mit einer Vertrauensrichtlinie.Ersetzen Sie die folgenden Variablen durch Ihre Werte:
-
<ACCOUNT_ID>: AWS-Konto-ID. -
<OIDC_ID>: Aus Schritt 3a oben. -
<REGION>: Zum Beispiel,us-east-1. -
<NAMESPACE>. Zum Beispieltrendmicro-system). -
<SA_NAME>: Der Standardwert istaudit-log-collector-trendmicro-container-security).
cat > trust-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<ACCOUNT_ID>:oidc-provider/oidc.eks.<REGION>.amazonaws.com/id/<OIDC_ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<REGION>.amazonaws.com/id/<OIDC_ID>:sub": "system:serviceaccount:<NAMESPACE>:<SA_NAME>", "oidc.eks.<REGION>.amazonaws.com/id/<OIDC_ID>:aud": "sts.amazonaws.com" } } } ] } EOF aws iam create-role \ --role-name audit-log-collector-irsa \ --assume-role-policy-document file://trust-policy.json -
- Fügen Sie die CloudWatch Logs-Lesepolitik der Rolle hinzu.
aws iam put-role-policy \ --role-name audit-log-collector-irsa \ --policy-name audit-log-cloudwatch-read \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadAccessToCloudWatchLogs", "Effect": "Allow", "Action": [ "logs:Describe*", "logs:FilterLogEvents", "logs:Get*", "logs:List*" ], "Resource": [ "arn:aws:logs:<REGION>:<ACCOUNT_ID>:log-group:/aws/eks/<CLUSTER_NAME>/cluster:*" ] } ] }'
- Holen Sie sich die EKS OIDC-Anbieter-ID.
- Aktualisieren Sie die
overrides.yaml, um die Erfassung von Audit-Logs zu aktivieren.Für EC2-Knotengruppen:visionOne: bootstrapToken: ... endpoint: ... exclusion: namespaces: [kube-system] ... auditLogCollection: enabled: true provider: eks eks: region: "${your cluster's region}" clusterName: "${your cluster's name in aws console}"Für Fargate fügen Sie die IRSA-Anmerkung für das Servicekonto hinzu:visionOne: bootstrapToken: ... endpoint: ... exclusion: namespaces: [kube-system] ... auditLogCollection: enabled: true provider: eks eks: region: "${your cluster's region}" clusterName: "${your cluster's name in aws console}" serviceAccount: auditLogCollector: annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::<ACCOUNT_ID>:role/audit-log-collector-irsa"
Fehlerbehebung: NoCredentialProviders-Fehler (nur EC2-Knotengruppen)
Wenn Sie
Error: NoCredentialProviders: no valid providers in chain sehen:Ursache: Der Container kann aufgrund eines Hop-Limits nicht auf IMDS zugreifen.
Lösung:
# Get instance ID INSTANCE_ID=$(aws ec2 describe-instances --region <region> \ --filters "Name=private-dns-name,Values=<node-name>" \ --query "Reservations[0].Instances[0].InstanceId" --output text) # Increase hop limit aws ec2 modify-instance-metadata-options --region <region> \ --instance-id $INSTANCE_ID \ --http-put-response-hop-limit 2 # Restart pod kubectl delete pod -n trendmicro-system <pod-name>
Fargate-Überprüfung
# Check pod is running
kubectl get pods -n trendmicro-system -l app.kubernetes.io/component=trendmicro-audit-log-collector
# Check IRSA env vars are injected
kubectl get pod <POD_NAME> -n trendmicro-system -o jsonpath='{.spec.containers[0].env[?(@.name=="AWS_ROLE_ARN")].value}'
# Check logs for successful event upload
kubectl logs -n trendmicro-system -l app.kubernetes.io/component=trendmicro-audit-log-collector -c audit-log-collector --tail=10
Erwartete nicht infizierte Protokollausgabe:
{"level":"info","logger":"event-uploader","msg":"Batch upload completed","success":1,"failed":0}
