SKILL.md
CoreWeave Security Basics
Community-contributed. Not affiliated with, endorsed by, or sponsored by CoreWeave, Inc. CoreWeave is a registered trademark of CoreWeave, Inc.
Overview
CoreWeave provides bare-metal GPU cloud on Kubernetes. Security concerns center on compute credential management (kubeconfig, deploy tokens), network isolation between inference workloads, secrets for model registry access (HuggingFace, container registries), and protecting sensitive training data on persistent volumes. A compromised namespace can expose GPU resources, model weights, and customer inference data.
API Key Management
import { KubeConfig, CoreV1Api } from "@kubernetes/client-node";
function createCoreWeaveClient(): CoreV1Api {
const apiKey = process.env.COREWEAVE_API_KEY;
if (!apiKey) {
throw new Error("Missing COREWEAVE_API_KEY — set via secrets manager");
}
const kc = new KubeConfig();
kc.loadFromDefault();
const api = kc.makeApiClient(CoreV1Api);
// Never log kubeconfig or API key contents
console.log("CoreWeave client initialized for namespace:", process.env.CW_NAMESPACE);
return api;
}
Webhook Signature Verification
import crypto from "crypto";
import { Request, Response, NextFunction } from "express";
function verifyCoreWeaveWebhook(req: Request, res: Response, next: NextFunction): void {
const signature = req.headers["x-coreweave-signature"] as string;
const secret = process.env.COREWEAVE_WEBHOOK_SECRET!;
const expected = crypto.createHmac("sha256", secret).update(req.body).digest("hex");
if (!signature || !crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
res.status(401).send("Invalid signature");
return;
}
next();
}
Input Validation
import { z } from "zod";
const WorkloadRequestSchema = z.object({
namespace: z.string().regex(/^[a-z0-9-]+$/).max(63),
gpu_type: z.enum(["A100_80GB", "A100_40GB", "H100_80GB", "RTX_A6000"]),
gpu_count: z.number().int().min(1).max(8),
image: z.string().regex(/^[a-z0-9.\-/]+:[a-z0-9.\-]+$/),
model_id: z.string().min(1).max(200),
});
function validateWorkloadRequest(data: unknown) {
return WorkloadRequestSchema.parse(data);
}
