ビュー:

GKEのAudit LogsはCloud Pub/Subを通じて利用可能です。k8saudit-gke Falcoプラグインを使用してください。

始める前に

  • Falcoはk8saudit-gkejsonプラグインで構築されています。
  • Pub/Subアクセススコープが有効なGKEクラスター。
  • クラスターでワークロードアイデンティティが有効になっています。
注意
注意
GKEは作成後にノードグループのアクセススコープを変更することをサポートしていません。必要に応じて、Pub/Subアクセスを持つ新しいノードグループを作成してください。

手順

  1. GCPリソースを作成します。
    # Variables
    PROJECT_ID="${your gcp project id}"
    TOPIC="${your pub/sub topic}" # example: trendmicro-container-security-audit-log-topic
    SUBSCRIPTION="${your pub/sub subscription}" # example: trendmicro-container-security-audit-log-ns4rhmfdse
    CLUSTER_NAME="${your gke cluster name}"
    SINK_NAME="${your sink name}" # example: trendmicro-container-security-audit-log-sink
    SERVICE_ACCOUNT="${your service account name}" # example: trendmicro-audit-sa
    
    # Create Pub/Sub topic and subscription
    gcloud pubsub topics create "$TOPIC" --project="$PROJECT_ID"
    gcloud pubsub subscriptions create "$SUBSCRIPTION" --topic="$TOPIC" --project="$PROJECT_ID"
    
    # Create service account
    gcloud iam service-accounts create "$SERVICE_ACCOUNT" \
      --project="$PROJECT_ID" \
      --display-name="Trendmicro Container Security Audit Log Service Account"
    
    # Grant permissions
    gcloud projects add-iam-policy-binding "$PROJECT_ID" \
      --member="serviceAccount:${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/pubsub.subscriber"
    
    # Bind Workload Identity
    gcloud iam service-accounts add-iam-policy-binding \
      "${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
      --project="$PROJECT_ID" \
      --role="roles/iam.workloadIdentityUser" \
      --member="serviceAccount:${PROJECT_ID}.svc.id.goog[trendmicro-system/audit-log-collector-trendmicro-container-security]"
    
    # Create log sink
    gcloud logging sinks create "$SINK_NAME" \
      "pubsub.googleapis.com/projects/$PROJECT_ID/topics/$TOPIC" \
      --log-filter="resource.type=\"k8s_cluster\" AND protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\" AND resource.labels.cluster_name=\"$CLUSTER_NAME\"" \
      --project="$PROJECT_ID"
    
    # Grant sink writer permissions
    WRITER_IDENTITY=$(gcloud logging sinks describe "$SINK_NAME" --project="$PROJECT_ID" --format="value(writerIdentity)")
    gcloud pubsub topics add-iam-policy-binding "$TOPIC" \
      --project="$PROJECT_ID" \
      --member="$WRITER_IDENTITY" \
      --role="roles/pubsub.publisher"
  2. overrides.yamlを更新して監査ログ収集を有効にします。
    visionOne:
        bootstrapToken: ...
        endpoint: ...
        exclusion:
            namespaces: [kube-system]
        ...
    auditLogCollection:
        enabled: true
        provider: gke
        gke:
            gcpProjectId: "${gcp project id from step 1}"
            pubSubSubscription: "${pub sub subscription name from step 1}"
            serviceAccount: "${service account name from step 1}"