Avant de commencer
Vous devez disposer du rôle Sandbox Admin dans votre organisation. Sans ce rôle, toute tentative de lecture ou d’écriture d’une politique renvoiePermissionDenied.
Pour utiliser les exemples de CLI, installez la CoreWeave Intelligent CLI et authentifiez-vous. Pour utiliser les exemples REST, vous avez besoin d’un jeton API CoreWeave. Dans les exemples, $TOKEN désigne ce jeton et prod-us-east-1 désigne l’exécuteur.
Chaque exécuteur possède exactement une politique, et cette politique est obligatoire. Une politique sans base ni contraintes est valide et déclare une posture entièrement permissive. Un opérateur définit ainsi toujours la posture de manière explicite, au lieu d’en hériter par inadvertance.
Lire la politique actuelle
Partez de la configuration actuelle de l’exécuteur plutôt que d’un document vide.- CLI
- curl
describe pour obtenir une vue détaillée, qui signale explicitement l’état non configuré lorsqu’un exécuteur n’a pas de politique :-o json, un exécuteur qui n’a jamais été configuré renvoie null et non {}, ce qui permet aux outils d’automatisation de distinguer « jamais configuré » de « configuré et permissif ».Mettre à jour une politique
Une politique est un champ de l’exécuteur : vous la définissez donc en mettant à jour l’exécuteur avec le masque de mise à jourpolicy.
Une mise à jour de politique remplace toujours l’intégralité du document. Seul policy est implémenté comme chemin de masque de mise à jour : vous ne pouvez donc pas modifier un seul groupe de contraintes en laissant le reste intact. Lisez la politique actuelle, modifiez ce dont vous avez besoin, puis renvoyez le document complet.
- CLI
- curl
Modifiez la politique dans Appliquez un document depuis un fichier, ou depuis stdin avec Avec Modifiez Prenez l’Vérifiez un document avant de l’envoyer :
$EDITOR, prérempli avec le document actuel de l’exécuteur :- :-f, cwic lit la révision actuelle de l’exécuteur au moment de la soumission : un fichier modifié à partir d’une lecture antérieure peut donc écraser la modification d’un autre administrateur. Pour figer la révision sur laquelle repose votre fichier, capturez la politique et son etag à partir d’une seule et même lecture de l’exécuteur :policy.json, puis soumettez-le avec l’etag issu de cette même lecture :etag de la lecture qui a produit le document, jamais celui d’une lecture ultérieure. policy get exporte la politique sans son etag, et un policy describe exécuté après l’export peut renvoyer un jeton plus récent, qui passe la vérification et permet à votre fichier d’écraser la modification effectuée entre-temps. L’onglet curl et Remplacer la politique capturent de la même manière les deux à partir d’une seule réponse.Le mode éditeur ne nécessite aucune option, car il envoie l’etag lu pour préremplir l’éditeur.Pour partir d’une structure de base plutôt que du document actuel, affichez un modèle :- La durée de vie est bornée par la plateforme, et non par la politique. Une politique fournit uniquement
constraints.lifecycle.defaultLifetimeSeconds, utilisé lorsqu’une requête de création ne précise pas de durée de vie. À la création, la plateforme rejette les durées de vie supérieures à son maximum, actuellement fixé à 30 jours. Les versions antérieures des politiques comportaient un plafondmaxLifetimeSeconds; la version actuelle decwicrejette les documents qui le contiennent encore. - Une politique configurée ne peut pas être effacée. Il n’existe aucune opération de suppression, et l’API rejette toute mise à jour qui définit la politique sur null. Pour assouplir une posture, remplacez le document par un document plus permissif.
- La taille d’un document de politique est plafonnée à 256 Kio une fois encodé.
Les commandes de politique utilisent l’API v1 en lecture et en écriture, tandis que les autres commandes
cwic sandbox runner et cwic sandbox profile utilisent toujours v1beta2. Les deux passent par le même --api-url.Définir une politique par défaut pour les nouveaux exécuteurs
CoreWeave configure une politique par défaut pour les nouveaux exécuteurs dans son service hébergé. Les autres déploiements peuvent définir leur propre politique par défaut. La passerelle enregistre cette politique lorsqu’un exécuteur se connecte ou lorsque le placement v1 sélectionne pour la première fois un exécuteur dépourvu de politique. Un exécuteur qui possède déjà une politique la conserve. La politique par défaut est définie dans la configuration de l’infrastructure de la passerelle, sousgateway.infraConfig.default_runner_policy, et toute modification nécessite un redémarrage de la passerelle. Il n’existe aucune politique par défaut intégrée. Lorsque ce paramètre est absent ou nul, rien n’est enregistré et la sandbox est toujours rejetée avec l’erreur CWSANDBOX_POOL_POLICY_NOT_CONFIGURED.
Avant de vous appuyer sur ce mécanisme, tenez compte de deux comportements :
- La politique par défaut est un instantané, pas un lien. Une fois appliquée à un exécuteur, elle devient une politique d’exécuteur ordinaire. Les modifications ultérieures de
default_runner_policyne sont pas répercutées sur les exécuteurs qui en possèdent déjà une. Mettez ces derniers à jour avecUpdateManagedRunner. - Une politique par défaut non valide compromet la création. La passerelle valide la politique configurée au démarrage. Si la validation échoue, la passerelle démarre tout de même, mais la création de sandboxes échoue avec l’erreur
CWSANDBOX_SERVERLESS_MISCONFIGURED.
Limiter les ressources de calcul
resources fixe les limites de ce qu’un conteneur peut demander et fournit les valeurs appliquées par défaut lorsqu’une sandbox ne demande rien.
requireLimits sur true pour rejeter les bacs à sable qui ne déclarent pas à la fois une limite de CPU et une limite de mémoire. Utilisez cpuCeiling et memoryCeiling pour plafonner le total résolu d’une sandbox, ce qui s’avère utile lorsque la couche de base ajoute ses propres conteneurs.
maxGpuCount plafonne le nombre de GPU qu’une sandbox peut demander. Omettez-le pour n’appliquer aucun plafond. Définissez-le sur 0 pour rejeter toute demande de GPU : c’est ainsi que l’on définit un pool sans GPU. Toute demande supérieure au plafond échoue avec l’erreur CWSANDBOX_RESOURCE_CEILING_EXCEEDED.
Restreindre les images
image limite les sources autorisées pour les images de sandbox. Un groupe vide autorise n’importe quelle image. Remplacez [GITHUB-ORG] par le nom de votre organisation ou votre nom d’utilisateur GitHub Container Registry.
Restreindre l’accès réseau
Les contraintes réseau fonctionnent comme une enveloppe. Lorsqu’une sandbox déclare du trafic sortant, la politique accepte ou rejette cette déclaration, sans jamais l’élargir. Lorsque la sandbox ne déclare aucun trafic sortant, la politique applique ses valeurs par défaut de trafic sortant, sauf si la sandbox définitdeny_egress.
Deux paramètres remplissent des rôles distincts :
allowedEgressest la liste d’autorisation du trafic sortant, vérifiée à la création d’une sandbox. Lorsqu’elle n’est pas vide, chaque règle déclarée par la sandbox doit s’y inscrire, et toute règle qui la dépasse est rejetée, et non restreinte. Une liste vide signifie que tout peut être déclaré.defaultEgressdétermine le comportement appliqué en l’absence de demande. Il ne s’applique que lorsque la sandbox ne déclare aucun trafic sortant propre et ne définit pasdeny_egress. Toute déclaration le remplace entièrement.
cidr avec d’éventuelles exclusions except, tenant pour une relation avec d’autres bacs à sable, selector pour des charges de travail sélectionnées par libellé, httpsHostname pour un nom d’hôte HTTPS, ou any. Des ports facultatifs permettent de restreindre davantage la règle. Les règles de nom d’hôte n’autorisent que le port TCP 443 et nécessitent un exécuteur qui les prend en charge. Elles ont leur place dans allowedEgress et dans les demandes des sandbox, et non dans defaultEgress.
TENANT_SCOPE_SAME_USER et TENANT_SCOPE_SAME_ORG. Une troisième valeur, TENANT_SCOPE_SANDBOX_NETWORK, n’est pas encore prise en charge : toute règle de trafic sortant qui l’utilise est rejetée.
L’ingress utilise allowedIngress et defaultIngress pour les ports dont la visibilité est CUSTOM. Une liste d’autorisation non vide s’impose à chaque règle d’ingress déclarée. Lorsqu’une sandbox expose un port CUSTOM sans déclarer de règles d’ingress, defaultIngress s’applique, sauf si la sandbox définit deny_ingress. Les règles d’ingress explicites remplacent cette valeur par défaut. Les règles d’ingress acceptent cidr, tenant ou any ; elles n’acceptent pas de sources fondées sur des noms.
Définissez denyHttpsHostnameRules pour rejeter les règles HTTPS fondées sur des noms d’hôte. Cela ne bloque ni les requêtes DNS ni le trafic HTTPS autorisé par des règles CIDR. Définissez dnsEgress sur DNS_EGRESS_MODE_DENY pour bloquer le trafic sortant sur le port UDP/TCP 53. Si ce paramètre est omis, l’accès DNS au résolveur de la plateforme est autorisé. L’accès au DNS et au stockage de la plateforme est accordé indépendamment des règles de destination. Voir Contraintes réseau pour les règles de confinement et le comportement DNS.
Restreindre la posture de sécurité
security régit les privilèges dans l’invité ainsi que le niveau d’isolation dans lequel la sandbox s’exécute.
allowedRuntimeClasses applique un refus par défaut (fail closed). Une liste vide ou absente n’autorise aucun épinglage de classe de runtime : un sandbox ne peut donc sélectionner une classe que si vous l’ajoutez explicitement à la liste. Définissez defaultCpuRuntimeClass et defaultGpuRuntimeClass pour choisir la classe attribuée à un sandbox lorsqu’il n’en épingle aucune.
Restreindre les instances, la durée de vie, les métadonnées et les volumes
Les groupes restants sont plus réduits.La couche de base
Les contraintes délimitent ce qu’une sandbox peut demander. La couchebase fournit ce que chaque sandbox reçoit sans avoir à le demander : des valeurs par défaut et des éléments joints tels que l’ordonnanceur, les sélecteurs de nœuds, les tolérances, les comptes de service et les secrets d’extraction d’image. Sa forme dépend du runtime de l’exécuteur ; sur un exécuteur Kubernetes, il s’agit d’un fragment de spécification de pod.
Étapes suivantes
- Aperçu des politiques : comment un sandbox est résolu par rapport à une politique, et ce qui a changé par rapport aux profils.
- Déployer et gérer un runner : le cycle de vie du runner et ses autres paramètres de configuration.
- Aperçu de l’API du plan de contrôle : authentification, masques de champs et contrat des points de terminaison.