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 vide est valide et ne fournit ni valeurs par défaut de base ni contraintes explicites. Les gates de sécurité de la plateforme restent en vigueur et, en l’absence de liste d’autorisation des classes de runtime, aucune valeur concrète ne peut être épinglée pour runtime_class. Voir Restreindre la posture de sécurité.
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.Restreindre l’accès à l’API Sandbox par adresse IP source
Utilisezcontrol_plane_access.source_ip_allowlist pour restreindre les requêtes API Sandbox en fonction de l’adresse source. L’adresse source du client, telle qu’elle est observée, doit correspondre à une plage CIDR (classless inter-domain routing) IPv4 ou IPv6. La liste d’autorisation vient s’ajouter à l’authentification, aux autorisations de gestion des identités et des accès (IAM) et aux vérifications d’appartenance à l’organisation. Elle ne rend pas privé l’API endpoint partagé et ne restreint pas le trafic envoyé directement aux services exposés par une sandbox.
Utilisez l’adresse publique de trafic sortant que CoreWeave observe pour le client qui envoie la requête API. Pour un client exécuté dans un Pod CoreWeave Kubernetes Service (CKS) qui utilise l’acheminement standard par traduction d’adresses réseau (NAT) publique, utilisez les plages NAT Egress de son Availability Zone. Pour un client connecté à votre réseau d’entreprise ou à votre réseau privé virtuel (VPN), utilisez les plages publiques de trafic sortant de votre organisation. Une adresse privée de Pod ou de poste de travail ne peut pas se substituer à l’adresse source observée.
Pour ajouter une liste d’autorisation tout en conservant les autres paramètres de la politique de l’exécuteur, procédez comme suit :
-
Ouvrez la politique actuelle dans votre éditeur :
Le mode éditeur conserve l’
etagobtenu lors de la lecture qui a ouvert le document. Ainsi, si un autre administrateur met à jour la politique entre-temps, sa modification provoque un conflit au lieu d’être écrasée. -
Ajoutez le fragment suivant à la racine de la politique actuelle. Remplacez les valeurs de substitution par les CIDR publics de trafic sortant réellement utilisés par vos clients. Omettez toute famille d’adresses que vos clients n’utilisent pas. Conservez les autres champs de la politique :
-
Enregistrez le document complet et quittez l’éditeur. Si l’API signale un
etagobsolète, rouvrez la politique actuelle et appliquez de nouveau votre modification avant d’enregistrer.
- En l’absence de
source_ip_allowlist, aucune restriction d’adresse source n’est appliquée. - Si une liste d’autorisation est présente, l’adresse source observée doit correspondre à au moins un CIDR.
0.0.0.0/0autorise toutes les adresses IPv4, et::/0toutes les adresses IPv6.- L’entrée est limitée à 256 CIDR et à 16 Kio de texte CIDR, avant normalisation. L’API met les préfixes sous forme canonique, supprime les doublons ainsi que les préfixes couverts par une entrée plus large.
Modifications de politique et comportement des requêtes
Une fois le cache des politiques convergé, la passerelle vérifie la liste d’autorisation mise à jour lors de la sélection d’un exécuteur et avant toute nouvelle opération sur des Sandbox existants. Cela inclut les lectures, les commandes, les transferts de fichiers, les opérations de cycle de vie, les snapshots et les requêtes de diffusion en continu. Les nouveaux flux, les flux repris et les requêtes transmises à une autre passerelle font l’objet de cette vérification. Les flux déjà établis restent connectés. Les requêtes de liste et de découverte omettent les ressources refusées en raison de l’adresse source. Si la passerelle ne parvient pas à évaluer une politique requise, la requête échoue plutôt que de renvoyer des ressources sans décision d’accès. Pour les requêtes autres que les reprises de flux, l’API distingue le refus lié à la source de l’indisponibilité de l’état de la politique :
Lors de la reprise d’un flux, un refus lié à l’adresse source peut se traduire par une réponse
SESSION_NOT_FOUND au sein du flux. Une politique d’accès indisponible renvoie toujours Unavailable avec CWSANDBOX_ACCESS_POLICY_UNAVAILABLE.
Une requête de création peut néanmoins utiliser un autre exécuteur adapté qui autorise l’adresse source. Les vérifications d’authentification, d’adéquation des ressources et de capacité restent applicables.
Rétablir l’accès sans restriction de source
L’administration des politiques nécessite le rôle Sandbox Admin et n’est pas soumise à la liste d’adresses IP sources autorisées de l’exécuteur. Pour débloquer un accès verrouillé, ouvrez la politique actuelle à l’aide de la commande d’édition indiquée plus haut. Supprimez le champsource_ip_allowlist ou le champ control_plane_access qui le contient, puis enregistrez le document complet. Conservez les autres paramètres de la politique.
Une fois que le cache des politiques a convergé, les nouvelles requêtes ne sont plus filtrées par adresse source. L’authentification et l’autorisation restent appliquées. Pour connaître les types de champs et les règles de validation, consultez control_plane_access dans la référence des stratégies.
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 exiger des limites dans l’allocation résolue de chaque conteneur. Si un conteneur ne déclare pas son allocation de ressources, defaultCpu et defaultMemory fournissent à la fois les demandes de ressources et les limites, à condition que ces deux valeurs par défaut soient supérieures à zéro. Des valeurs par défaut incomplètes ne suffisent pas à satisfaire cette exigence. Ce paramètre n’impose pas que les limites soient égales aux demandes de ressources. 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 que chaque conteneur 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. Une valeur de maxGpuCount supérieure au nombre maximum de GPU par Sandbox défini pour votre organisation n’augmente pas ce maximum. Pour plus d’informations, voir Fonctionnement des demandes de GPU.
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 concrète : un sandbox ne peut donc épingler 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.
Vous pouvez également définir runtimeClassMappings pour mapper des classes de runtime portables vers des cibles d’exécution. Une liste de mappages non vide active la sélection via runtime_class_selection et rejette tout épinglage concret via runtime_class. Vous ne pouvez pas combiner les mappages avec allowedRuntimeClasses, defaultCpuRuntimeClass ou defaultGpuRuntimeClass. Pour connaître les champs et les règles de sélection, voir RuntimeClassMapping.
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 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. Tout compte de service autre que celui par défaut est rejeté. Pour connaître les champs autorisés et les restrictions, consultez Fixer les valeurs par défaut de l’administrateur avec la couche de base.
É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.